Fluux XMPP est un SDK Chat dans Swift pour iOS, MacOS et Linux. Il implémente le protocole XMPP , qui est une norme IETF.
Fluux XMPP est une implémentation de table rase, avec les objectifs suivants à l'esprit :
De ce fait, sur iOS, nous ciblons iOS version 12+. Sur MacOS, nous nous concentrons sur Mojave et versions ultérieures (10.14+). Sous Linux, nous utilisons BSD Socket avec SwiftNIO, cela devrait donc fonctionner assez largement, tant que Swift 5.0+ est installé.
Remarque : Cette bibliothèque est en développement très actif et n'est pas encore prête pour la production.
Nous concevons le système de construction avec les principes suivants :
En tant que tel, nous construisons la plateforme différemment en fonction du système cible/build :
Cette décision nous permet de garder l'ensemble du système de build très simple, tout en ayant une bonne portée de plateforme.
Vous avez besoin d'une libxml2 et d'une implémentation TLS (c'est-à-dire libressl). Vous pouvez les installer avec HomeBrew :
brew install libxml2
brew install libressl
Vous pouvez créer la bibliothèque à l'aide de Swift Package Manager, grâce au fichier Package.swift
fourni.
Vous devez également définir correctement votre cible de build sur MacOS 10.12 de manière explicite, car, pour le moment, Swift PM utilise MacOS 10.10 comme valeur codée en dur pour la cible de déploiement (plus d'informations à ce sujet ici).
Pour intégrer Fluux XMPP dans votre projet Swift PM, vous pouvez l'ajouter en tant que dépendance de votre projet dans votre fichier Package.swift
. Par exemple:
// 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 " ] ) ,
]
)
Vous pouvez modifier votre exécutable de ligne de commande main.swift
pour démarrer un client XMPP . Par exemple:
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 )
Pour construire le projet, vous pouvez simplement utiliser la commande build standard :
swift build
Vous pouvez ensuite exécuter votre client console :
.build/debug/ XMPP Demo
Les tests peuvent être exécutés avec la commande :
swift test
Vous pouvez utiliser l'image officielle de Docker pour travailler sur le projet Swift sous Linux. Vous pouvez également utiliser Docker sur MacOs pour créer la version Linux.
Vous pouvez récupérer l'image Swift Docker avec la commande suivante :
docker pull swift
Vous pouvez ensuite créer un shell Linux ouvert à l'intérieur du conteneur :
docker run -itv $( pwd ) :/code --name swiftcode -w /code swift /bin/bash
Vous devrez ensuite installer les packages de libxml2-dev
et libssl-dev
dans le conteneur avec :
apt-get update
apt-get install libxml2-dev libssl-dev
Depuis le shell Docker, vous pouvez créer le code avec :
swift build
Pour exécuter le test sous Linux, vous devez activer explicitement la découverte de tests (voir Swift Test Discovery) :
swift test --enable-test-discovery
Pour le moment, la bibliothèque ne prend en charge que la connexion TLS standard, pas STARTTLS. La bibliothèque Apple Networking ne prend pas (encore ?) en charge le chiffrement de commutation une fois la connexion établie, car elle s'inquiète d'éventuels problèmes de sécurité autour des implémentations de STARTTLS.
Cela dit, XMPP prend en charge TLS sur le port 5223. Il est appelé SSL « hérité » car l'utilisation du port 5223 a été déconseillée par la XMPP Standards Foundation il y a quelque temps. Cela dit, les serveurs XMPP modernes comme ejabberd prennent en charge TLS de pointe sur le port 5223. Pour utiliser TLS pour le moment, il est parfaitement possible d'utiliser TLS sur le port 5223.