Fluux XMPP 是一个使用 Swift 编写的聊天 SDK,适用于 iOS、MacOS 和 Linux。 它实现了 XMPP 协议,这是一个 IETF 标准。
Fluux XMPP 是一个全新的实现,其目标如下:
因此,在 iOS 上,我们的目标是 iOS 12+ 版本。 在 MacOS 上,我们专注于 Mojave 及更高版本 (10.14+)。 在 Linux 上,我们使用 BSD Socket 与 SwiftNIO,因此它应该可以广泛使用,只要您安装了 Swift 5.0+。
注意:此库正在积极开发中,尚未准备好用于生产环境。
我们设计构建系统时遵循以下原则:
因此,我们根据目标/构建系统以不同的方式构建平台
此决定使我们能够保持所有构建系统非常简单,同时具有良好的平台覆盖范围。
您需要 libxml2 和 TLS 实现(即 libressl)。 您可以使用 HomeBrew 安装它们
brew install libxml2
brew install libressl
借助提供的 Package.swift
文件,您可以使用 Swift Package Manager 构建 lib。
您还需要明确地将构建目标设置为 MacOS 10.12,因为目前 Swift PM 使用 MacOS 10.10 作为部署目标的硬编码值(更多信息请参见 这里)。
要将 Fluux XMPP 集成到您的 Swift PM 项目中,您可以将其作为项目的依赖项添加到您的 Package.swift
文件中。 例如
// swift-tools-version:5.0
import PackageDescription
let package = Package(
name: "XMPPDemo",
dependencies: [
// Dependencies declare other packages that this package depends on.
.package(url: "https://github.com/FluuxIO/XMPP.git", from: "0.0.2"),
],
targets: [
.target(
name: "XMPPDemo",
dependencies: ["XMPP"]),
.testTarget(
name: "XMPPDemoTests",
dependencies: ["XMPPDemo"]),
]
)
您可以修改您的命令行可执行文件 main.swift
以启动 XMPP 客户端。 例如
import Foundation
import XMPP
guard let jid = JID("mremond@localhost/XMPPDemo") else { print("Invalid JID"); exit(1) }
var xmppConfig = Config(jid: jid, password: "mypass", useTLS: true)
xmppConfig.allowInsecure = true
xmppConfig.host = "MacBook-Pro-de-Mickael.local"
xmppConfig.streamObserver = DefaultStreamObserver()
let client = XMPP(config: xmppConfig)
let semaphore = DispatchSemaphore(value: 0)
client.connect {
print("Disconnected !")
semaphore.signal()
}
_ = semaphore.wait(timeout: DispatchTime.distantFuture)
要构建项目,您只需使用标准构建命令
swift build
然后您可以运行您的控制台客户端
.build/debug/XMPPDemo
可以使用以下命令运行测试
swift test
您可以使用 Docker 官方镜像在 Linux 上处理 Swift 项目。 您也可以在 MacOS 上使用 Docker 来构建 Linux 版本。
您可以使用以下命令检索 Swift Docker 镜像
docker pull swift
然后,您可以构建并在容器内打开 Linux shell
docker run -itv $(pwd):/code --name swiftcode -w /code swift /bin/bash
然后,您需要在容器中使用以下命令安装 libxml2-dev
和 libssl-dev
开发包
apt-get update
apt-get install libxml2-dev libssl-dev
从 Docker shell,您可以使用以下命令构建代码
swift build
要在 Linux 上运行测试,您需要明确启用测试发现(请参阅 Swift Test Discovery)
swift test --enable-test-discovery
目前,该库仅支持标准 TLS 连接,不支持 STARTTLS。 Apple Networking 库不支持(尚未?)在建立连接后切换加密,因为他们担心 STARTTLS 实现可能存在的安全问题。
也就是说,XMPP 支持端口 5223 上的 TLS。 它被称为“legacy”SSL,因为使用端口 5223 很久以前就被 XMPP Standards Foundation 弃用了。 也就是说,现代 XMPP 服务器(如 ejabberd)支持端口 5223 上的最先进的 TLS。 目前,要使用 TLS,完全可以使用端口 5223 上的 TLS。