2014年8月15日金曜日

iOS静的ライブラリ内でカテゴリを指定してもunrecognized selectorが出る問題

環境:
iOS SDK 7.1

問題:
iOSで静的ライブラリを作成した際に、ライブラリ内にカテゴリを含む場合、ライブラリ使用時にカテゴリで作成されたメソッドを呼び出すとunrecognized selector sent to classが出る。

原因:
UNIX static librariesとObjective-Cの動的ふるまいの相性の悪さにより、カテゴリが機能しないため(下部Appleドキュメント参照)。

解決:
静的ライブラリを使用するアプリのビルド設定で、
Linking -> Other Linker Flags に以下を追加。

$(OTHER_LDFLAGS)
-ObjC
-all_load

以上で再度ビルドする。上述でビルドする場合は、プロジェクト内にある使用していないクラスやファイルも全てリンクされるため、エラーを含むコードなどは排除しておく必要あり。


参考:
Technical Q&A QA1490 Building Objective-C static libraries with categories
http://i.devris.info/unrecognized-selector-error-with-static-library-and-category

0 件のコメント: