2012-01-11 20 views
1

Xcodeプロジェクトには、両方とも同じ名前のクラスを定義する2つのフレームワークがあります(B.frameworkとC.frameworkの両方にMyClassという名前のクラスがあります)。その結果、同じシンボルを持つ2つのフレームワーク

Duplicate symbol _OBJC_METACLASS_$_MyClass originally in B.framework/B(MyClass.o) now lazily loaded from C.framework/C(MyClass.o) 
Duplicate symbol _OBJC_CLASS_$_MyClass originally in B.framework/B(MyClass.o) now lazily loaded from C.framework/C(MyClass.o) 

その後、実行時に実装の一つだけがロードされ、彼らは同じを持っているにもかかわらず(全く異なるクラスであるため、「インスタンスに送信され、認識されないセレクター」になり、他のいずれかを使用しようとしています名)。

私が直接私のコードでのMyClassの実装の1つ使用していますが、他のフレームワークは内部でのみそのMyClassのを使用して、私もエクスポート(そのさえ枠組み内のファイルヘッダ言及していない、私はnmを使用し、その理由はわかりませんシンボルを表示するには)。

どのようにして両方のフレームワークを動作させることができますか?

答えて

3

Obj-Cには「エクスポートされた」クラスはありません。そうではなく、「輸出されていない」クラスはありません。この問題は、すべてのObj-Cコードに対して、クラスに2文字または3文字の接頭辞を使用することを強く推奨する理由です。これらのフレームワークを使用しない以外に唯一のソリューションは、フレームワークの1つ(または両方)を編集してクラス名を変更することです。ソースにアクセスできない場合は、ベンダーに連絡してください。その変更を行う。

+0

それは私が恐れていたものです。私はどちらのフレームワークのソースにもアクセスできない、またはあなたが述べた方法でそれを修正したでしょう。ベンダーが私のためにそれを修正することを期待する前に、友人は妥当な解決策のようなものを提案しています(それは一種のハッキリを感じます):自分のフレームワークを作成し、適切なプレフィックスを必要とするこれがうまくいくかどうか、あるいはフレームワークのシンボルはカプセル化フレームワークを通してまだ「エクスポート」されていますか? Gunna test asap –

+0

@poiuy_qwert:それは絶対に*働かない*。 –

+0

Obj-Cは動的ランタイム言語です。リンクされたオブジェクトファイル/フレームワークによってランタイムに追加されたものは、アプリケーション全体に公開されます。 –