現在、Androidの& iOSプラットフォームで利用可能なSDKを開発中です。Android&iOS:SDKを構築する際の依存関係の処理方法
Androidの場合、Gradleファイルの依存関係を一覧表示し、Mavenを使用してSDKを提供します(したがって、依存関係は.pomファイルに表示されます)。
iOSでは、依存関係を処理するためにココアポッドを使用しています。
問題は以下の通りです: *当社のSDKがバージョンX に依存関係を使用*当社のクライアントのひとつ別のクライアントは、バージョンZ
にまったく同じ依存関係を使用する場合があります*同じ依存関係を使用しますが、バージョンY でありますだから、、これは潜在的に私たちのクライアントの1(そうでない場合は、両方)に破壊される私たちのSDKにつながる私たちは今のところ、それは依存関係のXで動作することを確認、しかし、YとZのではない
ので、レガシーコードを持っていますこの問題の原因となるライブラリのソースコードを単純にインポートし、同じ名前のライブラリを使用しないように名前を付けます。
私の意見では、これは妥当な解決策ではありません。最新の修正はありません。更新するのは苦痛で、クライアントはライブラリの2倍です。
今のところ、私は潜在的な良い解決策を考えようとしていますが、私がGoogleで望んでいるものを見つけることができませんでした(おそらく私は適切なキーワードを使用していません:/)。
私が考えていたのは、依存関係ごとにさまざまなバージョンのサポートを提供することでした。 「このメソッドがここにある場合はそれを実行し、それ以外の場合は以前のバージョンのメソッドを使用する」(iOSのセレクタrespondToなど)のようなビット。次に、クライアントは、サポートされている範囲内の条件で、任意のバージョンの依存関係を使用できる必要があります。
しかし、正しい方法であるかどうかわかりません。 他にも解決策はありますか?
Android用
私はあなたが達成しようとしていることは可能だとは思わない。あなたが 'code'をバージョンに依存しないように変更したとしても、あなたのライブラリはそれが依存している他のライブラリについて正確に言及する必要があります。バージョンを指定しないと、最新のバージョンが想定されます(少なくともココ配備では)。依存関係の下で同じライブラリの複数のバージョンを記述することはできません。同時に使用されるようにバージョンが明示的に作成されていない限り。 – lukya
しかし、あなたができることは、** base sdk **の複数のバージョンを作ることです。違いは 'dependency'バージョンだけです。あなたが言ったように**あなたは別のバージョンを作成する予定の依存関係のすべてのバージョンをサポートする**ベースコード**を変更することができます。次に、sdkのさまざまなバージョン間の唯一の違いは、依存関係の特定のバージョンを指し示すpom/podファイルになります。クライアントがあなたのsdkの正しいバージョンを選ぶために、依存バージョンのすべての組み合わせのマトリックスを維持する必要があります。 – lukya
上記のアプローチでは、クライアントは計画どおりに単一のバージョンのsdkを使用することはできませんが、クライアントコード内の他の依存バージョンをサポートするバージョンを**選択するだけで**できます。 sdkはmaven/cocoapodsを介して追加されるため、sdkのバージョンを変更することは、クライアントの依存関係設定ファイル(pom/pod)の数値変更に過ぎません。その理想的ではないが、私はそれが近いと思う。 – lukya