Fluux XMPP عبارة عن Chat SDK في Swift لأنظمة iOS وMacOS وLinux. وهو يطبق بروتوكول XMPP ، وهو أحد معايير IETF.
يعد Fluux XMPP تطبيقًا نظيفًا، مع وضع الأهداف التالية في الاعتبار:
ونتيجة لذلك، نستهدف على نظام التشغيل iOS الإصدار 12+. في نظام التشغيل MacOS، نركز على Mojave والإصدارات الأحدث (10.14+). في نظام التشغيل Linux، نستخدم مقبس BSD مع SwiftNIO، لذلك يجب أن يعمل على نطاق واسع جدًا، طالما تم تثبيت Swift 5.0+.
ملحوظة : هذه المكتبة قيد التطوير النشط للغاية وليست جاهزة للإنتاج بعد.
نقوم بتصميم نظام البناء وفقًا للمبادئ التالية:
على هذا النحو، نقوم ببناء المنصة بشكل مختلف بناءً على نظام الهدف/البناء:
يسمح لنا هذا القرار بالحفاظ على نظام البناء بأكمله بسيطًا للغاية، مع الوصول إلى منصة جيدة.
أنت بحاجة إلى libxml2 وتنفيذ TLS (أي libressl). يمكنك تثبيتها باستخدام HomeBrew:
brew install libxml2
brew install libressl
يمكنك إنشاء lib باستخدام 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
dev في الحاوية التي تحتوي على:
apt-get update
apt-get install libxml2-dev libssl-dev
من Docker Shell، يمكنك إنشاء التعليمات البرمجية باستخدام:
swift build
لتشغيل الاختبار على Linux، تحتاج إلى تمكين اكتشاف الاختبار بشكل صريح (راجع Swift Test Discovery):
swift test --enable-test-discovery
في الوقت الحالي تدعم المكتبة فقط اتصال TLS القياسي، وليس STARTTLS. لا تدعم مكتبة Apple Networking (حتى الآن؟) تبديل التشفير بعد إنشاء الاتصال، لأنها قلقة بشأن مشكلات الأمان المحتملة حول تطبيقات STARTTLS.
ومع ذلك، يدعم XMPP TLS على المنفذ 5223. ويطلق عليه SSL "القديم" لأن استخدام المنفذ 5223 تم إهماله من قبل مؤسسة معايير XMPP منذ فترة. ومع ذلك، فإن خوادم XMPP الحديثة مثل ejabberd تدعم أحدث تقنيات TLS على المنفذ 5223. لاستخدام TLS في الوقت الحالي، من الجيد تمامًا استخدام TLS على المنفذ 5223.