我有一个已经存在于CocoaPods / Specs中的库的公共叉。在Podfile中,我可以通过这样做引用此分叉pod:
pod 'CoolLibrary',:git => 'git@github.com:myname/CoolLibrary-Forked.git',:commit => 'abcdef1234567890abcdef1234567890'
我试着把这在我的MyLibrary.podspec:
s.dependency 'CoolLibrary',: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)?
这是podspecs不允许的,因为允许这样会使得其他podspecs不可能定义他们依赖的包和/或其他包可能会破坏因为意外的API差异。
例如,考虑依赖于AFNetworking的两个pod,但是一个指定外部源位置(Pod A),而另一个仅指定最小版本要求(Pod B):
> Pod A:s.dependency’AFNetworking’,:git => ‘https:// arbitrary / location’
> Pod B:s.dependency’AFNetworking’,’> 2′
现在有几个潜在的问题:
>在这一点上,我们不知道什么版本是在“Pod A”repo,直到我们下载它,这是一个巨大的浪费时间,以防万一AFNetworking(例如’Pod B’)的各种共同依赖不能满足。
>但是更糟糕的是,如果’Pod A’确实匹配其他pod(例如’Pod B’)的依赖性版本要求,但AFNetworking代码实际上来自分叉源位置,并且它改变了一些必要的API’Pod B’依赖于取决于。这将默默打破CocoaPods尝试做的承诺。
我希望这使清楚为什么我们不能介绍一种方法podspecs默默地打破版本的承诺。但是,从您的Podfile,您可以覆盖任何pod的源位置,因为它是最终用户(应用程序开发人员)谁是控制,不应有任何意外的破坏。