Project Icon

CocoaMQTT

Swift实现的跨平台MQTT客户端库

CocoaMQTT是一个基于Swift 5开发的跨平台MQTT客户端库,支持iOS、macOS和tvOS。该库兼容MQTT v3.1.1和v5.0协议,提供简洁的API接口,支持SSL安全连接和WebSocket通信。CocoaMQTT具有高性能和稳定性,适用于开发物联网和实时通信应用。开发者可通过CocoaPods或Carthage轻松集成此库。

CocoaMQTT

PodVersion 平台 许可证 Swift版本

使用Swift 5编写的iOS/macOS/tvOS平台MQTT v3.1.1和v5.0客户端库

构建

使用Xcode 11.1 / Swift 5.1构建

iOS目标版本:12.0或更高 macOS目标版本:10.13或更高 tvOS目标版本:10.0或更高

Xcode 14.3问题:

文件未找到:/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/arc/libarclite_iphonesimulator.a

如果遇到此问题,请将项目的最低部署版本更新至11.0

安装

CocoaPods

要使用CocoaPods将CocoaMQTT集成到您的Xcode项目中,您需要修改您的Podfile,如下所示:

use_frameworks!

target 'Example' do
    pod 'CocoaMQTT'
end

然后,运行以下命令:

$ pod install

最后,在您的项目中导入"CocoaMQTT":

import CocoaMQTT

Carthage

通过在Cartfile中添加以下行来使用Carthage安装:

github "emqx/CocoaMQTT" "master"

然后,运行以下命令:

$ carthage update --platform iOS,macOS,tvOS --use-xcframeworks

最后:

在应用程序目标的"General"设置选项卡中,在"Frameworks, Libraries, and Embedded content"部分,从磁盘上的Carthage/Build文件夹拖放CocoaMQTT.xcframework、CocoaAsyncSocket.xcframework和Starscream.xcframework。然后选择"Embed & 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.topic) 中收到消息,负载为 \(message.string!)")           
}

SSL 安全

单向认证

本地不需要证书。 如果您想信任所有不受信任的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 openssl@1.1),否则您可能无法正确将生成的.p12文件导入系统。

基于Websocket的MQTT

在1.3.0版本中,CocoaMQTT已支持通过Websocket连接到MQTT代理。

如果您通过CocoaPods集成,需要修改您的Podfile如下,并重新执行pod install

use_frameworks!

target 'Example' do
    pod 'CocoaMQTT/WebSockets'
end

如果您在只有.podspec而没有Podfile的项目中使用CocoaMQTT,例如在React Native的模块中,请在您的.podspec中添加以下行:

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

然后,创建一个基于Websocket的MQTT实例:

///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()

示例应用

您可以参考示例应用来学习如何使用它。但首先我们需要使示例应用运行起来:

$ cd Examples

$ pod install

然后,用Xcode打开Example.xcworkspace/并运行它!

依赖

使用了以下第三方功能:

GCDAsyncSocket

许可证

MIT许可证(见LICENSE

贡献者

作者

Twitter

https://twitter.com/EMQTech

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号