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 构建该库。
您还需要明确地将构建目标设置为 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 : " XMPP Demo " ,
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 : " XMPP Demo " ,
dependencies : [ " XMPP " ] ) ,
. testTarget (
name : " XMPP DemoTests " ,
dependencies : [ " XMPP Demo " ] ) ,
]
)
您可以修改命令行可执行文件main.swift
来启动XMPP客户端。例如:
import Foundation
import XMPP
guard let jid = JID ( " mremond@localhost/ XMPP Demo " ) else { print ( " Invalid JID " ) ; exit ( 1 ) }
var XMPP Config = Config ( jid : jid , password : " mypass " , useTLS : true )
XMPP Config . allowInsecure = true
XMPP Config . host = " MacBook-Pro-de-Mickael.local "
XMPP Config . streamObserver = DefaultStreamObserver ( )
let client = XMPP ( config : XMPP Config )
let semaphore = DispatchSemaphore ( value : 0 )
client . connect {
print ( " Disconnected ! " )
semaphore . signal ( )
}
_ = semaphore . wait ( timeout : DispatchTime . distantFuture )
要构建项目,您只需使用标准构建命令即可:
swift build
然后您可以运行控制台客户端:
.build/debug/ XMPP Demo
可以使用以下命令运行测试:
swift test
您可以使用 Docker 官方镜像来运行 Linux 上的 Swift 项目。您还可以在 MacO 上使用 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
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 网络库不支持(还?)在建立连接后切换加密,因为他们担心 STARTTLS 实现可能存在的安全问题。
也就是说, XMPP在端口 5223 上支持 TLS。它被称为“传统”SSL,因为XMPP标准基金会不久前已弃用端口 5223。也就是说,像 ejabberd 这样的现代XMPP服务器在端口 5223 上支持最先进的 TLS。目前要使用 TLS,在端口 5223 上使用 TLS 是完全可以的。