MQTTClient 0.15.3

MQTTClient 0.15.3

LangLanguage Obj-CObjective C
ReleasedLast Release Nov 2019

Maintained by Klaas Pieter Annema, Josip Cavar, Christoph Krey.

MQTTClient 0.15.3

  • By
  • novastonemedia


Build Status codecov CocoaPods Version Platform

Welcome to MQTT-Client-Framework

MQTT-Client-Framework is a native Objective-C iOS library. It uses CFNetwork for networking and CoreData for persistence. It is a complete implementation of MQTT 3.1.1 and supports TLS.

You can read introduction to learn more about framework.

MQTT-Client-Framework is tested with a long list of brokers:

  • mosquitto
  • paho
  • rabbitmq
  • hivemq
  • rsmb
  • mosca
  • vernemq
  • emqtt
  • moquette
  • ActiveMQ
  • Apollo
  • CloudMQTT
  • aws
  • hbmqtt (MQTTv311 only, limitations)
  • aedes
  • flespi


Create a new client and connect to a broker:

#import "MQTTClient.h"

MQTTCFSocketTransport *transport = [[MQTTCFSocketTransport alloc] init]; = @"";
transport.port = 1883;
MQTTSession *session = [[MQTTSession alloc] init];
session.transport = transport;
[session connectWithConnectHandler:^(NSError *error) {
	// Do some work

Subscribe to a topic:

[session subscribeToTopic:@"example/#" atLevel:MQTTQosLevelExactlyOnce subscribeHandler:^(NSError *error, NSArray<NSNumber *> *gQoss) {
    if (error) {
        NSLog(@"Subscription failed %@", error.localizedDescription);
    } else {
        NSLog(@"Subscription sucessfull! Granted Qos: %@", gQoss);

In your MQTTSession delegate, add the following to receive messages for the subscribed topics:

- (void)newMessage:(MQTTSession *)session data:(NSData *)data onTopic:(NSString *)topic qos:(MQTTQosLevel)qos retained:(BOOL)retained mid:(unsigned int)mid {
    // New message received in topic

Publish a message to a topic:

[session publishData:someData onTopic:@"example/#" retain:NO qos:MQTTQosLevelAtMostOnce publishHandler:^(NSError *error) {

If you already have a self signed URL from broker like AWS IoT endpoint, use the url property of MQTTWebsocketTransport:

MQTTWebsocketTransport *transport = [[MQTTWebsocketTransport alloc] init];
transport.url = @"wss://'2018-05-01T23:12:32.950Z'"

MQTTSession *session = [[MQTTSession alloc] init];
session.transport = transport;
[session connectWithConnectHandler:^(NSError *error) {
    // Do some work



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.

If you want to use MQTT over Websockets:

pod 'MQTTClient/Websocket'

If you want to do your logging with CocoaLumberjack (recommended):

pod 'MQTTClient/MinL'
pod 'MQTTClient/ManagerL'
pod 'MQTTClient/WebsocketL'


In your Cartfile:

github "novastone-media/MQTT-Client-Framework"


Git submodule

  1. Add MQTT-Client-Framework as a git submodule into your top-level project directory or simply copy whole folder
  2. Find MQTTClient.xcodeproj and drag it into the file navigator of your app project.
  3. In Xcode, navigate to the target configuration window by clicking on the blue project icon, and selecting the application target under the "Targets" heading in the sidebar.
  4. Under "General" panel go to "Linked Frameworks and Libraries" and add MQTTClient.framework


  1. Download MQTT-Client-Framework
  2. Build it and you should find MQTTClient.framework under "Products" group.
  3. Right click on it and select "Show in Finder" option.
  4. Just drag and drop MQTTClient.framework to your project

Security Disclosure

If you believe you have identified a security vulnerability with MQTT-Client-Framework, please report it to [email protected] and do not post it to a public issue tracker.


This project was originally written by Christoph Krey.