使用CocoaPods管理静态库的依赖关系

6
我正在使用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”目录的标头。
似乎在过去曾就该问题进行了一些讨论,但我看不出是否有任何结果。相关讨论为:
  1. https://github.com/CocoaPods/CocoaPods/issues/1335:问题讨论,关于CocoaPods在安装时遇到的错误。
  2. https://github.com/CocoaPods/CocoaPods/issues/840:问题讨论,关于在Xcode 6中使用CocoaPods出现的错误。
  3. iOS Static Library + CocoaPods and the duplicate symbols error:介绍如何解决iOS静态库与CocoaPods在编译过程中出现的重复符号错误。
  4. Kiwi and CocoaPods with a static shared library:介绍如何在使用静态共享库的情况下,使用Kiwi和CocoaPods进行测试。
1个回答

0

CocoaPods对于使用pod的人来说非常好用。但是当你开发pod时,或者更糟糕的是,当你同时开发一个依赖于所有pod的应用程序和库时(这些库也可能依赖于其他pod),使用它就会变得更加困难。

你必须知道的是,CocoaPods是用来解决依赖关系的。你的问题似乎是你已经在工作区中拥有了你的开发中的pods,完全绕过了这个功能!当然,如果你在项目目录中执行“pod install”,你将得到一堆依赖项,包括Podfile根据安装的Pod以及你自己的pod代码库都在同一个文件夹树中。

我所做的是分别开发pod(可能或不可能依赖于其他pod)。最好的做法是不要与应用程序处于同一个“工作区”。你可以使用演示应用程序开发你的pod。

在主应用程序的目录中,我在Podfile中指定了我的自己的pod的“develop”分支。因此,该应用程序正在使用依赖于pod的开发版本,就像这些pod已经正式发布一样。除了它们也只是在开发中而已。

这会强制你将事物分开,当你需要在应用程序的 pod 代码中更改某些内容时,这并不是很好。

有两种可能性(两者都不是很好)。首先,更改您的 pod,然后在应用程序文件夹内进行“pod update”。

其次,在应用程序工作区中直接使用 pod 代码(通过 pod update 命令导入了 pod 代码)。一旦满意,就将修改内容回传到原始 pod 代码以进行提交。

来回操作很多,但我还没有找到比这更好的方法。


1
感谢您的回答。我并不是在开发Pods,而只是尝试将Pods与一个使用多个子项目链接到单个可执行文件的项目一起使用。这些子项目有自己的依赖关系-有些是每个项目独有的,有些则用于多个子项目。问题在于如何使用CocoaPods管理这些依赖关系,同时避免在将依赖项链接到可执行文件时出现重复符号的情况。 - Luke Van In

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接