我在一个app上使用CocoaPods,其中工作区由一个主应用程序项目组成,一些静态库作为子项目,每个都有自己的依赖项。静态库在编译时链接到主项目中,主要作为封装和组织代码的手段。
出现了一个问题,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"标题目录。
过去似乎已经围绕这个问题进行了一些讨论,但我看不出它是什么,如果有的话。相关讨论是:
答案 0 :(得分:0)
CocoaPods适用于使用pod的用户。在开发pod时使用它会更加困难,或者更糟糕的是,当你开发一个应用程序以及(a)librar(y),这些都是pods(也可能还取决于pod)。
你必须知道的是CocoaPods来解决依赖关系。在我看来,你的问题是你完全绕过了这个功能,让你的pod已经在你的工作区中了!当然,如果你在项目目录中进行“pod安装”,你将会在Pod将根据Podfile安装的内容和你自己的pod代码库之间的相同文件夹树中获得一堆依赖关系。
我所做的是分开开发豆荚(可能与否取决于其他豆荚)。最好不要在应用程序的同一“工作区”中。您可以使用演示应用程序开发pod。
在主应用程序的目录中,我在Podfile中指出了我自己的pod的“develop”分支。因此,该应用程序正在开发与pods的倾向,就好像这些pod正式发布。除了他们只是在开发中。
它迫使你当然要分开,当你需要更改你的应用程序的pod代码中的某些东西时,这不是很好。
两种可能性(它们都不是很好)。首先,更改您的pod,然后在您的app文件夹中进行“pod update”。
其次,将pod代码直接播放到应用程序工作区(pod代码已由pod update命令导入)。并且一旦满意,就将修改恢复到原始pod代码以进行提交。
很多来回,但我找不到比这更好的了。