Fluux XMPP es un SDK de Chat en Swift para iOS, MacOS y Linux. Implementa el protocolo XMPP , que es un estándar IETF.
Fluux XMPP es una implementación desde cero, con los siguientes objetivos en mente:
Como resultado, en iOS, apuntamos a la versión 12+ de iOS. En MacOS, nos centramos en Mojave y versiones posteriores (10.14+). En Linux, usamos BSD Socket con SwiftNIO, por lo que debería funcionar de manera bastante amplia, siempre que tenga instalado Swift 5.0+.
Nota : esta biblioteca se encuentra en desarrollo muy activo y aún no está lista para producción.
Diseñamos el sistema de construcción con los siguientes principios:
Como tal, construimos la plataforma de manera diferente según el sistema de destino/compilación:
Esta decisión nos permite mantener todo el sistema de construcción muy simple y al mismo tiempo tener un buen alcance de plataforma.
Necesita una implementación libxml2 y TLS (es decir, libressl). Puedes instalarlos con HomeBrew:
brew install libxml2
brew install libressl
Puede crear la biblioteca utilizando Swift Package Manager, gracias al archivo Package.swift
proporcionado.
También debe configurar correctamente su objetivo de compilación en MacOS 10.12 de forma explícita, ya que, por el momento, Swift PM usa MacOS 10.10 como un valor codificado para el objetivo de implementación (más sobre esto aquí).
Para integrar Fluux XMPP en su proyecto Swift PM, puede agregarlo como una dependencia de su proyecto en su archivo Package.swift
. Por ejemplo:
// 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 " ] ) ,
]
)
Puede modificar el ejecutable de línea de comandos main.swift
para iniciar un cliente XMPP . Por ejemplo:
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 )
Para construir el proyecto, puedes usar el comando de compilación estándar:
swift build
Luego puede ejecutar su cliente de consola:
.build/debug/ XMPP Demo
Las pruebas se pueden ejecutar con el comando:
swift test
Puede utilizar la imagen oficial de Docker para trabajar en el proyecto Swift en Linux. También puede utilizar Docker en MacOs para crear la versión de Linux.
Puede recuperar la imagen de Swift Docker con el siguiente comando:
docker pull swift
Luego puede abrir un shell de Linux dentro del contenedor:
docker run -itv $( pwd ) :/code --name swiftcode -w /code swift /bin/bash
Luego necesitarás instalar los paquetes de desarrollo libxml2-dev
y libssl-dev
en el contenedor con:
apt-get update
apt-get install libxml2-dev libssl-dev
Desde el shell de Docker, puedes compilar el código con:
swift build
Para ejecutar la prueba en Linux, debe habilitar explícitamente el descubrimiento de pruebas (consulte Descubrimiento de pruebas Swift):
swift test --enable-test-discovery
Por el momento, la biblioteca solo admite conexión TLS estándar, no STARTTLS. La biblioteca Apple Networking no admite (¿todavía?) el cambio de cifrado una vez establecida la conexión, porque les preocupan posibles problemas de seguridad relacionados con las implementaciones de STARTTLS.
Dicho esto, XMPP admite TLS en el puerto 5223. Se llama SSL "heredado" porque la XMPP Standards Foundation ha desaprobado el uso del puerto 5223 hace un tiempo. Dicho esto, los servidores XMPP modernos como ejabberd admiten TLS de última generación en el puerto 5223. Para usar TLS en este momento, está perfectamente bien usar TLS en el puerto 5223.