XMPPFramework
为Mac和iOS开发社区提供的XMPP框架。
摘要
XMPPFramework提供了RFC-3920(XMPP标准)的核心实现,以及读取和写入XML所需的工具。它包含了多个流行的扩展(XEP),所有这些都建立在模块化架构之上,允许您插入完成工作所需的任何代码。此外,框架是大规模并行和线程安全的。使用GCD构建,无论是在旧iPhone上还是在12核Mac Pro上运行,此框架都表现良好。(而且它绝不会阻塞主线程...)
安装
最低部署目标为iOS 8.0 / macOS 10.9 / tvOS 9.0。
从 3.7 迁移到 4.0
为了提高 XMPPFramework 在 Swift 中使用时的体验性和安全性,对公开 API 进行了一系列的修改。大多数 Objective-C 项目不需要做任何修改,只有一些小的例外。由于新的可空性注解,纯 Swift 项目需要做很多(简单的)修改。当前的迁移过程尚未完成,所以请提交问题并提供帮助,以尽量减少未来的破坏性更改。
-
XMPPFrameworkSwift.framework 和 XMPPFramework/Swift subspec 中的 Swift 支持
-
现代 Objective-C 语法:可空性注解和泛型。
-
大部分核心、认证、分类和工具库已经审核过。需要更多的帮助来审核扩展。
-
XMPPJID 中的
bareJID
现在作为bareJID
而非bare
导入 Swift,以避免与bare
String 冲突。也适用于domainJID
。 -
XMPPPresence 中的
intShow
已更名为showValue
,并且现在是一个XMPPPresenceShow
枚举,而不是int
。在 4.0 中将引发警告,但将在 4.1 中删除。 -
当使用 Swift 扩展时,XMPPMessage 中的
chatState
字符串值现在作为原生 Swift String 枚举导入到 Swift 中。提供新的chatStateValue
属性来访问 Swift 和 Obj-C 中的原始 String 值。 -
在适用的情况下使用只读属性而非获取方法。已删除属性获取方法命名覆盖,以反映 Apple 的方法。
-
以下模块仍需审核。如果您使用这些模块,请帮助审核它们并提交一个 pull 请求,否则它们的 API 可能在未来版本中包含破坏性更改。
- XEP-0191 阻止
- XEP-0199 Ping
- XEP-0202 时间
- XEP-0136 归档
- XEP-0115 功能(未审核 CoreDataStorage)
- XEP-0045 MUC(未审核存储)
- XEP-0054 vCardTemp(未审核 CoreDataStorage)
- XEP-0016 隐私
- XEP-0012 最后活动
- XEP-0009 RPC
- 联系人列表(未审核存储)
- XMPPGoogleSharedStatus
- 文件传输
- CoreDataStorage
- 带宽监控
Swift 支持
XMPPFramework 现在接受 Swift 编写的贡献,有一些限制。Swift 代码必须隔离在 Swift/
文件夹中,并且现有的或未来的 Obj-C 代码不得依赖于它。所有用 Swift 编写的公开 API 必须与 Objective-C 兼容,并标记为 @objc
。
有关更多详细信息,请参阅下面的贡献部分。
CocoaPods
使用 CocoaPods 安装 XMPPFramework 是最简单的方法。
仅安装框架的 Objective-C 部分时
pod 'XMPPFramework'
要使用新的 Swift 功能
use_frameworks!
pod 'XMPPFramework/Swift'
执行 pod install
命令后,打开 .xcworkspace
文件并导入。
@import XMPPFramework; // Objective-C
import XMPPFramework // Swift
Carthage
要使用 Carthage 将 XMPPFramework 集成到您的 Xcode 项目中,请在您的 Cartfile
中指定它。
github "robbiehanson/XMPPFramework"
运行 carthage
命令以构建框架,并将构建好的 XMPPFramework.framework
拖动到您的 Xcode 项目中。如果您想包括用 Swift 编写的新的功能,请也将 XMPPFrameworkSwift.framework
拖动到您的项目中。您需要在您的头文件中手动导入 import XMPPFrameworkSwift
。
贡献
请贡献您的代码!如果您计划实现更大的功能,请首先提交一个 issue 以获取社区的反馈。请使用现代 Objective-C 语法,包括可空性和泛型。以下是一些建议以使此过程更顺畅:
- 确保将所有新的文件添加到
XMPPFramework.xcodeproj
中的 iOS、macOS 和 tvOS 目标,并确保所有适用的头文件都设置为公共。 - 请尝试编写可测试的代码。使用
XMPPMockStream
可以使测试变得相当容易。查看Testing-Shared
中的示例以获取灵感。 - 您将需要 cocoaPods 和 Carthage 都可用以进行测试。在仓库根目录中运行
carthage checkout
,然后在Testing-iOS
和Testing-macOS
文件夹中运行bundle install && bundle exec pod install
。 - 在
Testing-Shared
文件夹中创建您的测试文件,并将其添加到Testing-Carthage/XMPPFrameworkTests.xcodeproj
、Testing-macOS/XMPPFrameworkTests.xcworkspace
和Testing-iOS/XMPPFrameworkTests.xcworkspace
中的 iOS、macOS 和 tvOS 目标。 - 如果您计划编写 Swift 代码,请将其保存在
Swift/
文件夹中,并确保没有任何纯 Obj-C 代码依赖于它。所有公共 API 必须是 Obj-C 兼容的,并标记为@objc
。请记住将您的文件添加到XMPPFrameworkSwift.framework
目标。确保您的所有单元测试都能在 CocoaPods 和 Carthage 集成中通过。请查看Testing-Carthage/XMPPFrameworkSwiftTests.xcodeproj
、Testing-Swift/SwiftOnlyTest.swift
和Testing-macOS
和Testing-iOS
中XMPPFrameworkSwiftTests
目标内的示例。
想帮助但不知从何开始?
- 框架的大部分内容尚未标注为可空性和泛型。
- 增加更多的测试覆盖率总是受欢迎。
- 改进旧的示例项目
安全问题
如果在您中发现安全问题,请不要在GitHub上公开问题,而是直接通过电子邮件联系维护者之一。
Wiki
更多详情请参阅wiki页面。
捐赠
喜欢这个项目?想为我买一杯