14

Xcode 4.3.2を使用してiPadアプリケーションを作成するために、サードパーティのソフトウェアを使用しています。ソフトウェアはオープンソースであり、通常、開発者がアプリケーション用に作成したコードと一緒にコードがコンパイルされるように設定されています。私はこのソフトウェアをさまざまな場所で使用していたため、iOSシミュレーターの静的ライブラリとして構築することにしました。

元のソースコードをコンパイルする代わりに、ライブラリをビルドし、1つのアプリケーションをそのライブラリにリンクするように変換することができました。ただし、シミュレーターでアプリケーションを実行しようとすると、認識されないセレクターがインスタンスに送信されたというエラーが表示されます。

プログラムが静的ライブラリの一部を正常に使用していることを確認しました。ただし、オブジェクトのメソッドを呼び出そうとするコードと、障害が発生したコードが1つあります。呼び出されるメソッドは、実際にはそのオブジェクトのインターフェイスで定義されていません。むしろ、そのオブジェクトのクラスのカテゴリを定義する追加のモジュールで提供されます。そのモジュールのヘッダーファイルは適切にインクルードされており、コンパイラはカテゴリメソッドを見つけてオブジェクトに適用できるはずですが、実行時に上記のエラーが発生します。

'nm'コマンドを使用して、categoryメソッドが静的ライブラリに存在することを確認しました。出力の例を次に示します。

nm libStaticLibrary.a | grep categoryMethod
00000130 t -[SomeClass(Category) categoryMethod:]
0000354c s -[SomeClass(Category) categoryMethod:].eh

このライブラリを目的のアプリケーションで正しく動作させる方法について、人々はどのような考えを持っていますか?

4

2 に答える 2

26

サードパーティのフレームワークは、既存の (apple) クラスのカテゴリを使用している可能性があります。-ObjCただし、カテゴリをロード/検索するには、ビルド設定の下にフラグを追加する必要がありますOther Linker Flags

ビルド設定

于 2012-05-04T05:51:53.070 に答える