【问题标题】:Managing dependencies in static libraries with cocoapods使用 cocoapods 管理静态库中的依赖项
【发布时间】:2014-11-26 09:43:18
【问题描述】:

我在一个应用程序上使用 CocoaPods,其中工作区由一个主应用程序项目和一些作为子项目的静态库组成,每个子项目都有自己的依赖项。静态库在编译时链接到主项目,主要作为封装和组织代码的一种方式存在。

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

我目前的解决方法是在每个子项目中创建一个“虚拟”目标,并将其设置为 pod 文件中的链接目标。真正的 target 使用的是 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
  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

【问题讨论】:

    标签: xcode cocoapods dependency-management static-linking


    【解决方案1】:

    CocoaPods 非常适合使用 pod 的人。当你开发 pod 时使用它要困难得多,或者更糟糕的是,当你开发一个应用程序以及(a)librar(y)ies 时,它们都是 pod ......(这也可能取决于 pod)。

    你必须知道的是 CocoaPods 是用来解决依赖关系的。在我看来,您的问题似乎是您完全绕过了该功能,因为您的工作区中已经有 dev 中的 pod!当然,如果你在项目目录中执行“pod install”,你会得到一堆依赖关系,在 Pod 将根据 Podfile 安装的内容和你自己的 pod 代码库就在同一个文件夹树中。

    我所做的是分别开发 pod(可能依赖或不依赖其他 pod)。不在应用程序的同一个“工作区”中也是一种好习惯。您可以使用演示应用开发您的 pod。

    在主应用程序的目录中,我在 Podfile 中指明了我自己的 Pod 的“开发”分支。因此,该应用程序正在开发中依赖 pod,就好像这些 pod 是正式发布的一样。除了它们也只是在开发中。

    它当然会迫使您分开拥有东西,当您需要更改应用程序的 pod 代码中的某些内容时,这不是很好。

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

    其次,将 pod 代码直接放入应用工作区(pod 代码已通过 pod update 命令导入)。一旦满意,将修改移植到原始 pod 代码以进行提交。

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

    【讨论】:

    • 谢谢或回答。我不是在开发 pod,只是尝试将 pod 与一个项目一起使用,该项目使用多个子项目,这些子项目链接到一个可执行文件中。子项目有它们自己的依赖项——一些是每个项目独有的,而另一些则在多个子项目中使用。问题在于使用 cocoapods 来管理这些依赖项,同时还避免了将依赖项链接到可执行文件时出现的重复符号。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 2010-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多