前缀静态库iOS

我正在构build一个iOS静态库(按照https://github.com/jverkoey/iOS-Framework )。 我依靠SBJson和AFNetworking。 我想包括这些库,以避免版本问题和安装简单; 要做到这一点,我需要前缀这些库,以避免命名冲突。

我怎样才能以简单的方式前缀其他静态库?

理想情况下,这将是我的构build过程的一部分。 不太理想,但可以接受的是,如何以一种理智的方式进行重构和重命名。

唯一安全的解决scheme(除了不这样做)是在所有符号上使用前缀来构build任何依赖关系。

前缀最简单的方法是经典的“查找和replace”。 这很容易出错,所以用nm -a打出.a,并清除任何非前缀符号的结果是一个好主意。

第二种更安全的方法是使用两遍编译过程。

  • 第一遍构build依赖项目,运行nm将所有符号转储到头文件中。
  • 第二遍再次构build依赖项目,但这次是在预编译头文件中导入生成的前缀头文件。 这个前缀头文件必须在你引用框架中的依赖项的符号的地方使用,以便正确引用重命名的符号。

为了便于参考,我们使用Nimbus来生成Nimbus前缀头文件: https : //github.com/jverkoey/nimbus/blob/master/scripts/generate_namespace_header

这使您可以分发一个embedded了Nimbus前缀版本的.framework。

现在,您可以将生成的.a链接到您的框架中,并且在第三方开发人员不可避免地将其自己版本的依赖关系链接到其项目中时,可以安全地避免任何链接器冲突。