【问题标题】:How do I create a CocoaPods podspec that has a dependency that exists outside of Specs?如何创建一个 CocoaPods podspec,它具有存在于 Specs 之外的依赖项?
【发布时间】:2014-04-22 05:27:04
【问题描述】:

我有一个库的公共分支,该库已经存在于 CocoaPods/Specs 中。在 Podfile 中,我可以通过以下方式引用这个分叉的 pod:

pod 'CoolLibrary', :git => 'git@github.com:myname/CoolLibrary-Forked.git', :commit => 'abcdef1234567890abcdef1234567890'

我试着把它放在我的MyLibrary.podspec:

s.dependency 'CoolLibrary', :git => 'git@github.com:myname/CoolLibrary-Forked.git', :commit => 'abcdef1234567890abcdef1234567890'

但是得到以下错误信息:

-> MyLibrary.podspec
 - ERROR | The specification defined in `MyLibrary.podspec` could not be loaded.


[!] Invalid `MyLibrary.podspec` file: [!] Unsupported version requirements. Updating CocoaPods might fix the issue.

是否可以以这种方式在 .podspec 中指定依赖项(即,对于具有 podspec 但不在 CocoaPods/Specs 中的 pod)?

【问题讨论】:

    标签: cocoapods


    【解决方案1】:

    podspec 不允许这样做,因为允许这样做会使其他 podspec 几乎不可能定义它们所依赖的包和/或其他包可能由于意外的 API 差异而损坏。

    例如,考虑两个依赖 AFNetworking 的 Pod,但一个指定外部源位置(Pod A),而另一个仅指定最低版本要求(Pod B):

    • Pod A:s.dependency 'AFNetworking', :git => 'https://arbitrary/location'
    • Pod B:s.dependency 'AFNetworking', '> 2'

    现在有几个潜在的问题:

    1. 此时我们不知道“Pod A”存储库中的版本,直到我们下载它,如果对 AFNetworking 的各种常见依赖项(例如“Pod B”)不能满意。
    2. 但更糟糕的是,如果“Pod A”确实与其他 pod(例如“Pod B”)的依赖版本要求相匹配,但 AFNetworking 代码实际上来自分叉源位置,并且它更改了“Pod B”所依赖的一些基本 API。这将默默地破坏 CocoaPods 试图做出的承诺。

    我希望这能说明为什么我们不能引入一种方法让 podspecs 默默地破坏版本承诺。但是,从您的 Podfile 中, 允许您覆盖任何 pod 的源位置,因为控制权的是最终用户(应用程序开发人员),不应该有任何 意外 strong> 破损。

    【讨论】:

    • 很好的解释。我理解这个问题,但是这样做的正确方法是什么?假设我分叉了一个 repo,因为我需要一些更改。我不能以稍微不同的名称将它添加到 Cocoapods 并将我作为 podspec 中的作者。但是我需要它作为我在 Cocoapods 上的另一个项目中的 s.dependency。
    • @Hons 通过覆盖该 pod 在您的 Podfile 中 的位置,就像 OP 对 CoolLibrary 所做的那样,之前您指定任何实际上依赖于CoolLibrary的依赖项。
    • 我想说两句:我喜欢 npm 的方法。您可能有同一个库的多个版本,但每个库都会获得它想要的依赖项。收缩包装。 CocoaPods 更接近 Bower 的做法。
    • @alloy 您建议我们如何使用我们公司的私有规范存储库来处理这个问题?
    • 这是糟糕的设计。向 gradle 学习一些东西。
    【解决方案2】:

    依赖是very simple,只能定义 Pod 的名称和版本说明符。它们不能使用与 Podfile 中的依赖项相同的扩展名进行扩展。

    【讨论】:

      猜你喜欢
      • 2015-05-15
      • 2013-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多