使用cocoapods构建静态库

jav*_*dfm 17 xcode static-libraries ios cocoapods

我正在尝试构建一个静态库,它具有在Podfile中指定的不同依赖项(例如AFNetworking).我不希望依赖项包含在最终的静态库中(调用libMyProject.a),我只想链接它们,然后创建一个MyProject.Podspec文件,我可以在其中放置相同的依赖项.

问题是,当我构建libMyProject.a时,libPods.a被链接和包含,因此如果我分发libMyProject.a并且其他人将它集成在使用某些相同依赖项的项目中,则会出现重复的符号问题.

如何链接libPods.a lib但不包含在libMyProject.a中?它应该像链接其他现有框架一样工作.

谢谢!

jav*_*dfm 12

我通过从Build Phases中的"Link Binary With Libraries"部分删除libPods.a lib来解决它.

  • 是否有一些智能的方法来自动删除?我尝试了多种方法但没有成功. (4认同)

Cra*_*ell 6

虽然从"Link Binary with Libraries"构建阶段手动删除libPods.a确实有效,但真正的答案是不要让它首先添加到那里.

添加它的原因是pod install命令正在查找静态库目标作为其链接目标之一.这可能是因为它是列表中的第一个目标(如果你没有明确指定目标,cocoapods的实现会导致它选择第一个目标),或者可能是因为你已经在'link_with'部分中明确说明了它.

我找到的答案是使用Podfile的link_with部分显式声明目标,并省略静态库目标.

pods项目仍然是创建的,您的依赖项会按照您的预期进入,但libPods.a不会添加到静态库的构建阶段.

唯一的问题是如何放入link_with部分,如果不是你的静态库.如果您有其他想要链接的目标(例如iPhone应用程序目标),那么这是一个不错的选择.但如果您唯一真正的目标是静态库,则需要一些解决方法.

到目前为止,我的成功策略是创建一个静态库目标(是的,与静态库中的一个单独的目标)并称之为"Dummy".在Podfile的link_with部分中指定此目标.

这有点令人反感,但它确实有效.

platform :ios, '5.1.1'

link_with ['Dummy']

pod 'AFNetworking', '= 1.3.1'
Run Code Online (Sandbox Code Playgroud)