甘いものが好きです

iOS App開発時に感じた疑問や課題、その他の雑感などを書いていきます。

Static Libraryでカテゴリを使用する場合の注意点

カテゴリの定義を含むStatic Libraryを使用すると、そのカテゴリで定義しているメソッドを呼び出すところで例外が発生してプログラムがクラッシュしてしまうことがあった。原因を調べてみたところ、まさに次の記事で説明している通り、リンカフラグに "-ObjC" と "all_load"を設定していないことが原因だった。

Cocoaの日々: [Mac][iOS] Static Library (7) カテゴリを使う場合の注意点 "-ObjC" と "-all_load"

少し古い情報ではリンカフラグに "-ObjC" を設定するだけでよいとされている場合もあるが、Mac OS X の64bit環境とiOSではこの対応だと不十分とのこと。

Mac OS X の64bit環境および iOS ではリンカにバグがあり、"-ObjC" フラグを指定してもカテゴリを含む Static Library のロードが働かない。これを回避する為に "-all_load" または "-force_load" フラグを使う。

Cocoaの日々: [Mac][iOS] Static Library (7) カテゴリを使う場合の注意点 "-ObjC" と "-all_load"