2016-04-27 7 views
2

私はAlamofire v3.xに依存する、迅速なフレームワークを作成しています。今私はフレームワークをAlamofire v2.xに依存するプロジェクトに追加したいと思っています。私はCarthageを使って私のプロジェクトを管理しています。同じフレームワークの2つのバージョンをプロジェクトに追加することはできないようです。このような状況を解決する方法はありますか?iOS(またはOS X)プロジェクトはフレームワークの2つのバージョンに依存します

+0

2つのフレームワークバージョンが共通の場所にあるデータベースに書き込もうとしたが、各バージョンで異なるスキーマが必要だった場合はどうなりますか?同じフレームワークの2つのバージョン(書いていないもの)が相互運用可能であることを保証することはできませんので、このようなフレームワークバージョンを混ぜ合わせてはいけません。どちらか一方を使用してください。 – par

+0

@parご意見ありがとうございます。実際、私はAlamofire v3.xに依存するフレームワークを配布したいと思いますが、ユーザーがAlamofire v2.xをプロジェクトで使用している場合はどうなりますか? – ukim

+0

それは同じ問題です。今、Alamofire *はバージョン間で互換性があるかもしれませんが(私には分かりません)、ライブラリにサードパーティの依存関係がある場合は、依存関係であればそのバージョンを使用する必要があることをユーザーに伝える必要があります。同じフレームワークの2つのバージョン間で共有されるリソースに関して考えると、必然的に(予期せぬ、厄介な方法で)ブレークすることになります。 – par

答えて

1

あなたが遭遇したことは、依存性地獄と呼ばれます。 .NET,Nodeなどのランタイムはこの問題を解決しました。少なくとも8までのJavaは、実行時に最初に見つかったバージョンを選択し、他のすべてのパッケージがそれと共に動作することを願っています。彼らはしません。

CocoaPodsはあなたのために依存性hellを検出し、pod installの間にエラーを検出できますが、それだけです。カーセージは同じことをすると思いますか?そして、あなたのフレームワークのユーザは、あなたのフレームワークと他の依存しているフレームワークがすべて同じバージョンの共有依存関係を使用するまで、ここでは依存関係のダウングレードを行います。現時点では、AFAIKが利用できる唯一のオプションです。

アップルはFramework versioningで依存関係の地獄を解決しました。フレームワークは複数のバージョンのバンドルをバンドルし、フレームワークとリンクするとき、リンカーは完全なパス(バージョンはパスにあります)を必要なバージョンに記録します。しかし、それ自体の複数のバージョンを束ねるフレームワークは、信じられないほど馬鹿げたアイデアであり、決して脱皮しませんでした。

関連する問題