web-dev-qa-db-ja.com

仕様外に存在する依存関係を持つCocoaPods podspecを作成するにはどうすればよいですか?

CocoaPods/Specsに既に存在するライブラリのパブリックフォークがあります。 Podfileでは、これを行うことにより、この分岐ポッドを参照できます。

pod 'CoolLibrary', :git => '[email protected]:myname/CoolLibrary-Forked.git', :commit => 'abcdef1234567890abcdef1234567890'

私はMyLibrary.podspecにこれを入れてみました:

s.dependency 'CoolLibrary', :git => '[email protected]: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にはないポッド)?

45
Nick Forge

これを許可すると、他のポッドスペックが依存するパッケージを定義できなくなり、予期しないAPIの違いにより他のパッケージが破損する可能性があるため、ポッドスペックから許可されません。

たとえば、AFNetworkingに依存する2つのポッドを考えますが、1つは外部ソースの場所(ポッドA)を指定し、もう1つは最小バージョン要件(ポッドB)のみを指定します。

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

現在、いくつかの潜在的な問題があります。

  1. この時点では、ダウンロードするまで「Pod A」レポジトリにどのバージョンがあるのか​​わかりません。AFNetworkingのさまざまな一般的な依存関係(「Pod B」など)を満たせない場合、膨大な時間の無駄です。
  2. さらに悪いのは、「ポッドA」doesが他のポッドの依存バージョン要件(たとえば、「ポッドB」)に一致する場合ですが、AFNetworkingコードは実際には分岐したソースの場所からのものであり、いくつかの重要な「ポッドB」が依存するAPI。これは、CocoaPodsが作成しようとしている約束を静かに破ります。

これにより、podspecがバージョンの約束を静かに破る方法を導入できない理由が明らかになることを願っています。ただし、Podfileからareを制御できるのはエンドユーザー(アプリ開発者)であり、予期しない破損。

68
alloy

依存関係は 非常に単純 であり、Podの名前とバージョン指定子を定義する機能のみがあります。 Podfileの依存関係と同じ拡張子で拡張することはできません。

2
orta