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在XMPP埠 5223 上支援 TLS。也就是說,像 ejabberd 這樣的現代XMPP伺服器在連接埠 5223 上支援最先進的 TLS。