• Stars
    star
    1,543
  • Rank 29,147 (Top 0.6 %)
  • Language
    Swift
  • License
    Other
  • Created almost 10 years ago
  • Updated about 2 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

MQTT 5.0 client library for iOS and macOS written in Swift

CocoaMQTT

PodVersion Platforms License Swift version

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

Build

Build with Xcode 11.1 / Swift 5.1

IOS Target: 12.0 or above OSX Target: 10.13 or above TVOS Target: 10.0 or above

xcode 14.3 issue:

File not found: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/arc/libarclite_iphonesimulator.a

If you encounter the issue, Please update your project minimum depolyments to 11.0

Installation

CocoaPods

To integrate CocoaMQTT into your Xcode project using CocoaPods, you need to modify you Podfile like the followings:

use_frameworks!

target 'Example' do
    pod 'CocoaMQTT'
end

Then, run the following command:

$ pod install

At last, import "CocoaMQTT" to your project:

import CocoaMQTT

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 --use-xcframeworks

At last:

On your application targets “General” settings tab, in the "Frameworks, Libraries, and Embedded content" section, drag and drop CocoaMQTT.xcframework, CocoaAsyncSocket.xcframework and Starscream.xcframework from the Carthage/Build folder on disk. Then select "Embed & Sign".

Usage

Create a client to connect MQTT broker:

///MQTT 5.0
let clientID = "CocoaMQTT-" + String(ProcessInfo().processIdentifier)
let mqtt5 = CocoaMQTT5(clientID: clientID, host: "broker.emqx.io", port: 1883)

let connectProperties = MqttConnectProperties()
connectProperties.topicAliasMaximum = 0
connectProperties.sessionExpiryInterval = 0
connectProperties.receiveMaximum = 100
connectProperties.maximumPacketSize = 500
mqtt5.connectProperties = connectProperties

mqtt5.username = "test"
mqtt5.password = "public"
mqtt5.willMessage = CocoaMQTTMessage(topic: "/will", string: "dieout")
mqtt5.keepAlive = 60
mqtt5.delegate = self
mqtt5.connect()

///MQTT 3.1.1
let clientID = "CocoaMQTT-" + String(ProcessInfo().processIdentifier)
let mqtt = CocoaMQTT(clientID: clientID, host: "broker.emqx.io", port: 1883)
mqtt.username = "test"
mqtt.password = "public"
mqtt.willMessage = CocoaMQTTMessage(topic: "/will", string: "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

Note: Please use openssl version 1.1 (e.g. brew install [email protected]), otherwise you may not be able to import the generated .p12 file to the system correctly.

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'
end

If you're using CocoaMQTT in a project with only a .podspec and no Podfile, e.g. in a module for React Native, add this line to your .podspec:

Pod::Spec.new do |s|
  ...
  s.dependency "Starscream"
end

Then, Create a MQTT instance over Websocket:

///MQTT 5.0
let websocket = CocoaMQTTWebSocket(uri: "/mqtt")
let mqtt5 = CocoaMQTT5(clientID: clientID, host: host, port: 8083, socket: websocket)
let connectProperties = MqttConnectProperties()
connectProperties.topicAliasMaximum = 0
// ...
mqtt5.connectProperties = connectProperties
// ...

_ = mqtt5.connect()

///MQTT 3.1.1
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:

GCDAsyncSocket

LICENSE

MIT License (see LICENSE)

Contributors

Author

Twitter

https://twitter.com/EMQTech

More Repositories

1

emqx

The most scalable open-source MQTT broker for IoT, IIoT, and connected vehicles
Erlang
13,235
star
2

MQTTX

A Powerful and All-in-One MQTT 5.0 client toolbox for Desktop, CLI and WebSocket.
TypeScript
3,456
star
3

neuron

Open source industrial IoT connectivity server
C
878
star
4

MQTT-Client-Examples

MQTT Client Examples
Kotlin
705
star
5

qmqtt

MQTT client for Qt
C++
646
star
6

emqtt-bench

Lightweight MQTT benchmark tool written in Erlang
Erlang
491
star
7

mqtt-jmeter

MQTT JMeter Plugin
Java
438
star
8

emqtt

Erlang MQTT 5.0 Client
Erlang
365
star
9

esockd

Erlang general non-blocking TCP/SSL socket server
Erlang
199
star
10

quic

QUIC protocol for Erlang & Elixir
Erlang
198
star
11

emqx-operator

A Kubernetes Operator for EMQX
Go
194
star
12

emqx-rel

Release Project for EMQX Broker prior to 4.3. Newer releases are built here: https://github.com/emqx/emqx
Shell
189
star
13

emqx-docs

EMQX product documentation
HTML
151
star
14

NanoSDK

NanoSDK - MQTT 5.0-compliant SDK with QUIC support in NNG flavor
C
108
star
15

mria

Asynchronously replicated Mnesia-like database for Erlang/Elixir
Erlang
99
star
16

qmqtt-client

MQTT Client GUI Written with Qt
C++
97
star
17

ekka

Autocluster and Autoheal for EMQX Broker
Erlang
94
star
18

emqx-web-hook

EMQX Webhook Plugin
Erlang
77
star
19

emqx-rule-engine

EMQX Rule Engine
Erlang
69
star
20

emqx-plugin-template

EMQ X Plugin Template and Demo
Erlang
63
star
21

emqx-coap

EMQX CoAP Gateway
Erlang
61
star
22

emqx-auth-mysql

Authentication, ACL with MySQL Database
Erlang
55
star
23

emqx-dashboard

EMQ X Dashboard
CSS
52
star
24

MQTT-Web-Toolkit

EMQ Web Toolkit
Vue
44
star
25

emqx-auth-http

EMQX HTTP Authentication/ACL Plugin
Erlang
43
star
26

emqx-extension-examples

Examples for ExHook & ExProto
Erlang
41
star
27

emqx-dashboard5

The management console used to monitor and manage EMQX clusters.
Vue
38
star
28

minirest

A Mini RESTful API Framework
Erlang
37
star
29

neuron-dashboard

Neuron Dashboard
TypeScript
36
star
30

emqx-bridge-mqtt

Bridge of MQTT
Erlang
36
star
31

replayq

Generic on-disk persistent queue implementation for Erlang
Erlang
35
star
32

emqx-auth-pgsql

EMQ X PostgreSQL Authentication Plugin
Erlang
35
star
33

edge-stack

Shell
34
star
34

emqx-auth-redis

EMQ X Redis Authentication/ACL Plugin
Erlang
33
star
35

hocon

HOCON configuration Parser for Erlang/OTP
Erlang
32
star
36

mqtt5.0-cn

MQTT Version 5.0 Chinese
31
star
37

emqx-lwm2m

EMQ X LwM2M Gateway
Erlang
30
star
38

emqx-sn

EMQX MQTT-SN Gateway
Erlang
29
star
39

mqttbs

MQTT Benchmark Suite
29
star
40

emqx-auth-jwt

EMQ X JWT Authentication Plugin
Erlang
28
star
41

emqx-lua-hook

EMQ X Lua Hook
Erlang
28
star
42

ecpool

Erlang Connection/Client Pool Library
Erlang
28
star
43

emqx-dashboard-frontend

EMQ X Dashboard Frontend
Vue
25
star
44

emqx-prometheus

EMQX Statsd
Erlang
24
star
45

emqx-docker

An Open-Source, Cloud-Native, Distributed MQTT Message Broker for IoT.
Shell
23
star
46

emqx-exhook

The Multiple-Language extension plugin for EMQ X Hooks
Erlang
23
star
47

emqx-exporter

Prometheus exporter for EMQX
Python
22
star
48

emqx-retainer

EMQ X Retainer
Erlang
21
star
49

emqx-auth-mongo

EMQ X Authentication/ACL with MongoDB
Erlang
21
star
50

coap-jmeter

CoAP JMeter Plugin
Java
20
star
51

eip

EMQX Improvement Proposals
Makefile
19
star
52

emqx-tutorial

EMQ X Tutorial
JavaScript
19
star
53

emqx-elixir-plugin

An Example Plugin for EMQX in Elixir
Elixir
19
star
54

emqx-exproto

The Multiple-Language extension plugin for Protocol access
Erlang
18
star
55

emqx-auth-username

EMQ X Authentication with Username and Password
Erlang
17
star
56

openai-mqtt-nodejs

Node.js project that combines OpenAI's API with MQTT for real-time AI-driven interactions in IoT ecosystems.
JavaScript
17
star
57

blog

EMQ Blog
Python
16
star
58

emqx-auth-clientid

EMQ X ClientId Authentication Plugin
Erlang
16
star
59

jq

jq (nif) for beam
C
15
star
60

emqx-dashboard-web

Frontend Source Code for EMQ X dashboard Enterprise v4
Vue
15
star
61

emqx-tutorial-cn

EMQ X 中文Tutorial
14
star
62

emqx-extension-java-sdk

The Java SDK for emqx-extension-hook
Java
14
star
63

neuron-docs

Neuron Documentation
Shell
14
star
64

emqx-extension-python-sdk

The Python SDK for emqx-extension-hook
Python
13
star
65

emqttb

A scriptable autotuning load generator for MQTT
Erlang
13
star
66

erlang-rocksdb

Upstream is here: https://gitlab.com/barrel-db/erlang-rocksdb
C++
13
star
67

HBridge

High-performance MQTT Bridge written in Haskell
Haskell
12
star
68

pulsar-client-erl

Apache Pulsar client for Erlang/Elixir
Erlang
11
star
69

emqx-management

EMQ X Management API
Erlang
10
star
70

wormhole

The channel for routing request from cloud to edge.
Go
10
star
71

cdk-emqx-cluster

Python
10
star
72

emqx-ui

EMQX UI Library
Vue
9
star
73

cloud-docs

EMQX Cloud Documentations
CSS
9
star
74

emqx-meter-cn

EMQ X Meter Benchmark
Python
9
star
75

local-storage-encryption

Obfuscate key-value pairs in localStorage.
JavaScript
9
star
76

deploy-emqx-to-aws-with-terraform

HCL
9
star
77

mqtt-to-timescaledb

Ingesting time series data into TimescaleDB using MQTT and EMQX | MQTT Timescale Integration
Makefile
8
star
78

example

EMQ x IoT project sample code
Java
8
star
79

ehttpc

HTTP Client for Erlang/OTP
Erlang
7
star
80

rebar3_emqx_plugin

A rebar3 plugin for automatically generate emqx plugin template
Erlang
7
star
81

ecql

Erlang Cassandra CQL Driver
Erlang
7
star
82

mqtt-to-kafka

Streaming IoT data into Confluent/Kafka using MQTT and EMQX | MQTT Kafka Integration
Makefile
7
star
83

influxdb-client-erl

Erlang
6
star
84

ipqueue

High Performance Interleaved Priority Queue for Erlang/Elixir
Erlang
6
star
85

emqx-recon

Recon debug/optimize plugin
Erlang
6
star
86

deploy-emqx-to-alibabacloud-with-terraform

HCL
5
star
87

emqx-builder

Dockerfile
5
star
88

emqx-reloader

Erlang Module Reloader
Erlang
5
star
89

mqtt-security-scanner

MQTT Security Scanner
Go
5
star
90

lc

Load Control for beam
Erlang
5
star
91

emqx-exproto-java-sdk

The Java SDK for emqx-exproto
Java
5
star
92

emqx-stomp

EMQ X Stomp Protocol Plugin
Erlang
5
star
93

emqx-auth-ldap

EMQ X LDAP Authentication Plugin
Erlang
5
star
94

emqx-10million-test-cn

EMQ X 10MILLION TEST
4
star
95

emqx-webinars

Webinar materials
Shell
4
star
96

mqtt-to-influxdb

Ingesting time series data into InfluxDB using MQTT and EMQX | MQTT InfluxDB Integration
JavaScript
4
star
97

emqx-usage-example

Using Docker Compose to show different usages of EMQX
4
star
98

tf-emqx-performance-test

HCL
4
star
99

fabric-docs

Fabric Docs
4
star
100

homebrew-mqttx

Ruby
4
star