2012-03-01 4 views
3

Objective-Cの性質上、簡単に名前の衝突につながる可能性があるため、コードに接頭辞を付けることをお勧めします。 2つの外部ライブラリFooLibraryBarLibrary結果の名前の衝突を使用しているあなたのMyAwesomeApp iOSアプリケーションならば、内部でもFooLibraryBarLibraryを使用するために起こるのでObjective-C - 同じライブラリの異なるバージョンで名前の衝突が発生する

どのようにして、この問題を解決するのですか?両方がBarLibraryあるが、彼らは実際に2つの異なるバージョンなので、FooLibraryがあなたのに対しBarLibrary(v1)実装に依存するので、最初のもので

BarLibraryへの参照のいずれかを削除することをお勧めかもしれませんが、あなたはそれを行うことはできませんMyAwesomeAppBarLibrary(v2)の実装に依存します。

この時点で、同じライブラリの2つの異なるバージョンが実際には2つの異なるものであることを認識しており、最初は同じプロジェクトに共存するべきではありません。

他人のコードをリファクタリングする(名前を変更する)以外に、このパズルを解決する他の方法はありますか?

+1

あなたは 'BarLibrary'の' v1'の使用に切り替えることはできますか? – dasblinkenlight

+3

私は唯一の良い解決策は、FooLibraryの作成者がBarLibraryのv2に更新されるようにすることだと思います。これはAppleがiOS上の共有ライブラリをサポートしていないために生き残らなければならない制限の1つにすぎません。 – mpontillo

+0

@dasblinkenlight nope。 – Ali

答えて

4

他のライブラリが共有する可能性が高いライブラリを使用している場合、 JSONライブラリを使用していて、それらをインクルードするためのライブラリをコンパイルしている場合、実際には自分自身のプレフィックスをライブラリに配置する必要があります。

私はそれがアーバン飛行船でこのように行われているのを見ました。彼らはJSONKit(または何らかのJSONライブラリ)を使用していますが、すべてのJSONKitの接頭辞にはUAを付けるので、別のバージョンのJSONKitを使用するとコンパイルされて一緒に実行されます。

私もそれが到達可能で行わ見てきました

...誰もがこのの独自のバージョンを持っているようだ...

関連する問題