You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
136 lines
2.9 KiB
136 lines
2.9 KiB
1 year ago
|
MQTT-Client-Framework
|
||
|
=====================
|
||
|
|
||
|
an Objective-C native MQTT Framework http://mqtt.org
|
||
|
|
||
|
### Tested with
|
||
|
|
||
|
* mosquitto
|
||
|
* paho
|
||
|
* rabbitmq
|
||
|
* hivemq
|
||
|
* rsmb
|
||
|
* mosca
|
||
|
* vernemq
|
||
|
* emqtt
|
||
|
* moquette
|
||
|
* ActiveMQ
|
||
|
* Apollo
|
||
|
* CloudMQTT
|
||
|
* aws
|
||
|
* hbmqtt (MQTTv311 only, limitations)
|
||
|
|
||
|
### As a CocoaPod
|
||
|
|
||
|
Use the CocoaPod MQTTClient!
|
||
|
|
||
|
Add this to your Podfile:
|
||
|
|
||
|
```
|
||
|
pod 'MQTTClient'
|
||
|
```
|
||
|
which is a short for
|
||
|
```
|
||
|
pod 'MQTTClient/Min'
|
||
|
pod 'MQTTClient/Manager'
|
||
|
```
|
||
|
|
||
|
The Manager subspec includes the MQTTSessionManager class.
|
||
|
|
||
|
Additionally add this subspec if you want to use MQTT over Websockets:
|
||
|
|
||
|
```
|
||
|
pod 'MQTTClient/Websocket'
|
||
|
```
|
||
|
|
||
|
If you want to do your logging with CocoaLumberjack (my suggestion), use
|
||
|
```
|
||
|
pod 'MQTTClient/MinL'
|
||
|
pod 'MQTTClient/ManagerL'
|
||
|
pod 'MQTTClient/WebsocketL'
|
||
|
```
|
||
|
instead.
|
||
|
|
||
|
### As a dynamic library
|
||
|
|
||
|
Or use the dynamic library created in the MQTTFramework target.
|
||
|
|
||
|
### As source
|
||
|
|
||
|
Or include the source from here.
|
||
|
|
||
|
### With Carthage
|
||
|
|
||
|
[Carthage](https://github.com/Carthage/Carthage)
|
||
|
|
||
|
### Usage
|
||
|
|
||
|
Create a new client and connect to a broker:
|
||
|
|
||
|
```objective-c
|
||
|
#import "MQTTClient.h"
|
||
|
|
||
|
\@interface MyDelegate : ... <MQTTSessionDelegate>
|
||
|
...
|
||
|
|
||
|
MQTTCFSocketTransport *transport = [[MQTTCFSocketTransport alloc] init];
|
||
|
transport.host = @"localhost";
|
||
|
transport.port = 1883;
|
||
|
|
||
|
MQTTSession *session = [[MQTTSession alloc] init];
|
||
|
session.transport = transport;
|
||
|
|
||
|
session.delegate = self;
|
||
|
|
||
|
[session connectAndWaitTimeout:30]; //this is part of the synchronous API
|
||
|
|
||
|
```
|
||
|
|
||
|
Subscribe to a topic:
|
||
|
|
||
|
```objective-c
|
||
|
[session subscribeToTopic:@"example/#" atLevel:2 subscribeHandler:^(NSError *error, NSArray<NSNumber *> *gQoss){
|
||
|
if (error) {
|
||
|
NSLog(@"Subscription failed %@", error.localizedDescription);
|
||
|
} else {
|
||
|
NSLog(@"Subscription sucessfull! Granted Qos: %@", gQoss);
|
||
|
}
|
||
|
}]; // this is part of the block API
|
||
|
|
||
|
```
|
||
|
|
||
|
Add the following to receive messages for the subscribed topics
|
||
|
```objective-c
|
||
|
- (void)newMessage:(MQTTSession *)session
|
||
|
data:(NSData *)data
|
||
|
onTopic:(NSString *)topic
|
||
|
qos:(MQTTQosLevel)qos
|
||
|
retained:(BOOL)retained
|
||
|
mid:(unsigned int)mid {
|
||
|
// this is one of the delegate callbacks
|
||
|
}
|
||
|
```
|
||
|
|
||
|
Publish a message to a topic:
|
||
|
|
||
|
```objective-c
|
||
|
[session publishAndWaitData:data
|
||
|
onTopic:@"topic"
|
||
|
retain:NO
|
||
|
qos:MQTTQosLevelAtLeastOnce]; // this is part of the asynchronous API
|
||
|
```
|
||
|
|
||
|
### docs
|
||
|
|
||
|
Documentation generated with doxygen http://doxygen.org in [Documentation](MQTTClient/dist/documentation/html/index.html)
|
||
|
|
||
|
|
||
|
### Comparison MQTT Clients for iOS (incomplete)
|
||
|
|
||
|
|Wrapper|---|----|MQTTKit |Marquette|Moscapsule|Musqueteer|MQTT-Client|MqttSDK|CocoaMQTT|
|
||
|
|-------|---|----|---------|---------|----------|----------|-----------|-------|---------|
|
||
|
| | | |Obj-C |Obj-C |Swift |Obj-C |Obj-C |Obj-C |Swift |
|
||
|
|Library|IBM|Paho|Mosquitto|Mosquitto|Mosquitto |Mosquitto |native |native |native |
|
||
|
|
||
|
|