iOS静态库+ CocoaPods和重复符号错误

时间:2014-03-20 17:08:28

标签: ios iphone objective-c xcode cocoapods

我正在开发一个静态库/ iOS框架(Jeff Verkoeyen方式),我为管理依赖项添加了CocoaPods(这与其他有关重复符号的问题有很大不同)。

当使用CocoaPods的客户端使用我的静态库/框架和我正在使用的第三方库时,我一直在努力解决“重复符号”问题。

我一直在阅读有关不将第三方库纳入自定义静态库的答案,但我想这样做,所以这不是一个选项。

我发现this article(谢谢你Ryan Arana)谈到这个问题和“最好的”解决方案,我不得不将它改编为我的CocoaPods驱动的静态库:

1。在工作区根目录中创建一个空的 NamespacedDependencies.h ,并将其添加到主项目中。

2. 将其添加到主项目的前缀标头中(在包含任何广告连播之前):

    #import "NamespacedDependencies.h"

3. 将此挂钩添加到Podfile:

    post_install do | installer |

      environment_header = installer.config.project_pods_root + 'Pods-environment.h'
      text = "#import \"NamespacedDependencies.h\"\n\n" + environment_header.read
      environment_header.open('w') { |file| file.write(text) }

      dummy_class = installer.config.project_pods_root + 'Pods-dummy.m'
      text = "#import \"NamespacedDependencies.h\"\n\n" + dummy_class.read
      dummy_class.open('w') { |file| file.write(text) }

    end

4. Ryan Arana's script复制到根目录并编辑变量。

5. 使用以下内容向Pods Target添加“运行脚本构建阶段”:

    ./generate_namespace_header.sh

6。构建工作区。 此时我有我的NamespacedDependencies.h宏

7. 评论或删除之前创建的“运行脚本构建阶段”。

8。再次构建。

问题: 它有效,但有问题:

1。需要手动操作。当我向Podfile添加/删除pod时(并运行pod install)我要清理工作区(在我的情况下是iphoneos和iphonesimulator),将NamespacedDependencies.h留空,添加“Run Script Build Phase”(删除者cocoapods)并重新开始。

2. 我不知道post_install挂钩是否正常,我只是从某处复制代码并更改它但我确信这必须是更好的方法。我找不到有关它的文档。

编辑:

  • 我正在使用CocoaPods 0.29.0,Xcode 5和iOS 7
  • Ryan Arana的剧本是对Nimbus剧本的略微修改。 “原始”无毛的回答对我很有帮助。 (见Ryan Arana的文章)
  • 当我运行“pod install”时,将删除“运行脚本构建阶段”和NamespacedDependencies.h包含。这就是我每次添加/删除pod时都要创建该阶段的原因,以及为什么我添加了一个钩子来添加包含。
  • 我将导入添加到Pods-environment.h,因为它是在每个pod的前缀头中导入的。但是这种配置可能会在未来的版本中发生变化,因此我想找到另一种方法来实现这一目标。我不知道如何将它添加到每个pch中。 “常规”Pod目标没有pch所以我要直接将它添加到Pods-dummy.m。
  • 如果我已经创建了NamespacedDependencies.h宏和libPods.a时没有注释或删除“运行脚本构建阶段”,则会为带前缀的符号重新创建宏,并且一切都会出错。

0 个答案:

没有答案