如何创建一个CocoaPods podspec,其依赖项存在于Specs之外?

时间:2014-03-17 04:35:39

标签: cocoapods

我有一个已经存在于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)?

2 个答案:

答案 0 :(得分:66)

podspecs不允许这样做,因为允许其他podspecs几乎不可能定义他们所依赖的包和/或其他包可能因意外的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试图做出的承诺。
  3. 我希望这能说清楚为什么我们不能为podspecs提供一种方法来默默地破坏版本的承诺。但是,从您的Podfile中, 允许覆盖任何pod的源位置,因为它是最终用户(应用程序开发人员),可以控制并且不应该有任何意外破损。

答案 1 :(得分:3)

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