著作一覧 |
iOSのプログラムがDoes not recognize selectorで死ぬので、@selectorの書き間違えだろうと思っていたら、そうではなく、スタティックライブラリ内に定義されたカテゴリ(ミキシンというよりもC#の拡張メソッドに近いのかな)の展開に失敗しているという問題だったらしい。
で、調べるとすぐに-ObjCというリンカフラグを設定すれば良いということがわかって、まずさすがのアップルクォリティにびっくりする。最初にプロジェクトをウィザードのできそこないで生成した時に、Objective-Cのアプリケーションだということは指定しているのだから、既定で設定しておきゃいいじゃないか。と、20世紀の輝けるATL_MIN_CRTを思い出す。良く訓練されたCOMプログラマはリンクに失敗するとATL_MIN_CRTを反射的に削除するのと同様に、良く訓練されたiOSプログラマはselector認識不可が出れば、反射的に-ObjCを設定するのだろう。違いは、ビルドの時点か、実行時かで、21世紀になった分、判明するまで時間がかかるのが素晴らしい。
で、とにかく設定してプロジェクトメニューからcleanしてbuild。
で、実機にロードして……いや変わらないぞ。
調べるとiOSの場合は-all_loadを付けろというのが出て来た。なんか古い資料っぽいので、そんなバグを修正していないのかとさすがのアップルクォリティに讃嘆しながら設定して、cleanしてbuild。
で、実機にロードして……いや変わらないぞ。
しかも、Xcode4以降はall_loadは不要と書いたものまで見つかる。なるほど、付けても変化しないのだから確かに不要だわい、と納得さすがのアップルクォリティ。
と言ってもどうにもならないので、arされているはずだから分解してスタブコードを書いて無理矢理呼び出せるように人間リンカをしようかと、考えながら、しかしあまりに面倒くさいので、stackoverflowの関連しそうなやつを順に眺めていく。というか、stackoverflowがたまに落ちていると実に困る。
と、見つけた。
1行リプライにビンゴがあった。
Xcodeを終了して、起動して、cleanしてbuildしろ、と書いてある。
すごい。
21世紀にもなって、プロジェクトのリンカ設定を変えたら、IDEもどきの再起動が必要なんだ。さすがアップル。Visual Studioの4だか5だかの頃に追いついたらしい。
で、解決。その後、all_loadを消して試したら、確かに問題ない。
でも、アップルのXcodeだということは、再起動が必要なんだな、あぶないあぶない。
でも、問題なかった。
さすがアップル。実に生産性が高い。
OSXはWindows Meと違って、再起動しなくても、スリープだけで運用できるし、いち早く標準的に64ビットをサポートしたから、メモリをてんこ盛りできる。
だったら、Xcodeを起動したら、プロジェクトをたくさん開いてずーっと使い続けるのが当然だと思っていた。
さすがだ、アップル。驚きの品質に感服しまくった一日だった。
ジェズイットを見習え |