2014-10-01 59 views
6

我在应用程序中使用CocoaPods,其中工作空间由主应用程序项目和一些静态库作为子项目组成,每个静态库都有自己的依赖关系。静态库在编译时链接到主项目中,主要作为封装和组织代码的手段存在。使用cocoapods管理静态库中的依赖关系

CocoaPods将依赖项链接到子项目的静态库中时出现问题。如果这两个或多个静态库具有相同的依赖关系,则它们都不能链接到主项目中,因为这样做会导致重复的符号。

我现在有的解决方法是在每个子项目中创建一个“虚拟”目标,并将其设置为pod文件中的链接目标。真正的目标使用由CocoaPods生成的xcconfig文件,没有任何依赖关联链接。

尽管这确实有效,并且id是我能找到的最简单的解决方案,但它仍然带有额外的不必要的负担,针对每个项目,如:

xcodeproj 'MyApp/MyApp.xcodeproj' 
target :'MyApp' do 
    xcodeproj 'MyApp/MyApp.xcodeproj' 

    pod 'MBProgressHUD',   '0.9' 

    link_with 'PodDummy' 
end 

另一个缺点这种方法是将所有的依赖仍然需要在主项目无论如何指定,使它们与最终的可执行文件链接。


所以我的问题是:如何使用的CocoaPods静态库中的项目,而不依赖链接到二进制?

或者更好的是:我可以只在静态库子项目中指定依赖项,并让CocoaPods找出需要在主项目中链接哪些内容,解决过程中的重复项?

我在考虑只在pod文件中包含主项目,并让子项目手动引用标题的“Pods”目录。

过去似乎已经围绕这个问题进行了一些讨论,但是我看不出它是什么,如果有的话。相关的讨论是:

  1. https://github.com/CocoaPods/CocoaPods/issues/1335
  2. https://github.com/CocoaPods/CocoaPods/issues/840
  3. iOS Static Library + CocoaPods and the duplicate symbols error
  4. Kiwi and CocoaPods with a static shared library

回答

0

的CocoaPods非常适用于使用豆荚人。当你开发豆荚时,或者更糟糕的是,当你开发一个应用程序以及(a)所有豆荚...(也可能取决于豆荚)时,使用它会困难得多。

你必须知道的是CocoaPods在这里解决依赖关系。你的问题在我看来,你已经在你的工作区中开启了你的pod,完全绕过了这个特性!当然,如果您在项目目录中执行“pod install”,则只会产生一堆依赖项,Pod将根据Podfile进行安装,而您自己的pod代码库位于同一文件夹树中。

我所做的是分开开发豆荚(可能与否取决于其他豆荚)。不在同一个应用程序的“工作区”中也是一种很好的做法。您可以使用演示应用程序开发您的Pod。

而在主应用程序的目录中,我在Podfile中指出了我自己的pod的“开发”分支。因此,该应用程序正在开发与豆荚的倾向,就好像这些豆荚正式发布。除了它们也只是在开发中。

它迫使你分开分开,当你需要改变你的应用程序的pod代码中的某些内容时,它并不那么好。

两种可能性(他们都不是很好)。首先,更换您的吊舱,然后在您的应用程序文件夹中进行“吊舱更新”。其次,将pod代码直接播放到应用程序工作区(pod代码已由pod update命令导入)。并且一旦满足,将修改返回到用于提交的原始pod代码。

很多来回,但我没有找到比这更好的。

+0

谢谢你的回答。我没有开发豆荚,只是试图使用一个项目使用多个子项目链接到一个单一的可执行文件。子项目有其自己的依赖关系 - 其中一些对每个项目都是唯一的,另一些则用于多个子项目。问题是使用cocoapods来管理这些依赖关系,同时也避免了当依赖链接到可执行文件时出现的重复符号。 – 2015-04-21 18:23:17