MQTT v3.1.1 и V5.0 Клиентская библиотека для iOS/macOS/TVOS написано с помощью Swift 5
Построить с помощью Xcode 11.1 / Swift 5.1
Цель iOS: 12.0 или выше цели OSX: 10.13 или выше цели TVOS: 10.0 или выше
File not found : /Applications/ Xcode . app / Contents / Developer / Toolchains / XcodeDefault . xctoolchain / usr / lib / arc / libarclite_iphonesimulator . aЕсли вы столкнетесь с проблемой, пожалуйста, обновите минимальные деполименты своего проекта до 11.0
Чтобы интегрировать CocoAmQTT в ваш проект XCode с использованием кокопод, вам необходимо изменить свой Podfile , как следствие:
use_frameworks!
target 'Example' do
pod 'CocoaMQTT'
endЗатем запустите следующую команду:
$ pod installНаконец, импортируйте «cocoamqtt» в ваш проект:
import CocoaMQTTУстановите, используя Carthage, добавив следующие линии в свой Cartfile:
github "emqx/CocoaMQTT" "master"
Затем запустите следующую команду:
$ carthage update --platform iOS,macOS,tvOS --use-xcframeworksНаконец:
На вкладке «Общие» настройки «Общие» приложения в разделе «Фреймворки, библиотеки и встроенный контент» перетаскивают Cocoamqtt.xcframework, Cocoaasyncsocket.xcframework и Starscream.xcframework из папки Carthage/Build на Disk. Затем выберите «Enced & Sign».
Создайте клиент для подключения брокера MQTT:
///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 ( ) Теперь вы можете использовать закрытие вместо CocoaMQTTDelegate :
mqtt . didReceiveMessage = { mqtt , message , id in
print ( " Message received in topic ( message . topic ) with payload ( message . string! ) " )
} Сертификат не требуется на месте. Если вы хотите доверять всем неуверенным сертификатам CA, вы можете сделать это:
mqtt . allowUntrustCACertificate = trueНужен файл .p12, который генерируется файлом открытого ключа и файлом закрытого ключа. Вы можете генерировать файл P12 в терминале:
openssl pkcs12 -export -clcerts -in client-cert.pem -inkey client-key.pem -out client.p12
Примечание. Пожалуйста, используйте openssl версию 1.1 (например, brew install [email protected] ), в противном случае вы не сможете правильно импортировать сгенерированный файл .p12 в систему.
В 1.3.0 CocoamQTT поддерживает подключение к MQTT Broker с помощью WebSocket.
Если вы интегрированы с помощью Cocoapods , вам нужно изменить свой Podfile как следующий, и снова выполнить pod install :
use_frameworks!
target 'Example' do
pod 'CocoaMQTT/WebSockets'
end Если вы используете Cocoamqtt в проекте только с .podspec и No Podfile , например, в модуле для нативного React, добавьте эту линию в свой .podspec :
Pod :: Spec . new do | s |
...
s . dependency "Starscream"
endЗатем создайте экземпляр MQTT через 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 ( )Если вы хотите добавить дополнительный пользовательский заголовок в подключение, вы можете использовать следующее:
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 ( ) Вы можете следовать примеру примера, чтобы узнать, как его использовать. Но нам нужно сделать пример приложения Works Fisrt:
$ cd Examples
$ pod install Затем откройте Example.xcworkspace/ от xcode и запустите его!
Эти сторонние функции используются:
Gcdasyncsocket
Лицензия MIT (см. LICENSE )
https://twitter.com/emqtech