Fluux XMPP — это Chat SDK на Swift для 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
Вы можете собрать библиотеку с помощью Swift Package Manager благодаря предоставленному файлу Package.swift
.
Вам также необходимо правильно указать в качестве цели сборки 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 для работы над проектом Swift в Linux. Вы также можете использовать Docker на MacOs для сборки версии Linux.
Вы можете получить образ Swift Docker с помощью следующей команды:
docker pull swift
Затем вы можете создать открытую оболочку Linux внутри контейнера:
docker run -itv $( pwd ) :/code --name swiftcode -w /code swift /bin/bash
Затем вам нужно будет установить пакеты libxml2-dev
и libssl-dev
в контейнер с помощью:
apt-get update
apt-get install libxml2-dev libssl-dev
Из оболочки Docker вы можете собрать код с помощью:
swift build
Чтобы запустить тест в Linux, вам необходимо явно включить обнаружение тестов (см. Swift Test Discovery):
swift test --enable-test-discovery
На данный момент библиотека поддерживает только стандартное соединение TLS, а не STARTTLS. Сетевая библиотека Apple не поддерживает (пока?) коммутационное шифрование после установления соединения, поскольку их беспокоят возможные проблемы безопасности, связанные с реализациями STARTTLS.
Тем не менее, XMPP поддерживает TLS на порту 5223. Он называется «устаревшим» SSL, поскольку использование порта 5223 некоторое время назад было признано устаревшим Фондом стандартов XMPP . Тем не менее, современные серверы XMPP , такие как ejabberd, поддерживают современный TLS на порту 5223. Чтобы использовать TLS в данный момент, вполне можно использовать TLS на порту 5223.