2012-05-04 20 views
12

Xcode 4.3.2を使用してiPadアプリケーションを作成する際に役立つサードパーティのソフトウェアを使用しています。ソフトウェアはオープンソースで、通常は設定されているので、開発者がアプリケーション用に書いたコードと一緒にコードがコンパイルされます。私は数多くの場所でソフトウェアを使用していたので、iOSシミュレータ用の静的ライブラリとして構築することにしました。静的なiOSライブラリのセレクタ呼び出し方法が認識されない

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

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

私は 'nm'コマンドを使用して、カテゴリメソッドが静的ライブラリに存在することを確認しました。ここでは出力の例です:

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

の人々は、このライブラリが必要なアプリケーションで正常に動作させることができるかについて持っているかどうアイデア?

+3

ここで説明したように-ObjCリンカフラグを追加します。http:// stackoverflowの.com/questions/2567498/objective-c-categories-in-static-library –

+0

-load_allも動作します。 – CodaFi

+0

可能な複製[静的ライブラリ内のリンクする目的-cカテゴリ](http://stackoverflow.com/questions/6820778/linking-objective-c-categories-in-a-static-library) –

答えて

24

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

buildsettings

+1

リンカーのフラグとしてInlcude -Objcがトリックでした。ありがとう。 –

+2

これは、ライブラリ自体を使用するのではなく、ライブラリを使用するターゲットのリンカ設定で設定する必要があります。 – Krejko

+1

-ObjCで、-Objcでないことを覚えておいてください –

3

Pfitzの答えは素晴らしいですが、これはあなたのプロジェクトに使用されていないバイナリの束をロードするために、コンパイラが発生しますそれはあなたが望むものではありません。

1)左側のパネルから、あなたのプロジェクトターゲット(フォルダナビゲーター)
2を選択)「フェーズを構築する」を選択します。ここhttps://stackoverflow.com/a/22264650/1363997

が最善の解決策である理由を知っているこの回答を参照してくださいタップ
3)「ソースをコンパイル」を展開セル
4)は、下部にあるプラスボタンを押すと、あなたのカテゴリの.mファイルを追加

完了!

注:検索フィールドにファイルの名前を入力しないでください、あなたの自己によってフォルダをナビゲートして、ファイルを検索する必要が

+1

これは、効果的に.mファイルをプロジェクトにコピーするだけではなく、最初は静的ライブラリのコードをカプセル化するという点を打破していますか? – devios1

+0

私はすでに-ObjCフラグを持っていましたが、-load_allは問題を解決しませんでした。これはしました。ありがとう。 –

関連する問題