Fluux XMPP เป็น Chat SDK ใน Swift สำหรับ iOS, MacOS และ Linux ใช้โปรโตคอล XMPP ซึ่งเป็นมาตรฐาน IETF
Fluux XMPP เป็นการใช้งานแบบ Clean Slate โดยมีเป้าหมายต่อไปนี้:
ด้วยเหตุนี้ เราจึงกำหนดเป้าหมายเป็น iOS เวอร์ชัน 12+ บน iOS สำหรับ 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 )
ในการสร้างโปรเจ็กต์ คุณสามารถใช้คำสั่ง build มาตรฐาน:
swift build
จากนั้นคุณสามารถรันคอนโซลไคลเอ็นต์ของคุณได้:
.build/debug/ XMPP Demo
การทดสอบสามารถรันได้ด้วยคำสั่ง:
swift test
คุณสามารถใช้อิมเมจอย่างเป็นทางการของ Docker เพื่อทำงานบนโปรเจ็กต์ Swift บน Linux คุณยังสามารถใช้ Docker บน MacO เพื่อสร้างเวอร์ชัน 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 Standards Foundation มาระยะหนึ่งแล้ว ตามที่กล่าวไว้ เซิร์ฟเวอร์ XMPP สมัยใหม่ เช่น ejabberd รองรับ TLS ที่ทันสมัยบนพอร์ต 5223 หากต้องการใช้ TLS ในขณะนี้ การใช้ TLS บนพอร์ต 5223 ถือเป็นเรื่องดีอย่างยิ่ง