我正在使用CocoaPods开发一个应用程序,该工作区由一个主应用程序项目和一些静态库子项目组成,每个子项目都有自己的依赖项。这些静态库在编译时链接到主项目中,并主要存在于封装和组织代码的目的。
问题在于CocoaPods会将依赖项链接到子项目的静态库中。如果两个或多个这样的静态库具有相同的依赖项,则不能将它们都链接到主项目中,因为这样会导致重复的符号。
我目前的解决方法是,在每个子项目中创建一个“虚拟”目标,并将其设置为pod文件中的链接目标。真实目标使用CocoaPods生成的xcconfig文件,而没有链接任何依赖项。
虽然这确实有效,并且是我能找到的最简单的解决方案,但仍然需要在每个项目中添加一个虚拟目标,这是一个额外的不必要负担。
所以我的问题是:如何在静态库项目中使用CocoaPods,而不将依赖项链接到二进制文件中?
或者更好的方法是:我是否可以仅在静态库子项目中指定依赖项,并让CocoaPods找出需要在主项目中链接的内容,在此过程中解决重复?
我考虑只在pod文件中包含主项目,并让子项目手动引用“Pods”目录的标头。
似乎在过去曾就该问题进行了一些讨论,但我看不出是否有任何结果。相关讨论为:
问题在于CocoaPods会将依赖项链接到子项目的静态库中。如果两个或多个这样的静态库具有相同的依赖项,则不能将它们都链接到主项目中,因为这样会导致重复的符号。
我目前的解决方法是,在每个子项目中创建一个“虚拟”目标,并将其设置为pod文件中的链接目标。真实目标使用CocoaPods生成的xcconfig文件,而没有链接任何依赖项。
虽然这确实有效,并且是我能找到的最简单的解决方案,但仍然需要在每个项目中添加一个虚拟目标,这是一个额外的不必要负担。
xcodeproj 'MyApp/MyApp.xcodeproj'
target :'MyApp' do
xcodeproj 'MyApp/MyApp.xcodeproj'
pod 'MBProgressHUD', '0.9'
link_with 'PodDummy'
end
这种方法的另一个缺点是,所有依赖项仍然需要在主项目中指定,以便与最终的可执行文件链接。
所以我的问题是:如何在静态库项目中使用CocoaPods,而不将依赖项链接到二进制文件中?
或者更好的方法是:我是否可以仅在静态库子项目中指定依赖项,并让CocoaPods找出需要在主项目中链接的内容,在此过程中解决重复?
我考虑只在pod文件中包含主项目,并让子项目手动引用“Pods”目录的标头。
似乎在过去曾就该问题进行了一些讨论,但我看不出是否有任何结果。相关讨论为:
- https://github.com/CocoaPods/CocoaPods/issues/1335:问题讨论,关于CocoaPods在安装时遇到的错误。
- https://github.com/CocoaPods/CocoaPods/issues/840:问题讨论,关于在Xcode 6中使用CocoaPods出现的错误。
- iOS Static Library + CocoaPods and the duplicate symbols error:介绍如何解决iOS静态库与CocoaPods在编译过程中出现的重复符号错误。
- Kiwi and CocoaPods with a static shared library:介绍如何在使用静态共享库的情况下,使用Kiwi和CocoaPods进行测试。