CocoaUPnP
CocoaUPnP 是 upnpx 的逻辑发展 - 设计简单、现代、基于块的形式。使用 Objective-C 编写,目前可在 iOS 上使用。Mac OS X 兼容性目前尚不清楚,但我们没有看到不工作的重大理由。
为什么不使用Swift?
我们没有选择Swift来为这个库的第一个版本,有几个原因。首先,我们使用这个库的app完全是Objective-C编写的。我们需要快速完成它,因此Objective-C是我们首选的方式。此外,app的目标系统是iOS 7,所以无法使用由CocoaPods生成的动态库。此外,早期Swift版本产生了一些维护上的初始摩擦。
这个库很可能在某个时候会被移植到Swift,但无法给出具体的时间表。如果您需要一个适用于Swift项目的UPnP库,我可以推荐UPnAtom。
项目时间线
最初,本项目建设将专注于音频/视频设备控制协议。一旦这些协议得到适当的实施和测试,那么其他协议可以在稍后阶段添加。
依赖项
我们已尽量将库中的依赖项数量限制在只有经过良好测试且已被认可使用的库。因此,在CocoaUPnP内部只有5个依赖项。
- CocoaAsyncSocket - 用于连接到SSDP协议。
- CocoaSSDP - 该库已进行大量修改并在CocoaUPnP中使用时经过严格测试。
- Ono - 用于更快速、更简单的XML解析。
- AFNetworking - 利用响应和请求序列化。
- GCDWebServer - 提供UPnP事件服务器的大多数基于套接字的功能。
此外,测试目标还使用了4个测试库
测试
CocoaUPnP 推行尽可能的测试驱动方法来确保库按照预期工作。提交拉取请求时,请运行单元测试套件以确保您的补丁不会破坏现有功能。请确保您为新增的功能添加了测试。您可以参考现有测试以了解如何进行测试。
编写测试
创建新的类时,同时创建一个测试类。测试使用 Specta 编写,配套 Expecta 匹配器。
Specta 和 Expecta 的导入语句声明在 ExampleTests-Prefix.pch 文件中,因此无需在各个规格说明中导入它们。
贡献
欢迎提交拉取请求。如果你想深入参与项目,有多种方式可以帮助。
提交拉取请求
新功能应该始终在您的分支副本上的独立主题分支中添加。测试通过xcpretty进行,因此请确保首先安装它。
派生,然后克隆仓库
git clone [email protected]:your-username/CocoaUPnP.git
更改您的目录到您的CocoaUPnP
文件夹
cd CocoaUPnP
安装Pods
pod install
运行测试以确保没有问题,并且您的测试环境已设置
make tests
创建并检查一个功能分支
git checkout -b awesomeNewFeature
进行更改,然后重新运行测试
make tests
提交并推送到您的派生分支,然后提交一个拉取请求。