Fluux XMPP ist ein Chat-SDK in Swift für iOS, MacOS und Linux. Es implementiert das XMPP Protokoll, einen IETF-Standard.
Fluux XMPP ist eine saubere Implementierung mit den folgenden Zielen:
Daher zielen wir auf iOS auf die iOS-Version 12+ ab. Unter MacOS konzentrieren wir uns auf Mojave und höher (10.14+). Unter Linux verwenden wir BSD Socket mit SwiftNIO, daher sollte es recht allgemein funktionieren, solange Sie Swift 5.0+ installiert haben.
Hinweis : Diese Bibliothek befindet sich in einer sehr aktiven Entwicklung und ist noch nicht produktionsbereit.
Wir entwerfen das Build-System nach folgenden Prinzipien:
Daher bauen wir die Plattform je nach Ziel-/Build-System unterschiedlich auf:
Diese Entscheidung ermöglicht es uns, das gesamte Build-System sehr einfach zu halten und gleichzeitig eine gute Plattformreichweite zu gewährleisten.
Sie benötigen eine libxml2 und eine TLS-Implementierung (z. B. libressl). Sie können sie mit HomeBrew installieren:
brew install libxml2
brew install libressl
Dank der bereitgestellten Package.swift
Datei können Sie die Bibliothek mit Swift Package Manager erstellen.
Sie müssen Ihr Build-Ziel auch explizit explizit auf MacOS 10.12 festlegen, da Swift PM derzeit MacOS 10.10 als fest codierten Wert für das Bereitstellungsziel verwendet (mehr dazu hier).
Um Fluux XMPP in Ihr Swift PM-Projekt zu integrieren, können Sie es als Abhängigkeit Ihres Projekts in Ihrer Package.swift
Datei hinzufügen. Zum Beispiel:
// 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 " ] ) ,
]
)
Sie können Ihre ausführbare Befehlszeilendatei main.swift
ändern, um einen XMPP Client zu starten. Zum Beispiel:
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 )
Um das Projekt zu erstellen, können Sie einfach den Standard-Build-Befehl verwenden:
swift build
Anschließend können Sie Ihren Konsolen-Client ausführen:
.build/debug/ XMPP Demo
Die Tests können mit dem Befehl ausgeführt werden:
swift test
Sie können das offizielle Docker-Image verwenden, um am Swift-Projekt unter Linux zu arbeiten. Sie können Docker auch auf MacOs verwenden, um die Linux-Version zu erstellen.
Sie können das Swift Docker-Image mit dem folgenden Befehl abrufen:
docker pull swift
Anschließend können Sie eine Linux-Shell im Container öffnen:
docker run -itv $( pwd ) :/code --name swiftcode -w /code swift /bin/bash
Anschließend müssen Sie die Entwicklungspakete libxml2-dev
und libssl-dev
dev im Container installieren mit:
apt-get update
apt-get install libxml2-dev libssl-dev
Von der Docker-Shell aus können Sie den Code erstellen mit:
swift build
Um den Test unter Linux auszuführen, müssen Sie die Testerkennung explizit aktivieren (siehe Swift Test Discovery):
swift test --enable-test-discovery
Derzeit unterstützt die Bibliothek nur Standard-TLS-Verbindungen, nicht STARTTLS. Die Apple Networking-Bibliothek unterstützt (noch?) nicht das Umschalten der Verschlüsselung nach dem Verbindungsaufbau, da sie über mögliche Sicherheitsprobleme bei STARTTLS-Implementierungen besorgt sind.
Allerdings unterstützt XMPP TLS auf Port 5223. Es wird als „Legacy“-SSL bezeichnet, da die Verwendung von Port 5223 von der XMPP Standards Foundation vor einiger Zeit abgelehnt wurde. Allerdings unterstützen moderne XMPP Server wie ejabberd hochmodernes TLS auf Port 5223. Um TLS derzeit zu verwenden, ist es vollkommen in Ordnung, TLS auf Port 5223 zu verwenden.