MQTT for iOS and macOS written with Swift

Overview

CocoaMQTT

PodVersion Platforms License Swift version Coverage Status

MQTT v3.1.1 client library for iOS/macOS/tvOS written with Swift 5

Build

Build with Xcode 11.1 / Swift 5.1

Installation

CocoaPods

Install using CocoaPods by adding this line to your Podfile:

use_frameworks! # Add this if you are targeting iOS 8+ or using Swift
pod 'CocoaMQTT'  

Then, run the following command:

$ pod install

Carthage

Install using Carthage by adding the following lines to your Cartfile:

github "emqx/CocoaMQTT" "master"

Then, run the following command:

$ carthage update --platform iOS,macOS,tvOS

Last if you're building for OS X:

  • On your application targets “General” settings tab, in the "Embedded Binaries" section, drag and drop CocoaMQTT.framework from the Carthage/Build/Mac folder on disk.

If you're building for iOS, tvOS:

  • On your application targets “General” settings tab, in the "Linked Frameworks and Libraries" section, drag and drop each framework you want to use from the Carthage/Build folder on disk.

  • On your application targets "Build Phases" settings tab, click the "+" icon and choose "New Run Script Phase". Create a Run Script with the following contents:

    /usr/local/bin/carthage copy-frameworks
    
  • and add the paths to the frameworks you want to use under "Input Files", e.g.:

    $(SRCROOT)/Carthage/Build/iOS/CocoaMQTT.framework
    

Usage

Create a client to connect MQTT broker:

let clientID = "CocoaMQTT-" + String(ProcessInfo().processIdentifier)
let mqtt = CocoaMQTT(clientID: clientID, host: "localhost", port: 1883)
mqtt.username = "test"
mqtt.password = "public"
mqtt.willMessage = CocoaMQTTWill(topic: "/will", message: "dieout")
mqtt.keepAlive = 60
mqtt.delegate = self
mqtt.connect()

Now you can use closures instead of CocoaMQTTDelegate:

mqtt.didReceiveMessage = { mqtt, message, id in
	print("Message received in topic \(message.topic) with payload \(message.string!)")           
}

SSL Secure

One-way certification

No certificate is required locally. If you want to trust all untrust CA certificates, you can do this:

mqtt.allowUntrustCACertificate = true

Two-way certification

Need a .p12 file which is generated by a public key file and a private key file. You can generate the p12 file in the terminal:

openssl pkcs12 -export -clcerts -in client-cert.pem -inkey client-key.pem -out client.p12

MQTT over Websocket

In the 1.3.0, The CocoaMQTT has supported to connect to MQTT Broker by Websocket.

If you integrated by CocoaPods, you need to modify you Podfile like the followings and execute pod install again:

use_frameworks!

target 'Example' do
    pod 'CocoaMQTT/WebSockets', '1.3.0-rc.2'
end

Then, Create a MQTT instance over Websocket:

let websocket = CocoaMQTTWebSocket(uri: "/mqtt")
let mqtt = CocoaMQTT(clientID: clientID, host: host, port: 8083, socket: websocket)

// ...

_ = mqtt.connect()

If you want to add additional custom header to the connection, you can use the following:

let websocket = CocoaMQTTWebSocket(uri: "/mqtt")
websocket.headers = [
            "x-api-key": "value"
        ]
        websocket.enableSSL = true

let mqtt = CocoaMQTT(clientID: clientID, host: host, port: 8083, socket: websocket)

// ...

_ = mqtt.connect()

Example App

You can follow the Example App to learn how to use it. But we need to make the Example App works fisrt:

$ cd Examples

$ pod install

Then, open the Example.xcworkspace/ by Xcode and start it!

Dependencies

These third-party functions are used:

LICENSE

MIT License (see LICENSE)

Contributors

Author

Twitter

https://twitter.com/emqtt

Comments
  • MQTT does not connect at all, always disconnects.

    MQTT does not connect at all, always disconnects.

    I have been trying to connect mqtt to my mqtt Server using 3.1, but i am unable to do so. here is my code : i am using Cocoa MQTT for this:

    mqtt = CocoaMQTT(clientID: clientId, host: server, port: UInt16(port))
         //   mqtt.cleanSession = true
            mqtt.username = ""
            mqtt.password = password
    //        mqtt.willMessage = CocoaMQTTWill(topic: "/will", message: "dieout")
            let driverID = UtilityHelper.getUserId()
            mqtt.keepAlive = 60
            self.mqtt.delegate = self
            
           
            mqtt.connect()
    
    support 
    opened by shezu 19
  • Messages published with `retained` flag do not get delivered on subscription

    Messages published with `retained` flag do not get delivered on subscription

    Hello! I'm having an issue regarding the retained flag. Hope you can shed some light on what might be wrong.

    I suspect it to be a subscription issue (either my code, or a library bug), because when I try to send the publishing through the MQTTX app on the Mac, the result is the same with either a retained message and regular message. However when I subscribe to the topic in MQTTX with Retain handling option set to 0 it works as expected - I get the latest message right after subscribing.

    I publish like this:

    let message = CocoaMQTT5Message(
                topic: "kinzoo/connection/5448",
                payload: [UInt8](message.payload ?? Data()),
                qos: .qos1,
                retained: true
            )
    
            if self.client.publish(message, retained: true, properties: .init()) == -1 {
                Logger.log("Publish did fail \(message)")
            }
    

    And I subscribe like this:

    let subscription = MqttSubscription(topic: "kinzoo/connection/5448", qos: .qos1)
            subscription.noLocal = true
            self.client.subscribe([subscription])
    

    I thought I had done something wrong on the subscription and went over all the code to find the subscription options which are turned off by default. But I still do not get retained messages from the broker!

    I have this logging set up:

    client.didSubscribeTopics = { _, successful, failed, _ in
                Logger.log("did subscribe to \(successful.count) topics, \(failed.count) failed")
            }
            client.didReceiveMessage = { [weak self] client, message, _, _ in
                Logger.log("Did receive\(message.retained ? " retained " : " ")message \(message)")
            }
            client.didPublishMessage = { client, message, _ in
                Logger.log("Did publish\(message.retained ? " retained " : " ")message \(message) with payload \(message.payload)")
            }
    

    And I get this output when publishing:

    CocoaMQTT(debug): SEND: PUBLISH(id: 1, topic: kinzoo/connection/5448, payload: [123, 34, 115, 116, 97, 116, 117, 115, 34, 58, ...])
    CocoaMQTT(debug): ==========================MQTT 5.0==========================
    CocoaMQTT(debug): packetFixedHeaderType 49
    CocoaMQTT(debug): fixedHeader [48]
    CocoaMQTT(debug): remainingLen(len: len) [141, 1]
    CocoaMQTT(debug): variableHeader [0, 22, 107, 105, 110, 122, 111, 111, 47, 99, 111, 110, 110, 101, 99, 116, 105, 111, 110, 47, 53, 52, 52, 56, 0]
    CocoaMQTT(debug): properties []
    CocoaMQTT(debug): payload [123, 34, 115, 116, 97, 116, 117, 115, 34, 58, 34, 111, 110, 108, 105, 110, 101, 34, 44, 34, 101, 120, 112, 111, 115, 101, 67, 108, 105, 101, 110, 116, 83, 116, 97, 116, 117, 115, 34, 58, 116, 114, 117, 101, 44, 34, 115, 99, 104, 101, 109, 97, 86, 101, 114, 115, 105, 111, 110, 34, 58, 49, 44, 34, 100, 101, 118, 105, 99, 101, 84, 111, 107, 101, 110, 34, 58, 34, 67, 66, 48, 54, 68, 56, 69, 67, 45, 51, 68, 55, 52, 45, 52, 51, 51, 51, 45, 56, 69, 68, 69, 45, 53, 54, 53, 53, 65, 55, 52, 67, 53, 48, 53, 49, 34, 125]
    CocoaMQTT(debug): =============================================================
    2022-06-09 22:08:05.205230-0300 MyApp[40788:20628095] [CocoaMQTT] Did publish retained message CocoaMQTT5Message(topic: kinzoo/connection/5448, qos: qos1, payload: [123, 34, 115, 116, 97, 116, 117, 115, 34, 58, ...]) with payload [123, 34, 115, 116, 97, 116, 117, 115, 34, 58, 34, 111, 110, 108, 105, 110, 101, 34, 44, 34, 101, 120, 112, 111, 115, 101, 67, 108, 105, 101, 110, 116, 83, 116, 97, 116, 117, 115, 34, 58, 116, 114, 117, 101, 44, 34, 115, 99, 104, 101, 109, 97, 86, 101, 114, 115, 105, 111, 110, 34, 58, 49, 44, 34, 100, 101, 118, 105, 99, 101, 84, 111, 107, 101, 110, 34, 58, 34, 67, 66, 48, 54, 68, 56, 69, 67, 45, 51, 68, 55, 52, 45, 52, 51, 51, 51, 45, 56, 69, 68, 69, 45, 53, 54, 53, 53, 65, 55, 52, 67, 53, 48, 53, 49, 34, 125]
    

    And this one when subscribing:

    CocoaMQTT(debug): SEND: SUBSCRIBE(id: Optional(5), topics: kinzoo/connection/5448)  
    CocoaMQTT(debug): ==========================MQTT 5.0==========================
    CocoaMQTT(debug): packetFixedHeaderType 130
    CocoaMQTT(debug): fixedHeader [128]
    CocoaMQTT(debug): remainingLen(len: len) [28]
    CocoaMQTT(debug): variableHeader [0, 5, 0]
    CocoaMQTT(debug): properties []
    CocoaMQTT(debug): payload [0, 22, 107, 105, 110, 122, 111, 111, 47, 99, 111, 110, 110, 101, 99, 116, 105, 111, 110, 47, 53, 52, 52, 56, 5]
    CocoaMQTT(debug): RECV: SUBACK(id: 5)
    2022-06-09 22:43:18.063959-0300 MyApp[596:100523] [CocoaMQTT] did subscribe to 1 topics, 0 failed
    

    It does receive publishes made when the client is connected to the broker (tested on mosquitto and paho):

    CocoaMQTT(debug): RECV: PUBLISH(id: 2, topic: , payload: [123, 34, 115, 116, 97, 116, 117, 115, 34, 58, ...])
    CocoaMQTT(info): Received message: CocoaMQTT5Message(topic: kinzoo/connection/5448, qos: qos1, payload: [123, 34, 115, 116, 97, 116, 117, 115, 34, 58, ...])
    2022-06-09 22:34:40.645346-0300 MyApp[585:94432] [CocoaMQTT] Did receive retained message CocoaMQTT5Message(topic: kinzoo/connection/5448, qos: qos1, payload: [123, 34, 115, 116, 97, 116, 117, 115, 34, 58, ...])
    

    Yet, after reconnecting/subscribing again, I do not get the latest retained message. I don't understand if my client is failing to send a proper retained message to the broker, of if the client is failing to deliver the existing retained messages to me when I subscribe.

    Any tips would be highly appreciated!

    Best regards, Rafael

    opened by rafaelnobrekz 16
  • no such moudle ’CocoaAsyncSocket

    no such moudle ’CocoaAsyncSocket

    follow this step $ git init Add CocoaMQTT as a git submodule by running the following command: $ git submodule add https://github.com/emqtt/CocoaMQTT.git

    CocoaPods

    Install using CocoaPods by adding this line to your Podfile:

    use_frameworks! # Add this if you are targeting iOS 8+ or using Swift pod 'CocoaMQTT'
    Then, run the following command:

    $ pod install Last, creat a CocoaMQTT-Bridging-Header.h file in your project, in which add the following line:

    import "CocoaMQTT/CocoaMQTT.h"

    xcode 7.2 // // CocoaMQTT.swift // CocoaMQTT // // Created by Feng [email protected] on 14/8/3. // Copyright (c) 2015 emqtt.io. All rights reserved. //

    import Foundation import CocoaAsyncSocket --- no such moudle ’CocoaAsyncSocket ‘

    import MSWeakTimer

    opened by lsxredrain 16
  • Does not Compile with Xcode 13

    Does not Compile with Xcode 13

    The following code

    @available(OSX 10.15, iOS 13.0, watchOS 6.0, tvOS 13.0, *)
    case closed(URLSessionWebSocketTask.CloseCode)
    

    within CocoaMQTTTypes.swift produces an error:

    Enum cases with associated values cannot be marked potentially unavailable with '@available'

    The error was reported to Apple via Feedback Assistant and Forum. However it is not fixed yet (Beta 3). It seems like it is here to stay...

    enhancement 
    opened by honkmaster 10
  • Reconnect is failing

    Reconnect is failing

    We are getting a client disconnect message immediately after the connection was successfully setup, this happens when the server is down and then comes to active

    According to the traces, while the server is down, one connection channel is keep opened on port 8883.

    When the server is restarted and it tries to reconnect (using mqttclient.connect), the connection is established and immediately the connection is closed after few milliseconds. This is also happening, when we call the disconnect message after the device notices that the server is down.

    Any ideas? Thank you for the help. I'm using CocoaMQTT 1.1.0 and iOS 11

    Update: Issue is reproducible in iOS 12

    bug 
    opened by LarryKanionga 10
  • Running the example project fails

    Running the example project fails

    I downloaded and ran the example project on an iPhone 5. But it fails with the following error.

    dyld: Library not loaded: @rpath/CocoaAsyncSocket.framework/CocoaAsyncSocket Referenced from: /private/var/containers/Bundle/Application/F1106E5F-A377-49BC-B09D-5BB5BDB4FD0D/Example.app/Frameworks/CocoaMQTT.framework/CocoaMQTT Reason: image not found

    opened by Isuru-Nanayakkara 10
  • Error decoding binary message (Not enough bits)

    Error decoding binary message (Not enough bits)

    Hello,

    when a binary with the binary content 0x78, 0x9C, 0x8D message is published to the topic test, this results in a crash in MqttDecodePublish. The error message is Swift/Integers.swift:3447: Fatal error: Not enough bits to represent the passed value

    Version 2.0.2-beta4 as I like to start supporting MQTT5

    Test Case:

    import XCTest
    import CocoaMQTT
    
    class CocoaMQTTRegressionTests: XCTestCase {
    	func testDecodeBinary789c8d() {
    		let publish = MqttDecodePublish()
    		publish.decodePublish(fixedHeader: 49, publishData:
    								[0, 4, 116, 101, 115, 116,
    								 0x78, 0x9C, 0x8D])
    	}
    }
    
    bug 
    opened by philipparndt 9
  • SSL connection with RabbitMQ

    SSL connection with RabbitMQ

    Hi all Did you ever try to connect this MQTT client to a rabbitMQ instance using SSL? I'm having a hard time doing so, maybe you have some suggestions Here's the code I'm using:

        mqttClient = CocoaMQTT(clientId: "client", host: host, port: 8883)
        mqttClient?.secureMQTT = true
        mqttClient?.username = username
        mqttClient?.password = password
        mqttClient?.keepAlive = 90
        mqttClient?.delegate = self
        mqttClient?.connect()
    

    This results in this error:

    Error Domain=GCDAsyncSocketErrorDomain Code=7 "Socket closed by remote peer" UserInfo={NSLocalizedDescription=Socket closed by remote peer}
    

    The endpoint is working correctly, other clients (written in other languages) are working fine.
    I was able to connect using ckrey/MQTT-Client-Framework, but I rather use this library instead :)

    opened by andreamazz 9
  • compatible with iOS 15.1.1?

    compatible with iOS 15.1.1?

    My application is running well so far on iOS 14.8 and iOS 15.0, but publish never gets fired when I try my application on iOS 15.1.1, nor I can receive any message from the device on iOS 15.1.1. Is there a compatibility issue with iOS 15.1.1? Thank you

    opened by lph65724 8
  • Subscription Ack is not getting Called in CocoaMQTTDelegate

    Subscription Ack is not getting Called in CocoaMQTTDelegate

    The following warning is coming from the MQTT library in subscription Ack and the delegate is not getting called. CocoaMQTT(warning): UNEXPECT SUBACK Recivied: SUBACK(id: 1)

    The following code inside the library return with wear . I have tested with many brokers but still getting the same warning and ack fails.

    guard topicsAndQos.count == suback.grantedQos.count else { printWarning("UNEXPECT SUBACK Recivied: (suback)") return }

    bug 
    opened by rajeevradhakrish 8
  • How to add CocoaMqtt Manually

    How to add CocoaMqtt Manually

    I don't have GitHub access at office. So I downloaded and I'm trying to add to my project. Have issue running on real device. And how to test connection using eclipse paho

    support 
    opened by sharihv 8
  • App freeze after connected to MQTT.

    App freeze after connected to MQTT.

    "Linked against modern SDK, VOIP socket will not wake. Use Local Push Connectivity instead." Error after connected to MQTT. The connectivity is okay but the app was freeze

    Screenshot 2022-12-24 at 11 35 39 AM help wanted 
    opened by SemRithiro 0
  • Crash on CocoaMQTT

    Crash on CocoaMQTT

    Hi, I'm using CocoaMQTT inside a framework And sometimes It's crashed in the payloadReady() method I don't know how to reproduce the crash, but I think when data is [0, 0, 0]

    Screenshot 2022-12-05 at 22 25 09

    This is my configuration MQTT code: Screenshot 2022-12-07 at 13 09 54

    help wanted 
    opened by anhtran2020 0
  • Connection issues after network being lost and restored

    Connection issues after network being lost and restored

    Hi, I have connection issues in case of very bad network connection or even when its being lost and then restored. I did this simulation on iOS using Settings-> Developer -> Network Link Conditioner and switching between different network profiles. Also it is happening in real life when network is unstable. So code is

    mqttClient = CocoaMQTT5(clientID: clientID, host: host, port: 8883)
    mqttClient?.username = "username"
    mqttClient?.password = "pass"
    mqttClient?.autoReconnect = true
    mqttClient?.enableSSL = true
    mqttClient?.keepAlive = 5
    mqttClient?.deliverTimeout = 5
    mqttClient?.delegate = self
    mqttClient?.logLevel = .debug
    
    ------Connected here ------
    
    CocoaMQTT(debug): ping
    CocoaMQTT(debug): SEND: PING
    CocoaMQTT(debug): ==========================MQTT 5.0==========================
    CocoaMQTT(debug): packetFixedHeaderType 192
    CocoaMQTT(debug): fixedHeader [192]
    CocoaMQTT(debug): remainingLen(len: len) [0]
    CocoaMQTT(debug): variableHeader []
    CocoaMQTT(debug): properties []
    CocoaMQTT(debug): payload []
    CocoaMQTT(debug): =============================================================
    CocoaMQTT(debug): socket wrote data -192
    CocoaMQTT(debug): RECV: PONG
    pong
    
    ------Disabled network here ------
    
    CocoaMQTT(debug): ping
    CocoaMQTT(debug): SEND: PING
    CocoaMQTT(debug): ==========================MQTT 5.0==========================
    CocoaMQTT(debug): packetFixedHeaderType 192
    CocoaMQTT(debug): fixedHeader [192]
    CocoaMQTT(debug): remainingLen(len: len) [0]
    CocoaMQTT(debug): variableHeader []
    CocoaMQTT(debug): properties []
    CocoaMQTT(debug): payload []
    CocoaMQTT(debug): =============================================================
    CocoaMQTT(debug): socket wrote data -192
    CocoaMQTT(debug): ping
    CocoaMQTT(debug): SEND: PING
    CocoaMQTT(debug): ==========================MQTT 5.0==========================
    CocoaMQTT(debug): packetFixedHeaderType 192
    CocoaMQTT(debug): fixedHeader [192]
    CocoaMQTT(debug): remainingLen(len: len) [0]
    CocoaMQTT(debug): variableHeader []
    CocoaMQTT(debug): properties []
    CocoaMQTT(debug): payload []
    CocoaMQTT(debug): =============================================================
    CocoaMQTT(debug): socket wrote data -192
    CocoaMQTT(debug): ping
    CocoaMQTT(debug): SEND: PING
    CocoaMQTT(debug): ==========================MQTT 5.0==========================
    CocoaMQTT(debug): packetFixedHeaderType 192
    CocoaMQTT(debug): fixedHeader [192]
    CocoaMQTT(debug): remainingLen(len: len) [0]
    CocoaMQTT(debug): variableHeader []
    CocoaMQTT(debug): properties []
    CocoaMQTT(debug): payload []
    CocoaMQTT(debug): =============================================================
    CocoaMQTT(debug): socket wrote data -192
    CocoaMQTT(debug): ping
    CocoaMQTT(debug): SEND: PING
    CocoaMQTT(debug): ==========================MQTT 5.0==========================
    CocoaMQTT(debug): packetFixedHeaderType 192
    CocoaMQTT(debug): fixedHeader [192]
    CocoaMQTT(debug): remainingLen(len: len) [0]
    CocoaMQTT(debug): variableHeader []
    CocoaMQTT(debug): properties []
    CocoaMQTT(debug): payload []
    CocoaMQTT(debug): =============================================================
    CocoaMQTT(debug): socket wrote data -192
    
    ------Enabled network here ------
    
    2022-12-02 10:09:00.777534+0000 App[67721:4873012] [connection] nw_socket_handle_socket_event [C5:1] Socket SO_ERROR [54: Connection reset by peer]
    CocoaMQTT(debug): socket disconnected
    disconnect
    

    It's never reconnect again

    opened by vadym-kozak 1
  • RetainHandling attribute when subscribing

    RetainHandling attribute when subscribing

    When the RetainHandling attribute is set to sendOnSubscribe, the retain message cannot be received, and when it is set to none, the retain message can be received. The functions of these two attributes are just the opposite.

    opened by DDIsFriend 1
  • Why is delegateQueue run on main thread?

    Why is delegateQueue run on main thread?

    Hi!! I have a issue about application performance when using CocoaMQTT5. My app receives message once every second (maybe less time). Even if i don't process anything when i receive the message, when i scroll tableview, my tableview lags I have checked source code and i see delegateQueue is running on main thread. Maybe that's why My UI is stuck on some where. i have re-set backgroundOnSocket running in background thread. So, what's the problem if i put backgroundOnSocket running on background thread ? (Of course I will put UI update tasks on the main thread)

    CocoaMQTT5 default: image

    I set: image

    Thank you so much

    help wanted 
    opened by developer-bk 1
Releases(2.0.8)
Owner
EMQ X MQTT Broker
An Open-Source, Cloud-Native, distributed MQTT Message Broker for Large-scale IoT Applications.
EMQ X MQTT Broker
OAuth2 framework for macOS and iOS, written in Swift.

OAuth2 OAuth2 frameworks for macOS, iOS and tvOS written in Swift 5.0. ⤵️ Installation ?? Usage ?? Sample macOS app (with data loader examples) ?? Tec

Pascal Pfiffner 1.1k Jan 8, 2023
Socket framework for Swift using the Swift Package Manager. Works on iOS, macOS, and Linux.

BlueSocket Socket framework for Swift using the Swift Package Manager. Works on iOS, macOS, and Linux. Prerequisites Swift Swift Open Source swift-5.1

Kitura 1.3k Dec 26, 2022
🌏 A zero-dependency networking solution for building modern and secure iOS, watchOS, macOS and tvOS applications.

A zero-dependency networking solution for building modern and secure iOS, watchOS, macOS and tvOS applications. ?? TermiNetwork was tested in a produc

Bill Panagiotopoulos 90 Dec 17, 2022
Bonjour networking for discovery and connection between iOS, macOS and tvOS devices.

Merhaba Bonjour networking for discovery and connection between iOS, macOS and tvOS devices. Features Creating Service Start & Stop Service Stop Brows

Abdullah Selek 67 Dec 5, 2022
ZeroMQ Swift Bindings for iOS, macOS, tvOS and watchOS

SwiftyZeroMQ - ZeroMQ Swift Bindings for iOS, macOS, tvOS and watchOS This library provides easy-to-use iOS, macOS, tvOS and watchOS Swift bindings fo

Ahmad M. Zawawi 60 Sep 15, 2022
A delightful networking framework for iOS, macOS, watchOS, and tvOS.

AFNetworking is a delightful networking library for iOS, macOS, watchOS, and tvOS. It's built on top of the Foundation URL Loading System, extending t

AFNetworking 33.3k Jan 5, 2023
A networking library for iOS, macOS, watchOS and tvOS

Thunder Request Thunder Request is a Framework used to simplify making http and https web requests. Installation Setting up your app to use ThunderBas

3 SIDED CUBE 16 Nov 19, 2022
Official ProtonVPN iOS and macOS app

ProtonVPN for iOS and macOS Copyright (c) 2021 Proton Technologies AG Dependencies This app uses CocoaPods for most dependencies. Everything is inside

ProtonVPN 121 Dec 20, 2022
Kiwix for offline access on iOS and macOS

Kiwix for iOS & macOS This is the home for Kiwix apps on iOS and macOS. Mobile app for iPads & iPhones Download the iOS mobile app on iTunes App Store

Kiwix 299 Dec 21, 2022
Passepartout is a non-official, user-friendly OpenVPN® client for iOS and macOS.

Passepartout Passepartout is a non-official, user-friendly OpenVPN® client for iOS and macOS. Overview All profiles in one place Passepartout lets you

Passepartout 523 Dec 27, 2022
Lightweight library for web server applications in Swift on macOS and Linux powered by coroutines.

Why Zewo? • Support • Community • Contributing Zewo Zewo is a lightweight library for web applications in Swift. What sets Zewo apart? Zewo is not a w

Zewo 1.9k Dec 22, 2022
Super lightweight async HTTP server library in pure Swift runs in iOS / MacOS / Linux

Embassy Super lightweight async HTTP server in pure Swift. Please read: Embedded web server for iOS UI testing. See also: Our lightweight web framewor

Envoy 540 Dec 15, 2022
A simple GCD based HTTP client and server, written in 'pure' Swift

SwiftyHTTP Note: I'm probably not going to update this any further - If you need a Swift networking toolset for the server side, consider: Macro.swift

Always Right Institute 116 Aug 6, 2022
A new, clean and lean network interface reachability library written in Swift.

Reachability A new, clean and lean network interface reachability library written in Swift. Remarks Network reachability changes can be monitored usin

Alecrim 7 Aug 8, 2022
SwiftyReachability is a simple and lightweight network interface manager written in Swift.

SwiftyReachability is a simple and lightweight network interface manager written in Swift. Freely inspired by https://github.com/tonymillion/Reachabil

Antonio Guerra 5 Nov 4, 2022
Easy to use OAuth 2 library for iOS, written in Swift.

Heimdallr Heimdallr is an OAuth 2.0 client specifically designed for easy usage. It currently supports the resource owner password credentials grant f

trivago N.V. 628 Oct 17, 2022
iOS Network monitor/interceptor framework written in Swift

NetShears NetShears is a Network interceptor framework written in Swift. NetShears adds a Request interceptor mechanisms to be able to modify the HTTP

Divar 119 Dec 21, 2022
📱  A strongly-typed, caching GraphQL client for iOS, written in Swift.

Apollo iOS is a strongly-typed, caching GraphQL client, written in Swift. It allows you to execute queries and mutations against a GraphQL server, and

Apollo GraphQL 3.6k Jan 7, 2023
Login-screen-UI - A simple iOS login screen written in Swift 5

This project has been updated to Swift 5 and Xcode 11.2 About This is a simple i

Kushal Shingote 2 Feb 4, 2022