我正在制作一个静态的iOS框架。我想在我的框架中使用第三方代码,让我们以AFNetworking为例。AFNetworking很流行。我现在可以感觉到名称空间冲突了。这里的最佳实践是什么?据我所知,我有3个选择:
1)将AFNetworking构建到我的框架中,导出头部。这允许客户端使用我的库中的AFNetworking版本,但他们不能使用也链接AFNetworking的其他框架。他们依赖我来更新AFNetworking,如果他们在它的基础上构建的话。
2)针对AFNetworking头进行编码,但使第三方在其项目中包含AFNetworking。这为框架使用者增加了额外的步骤,他们必须添加AFNetworking源代码。将来可能会有版本不兼容的问题,但至少如果另一个框架使用AFNetworking,他们可以同时使用它。
3)重新命名空间AFNetworking,保持头部私有。通过这种方式,我以任何方式避免了名称空间冲突,除非更新我的AFNetworking副本变得非常困难。最终的二进制文件会变得更大,但所有的互操作性问题都得到了解决。这对我来说是更多的工作。
我还有其他选择吗?最佳实践是什么?
发布于 2013-02-28 01:11:29
更好的选择是使用http://cocoapods.org。通过这种方式,可以声明库的依赖关系,并获得整个项目的单个下载。
不要重命名头文件。既费时又费力。
附言:一个这样的例子:
http://chariotsolutions.com/blog/post/using-cocoapods-to-manage-private-libraries/
发布于 2014-03-24 07:35:54
就数字3而言,它不是一个完整的“重命名空间”,但它与之类似:
http://atastypixel.com/blog/avoiding-duplicate-symbol-issues-when-using-common-utilities-within-a-static-library/
https://stackoverflow.com/questions/15117187
复制相似问题