Fluux XMPP é um Chat SDK em Swift para iOS, MacOS e Linux. Implementa o protocolo XMPP , que é um padrão IETF.
Fluux XMPP é uma implementação limpa, com os seguintes objetivos em mente:
Como resultado, no iOS, nosso alvo é a versão 12+ do iOS. No MacOS, nos concentramos no Mojave e superior (10.14+). No Linux, usamos BSD Socket com SwiftNIO, então ele deve funcionar de forma bastante ampla, desde que você tenha o Swift 5.0+ instalado.
Nota : Esta biblioteca está em desenvolvimento muito ativo e ainda não está pronta para produção.
Projetamos o sistema de construção com os seguintes princípios:
Como tal, construímos a plataforma de forma diferente com base no sistema de destino/construção:
Esta decisão nos permite manter todo o sistema de construção muito simples, ao mesmo tempo em que temos um bom alcance de plataforma.
Você precisa de uma implementação libxml2 e TLS (ou seja, libressl). Você pode instalá-los com HomeBrew:
brew install libxml2
brew install libressl
Você pode construir a biblioteca usando o Swift Package Manager, graças ao arquivo Package.swift
fornecido.
Você também precisa definir explicitamente seu destino de compilação para MacOS 10.12, já que, no momento, o Swift PM usa MacOS 10.10 como um valor codificado para o destino de implantação (mais sobre isso aqui).
Para integrar o Fluux XMPP em seu projeto Swift PM, você pode adicioná-lo como uma dependência do seu projeto em seu arquivo Package.swift
. Por exemplo:
// 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 " ] ) ,
]
)
Você pode modificar seu executável de linha de comando main.swift
para iniciar um cliente XMPP . Por exemplo:
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 o projeto, você pode simplesmente usar o comando build padrão:
swift build
Você pode então executar seu cliente de console:
.build/debug/ XMPP Demo
Os testes podem ser executados com o comando:
swift test
Você pode usar a imagem oficial do Docker para trabalhar no projeto Swift no Linux. Você também pode usar o Docker em MacOs para construir a versão Linux.
Você pode recuperar a imagem do Swift Docker com o seguinte comando:
docker pull swift
Você pode então abrir um shell Linux dentro do contêiner:
docker run -itv $( pwd ) :/code --name swiftcode -w /code swift /bin/bash
Você precisará então instalar os pacotes libxml2-dev
e libssl-dev
dev no contêiner com:
apt-get update
apt-get install libxml2-dev libssl-dev
No shell do Docker, você pode construir o código com:
swift build
Para executar o teste no Linux, você precisa habilitar explicitamente a descoberta de teste (consulte Swift Test Discovery):
swift test --enable-test-discovery
No momento, a biblioteca suporta apenas conexão TLS padrão, não STARTTLS. A biblioteca Apple Networking não suporta (ainda?) comutação de criptografia após a conexão ter sido estabelecida, porque eles estão preocupados com possíveis problemas de segurança em torno das implementações de STARTTLS.
Dito isto, XMPP suporta TLS na porta 5223. É chamado de SSL "legado" porque o uso da porta 5223 foi descontinuado pela XMPP Standards Foundation há algum tempo. Dito isto, servidores XMPP modernos, como o ejabberd, suportam TLS de última geração na porta 5223. Para usar o TLS no momento, é perfeitamente adequado usar o TLS na porta 5223.