前缀静态库iOS

时间:2012-07-16 20:47:54

标签: ios ios-frameworks

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

如何以简单的方式为其他静态库添加前缀?

理想情况下,它将成为我构建过程的一部分。不太理想,但可接受的是关于如何以理智的方式重构和重命名的提示。

1 个答案:

答案 0 :(得分:21)

唯一安全的解决方案(除了不执行此操作之外)是在所有符号上构建任何带有前缀的依赖项。

最简单的前缀方法是经典的“查找和替换”。这很容易出错,因此最好使用nm -a命中.a并搜索任何非前缀符号的结果。

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

  • 第一遍构建依赖项目并运行nm将所有符号转储到头文件中。
  • 第二遍再次构建依赖项目,但这次使用在预编译头中导入的生成的前缀头文件。必须在从框架中的依赖项引用符号的任何位置使用此前缀标头,以便正确引用重命名的符号。
  

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

     

这允许您分发带有Nimbus嵌入式前缀版本的.framework。

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