在iOS中创建和部署静态库时避免标头冲突

时间:2014-01-11 21:28:12

标签: ios objective-c frameworks static-libraries

我在iOS中创建了一个静态库,我的项目有一些常用功能。我使用了iOS Universal Framework的说明,一切都很好。

我在静态库中有一个需要AFNetworking的模块。所以我安装了cocoapods,并将其包含在我的静态库中

但是,当我将静态库包含到另一个也需要AFNetworking的项目中时,我运行该项目时,所有常见类都会出现重复的符号错误。

避免这种冲突的最佳方法是什么?

2 个答案:

答案 0 :(得分:1)

最好的方法是不在框架中包含任何第三方库/框架。

以下是关于“如何构建自己的框架”的Apple reference。有很多指南可以帮助建立一个好的框架,如果你将它链接到任何项目,不会导致任何错误。

AFNetworking是一个特定于应用程序的框架,因此您不应将其包含在框架中。您可以weak将您的框架链接到AFNetworking,但是您应该避免强烈关联它。

以下是有关weak linking的资源。

例如,如果您使用的是第三方库,则应指定您的框架要求用户添加依赖项以便使用它。 这是an example AFNetworking如何做到的。 另外,请检查this framework及其规范中有关依赖关系的要求。

答案 1 :(得分:0)

这样做的最佳方法(在我看来)是强调类名以保持它们的独特性。

因此,假设您的库名为XYLibrary。它将包含一堆AFNetworking文件,例如AFNetworking.hAFNetworking.m。将其重命名为XY_AFNetworking.hXY_AFNetworking.m。这应该有希望使它们在另一个项目中与该库的其他实例保持唯一。

您也应该为任何其他第三方库执行此操作。