[iPhoneアプリ開発]自作Frameworkをつくる シリーズ(Xcode 4.6対応)
第1回 プロジェクトを作る
第2回 Property Listを作る
第3回 Command Line Tools
第4回 Targetを作る
第5回 Workspaceを作る
第6回 Frameworkを完成させる
《今回》第7回 リンカフラグ
前回で“最終回”の予定でしたが、落ちてしまった話題があったので、追加します。
“カテゴリーを使って、既存クラスに機能を追加”していて、“そのファイルをFrameworkで切り出しちゃった場合”、リンカフラグを追加しないと、エラーになります。
今回はこの話です。
1.やるべき作業
アプリケーションのProjectツリーで「Project」をクリックします。
「Target」の「Build Settings」の中に、結構な数の設定項目がありますが、その中にある「Linking > Other Linker Flags」を探します。
左下の「+」をクリックして、編集可能状態にします。
「-ObjC」と「-all_load」をそれぞれ入力します。
2.注意事項
手を加えるのは、“アプリケーションの側”です。
Frameworkを読み込んで実行する時に、“アプリケーションの側”で「お前は誰だ?」となってしまうことへの対策です。
3.やらないとどんなエラーになるの?
迷惑なことに、“ビルド時にはエラーが出ない”のです。
それどころか、ちゃんと入力補完されちゃったりします。
しかし、“実行時”に「unrecognized selector sent to class ***」というエラーが出て、「???」となります。
ソースコードを開いて、確認しても、やっぱりちゃんとそのメソッドは入力補完されます。
4.このリンカフラグは何?
ここ(Appleのページへのリンク)に書いてありました。
強制的に、あらかじめ“全てのオブジェクトファイルをロード”させないと、「何を基にして拡張したのか分からない」という事態になるようです。まぁそうでしょうね。
ここ(再掲)の下部に「Important」という欄があるのですが、どうやら、「-ObjC」と「-all_load」を無条件でセットで設定した方が良さそうですね。
ロゴスウェア
最新記事 by ロゴスウェア (全て見る)
- Amazon Linux(EC2)と PHPSTORM で Xdebug を行う - 2018年9月26日
- やらないことの合意 - 2018年6月27日
- 卒園アルバムとプロジェクトマネジメント - 2018年3月30日
Comments are closed.