2010-08-10

ブロックを使うとiPhone OS 3での動作は不可能ということを再度確認

個人的にはiOS 4以前のコードは書かないことに決めていますが、そうはいってもお仕事です。未だにiPhone OS 3向けのビルドも作ってます。でも一度ブロックの使いやすさを味わってしまうと、もうなんか使いたくって仕方のない状態。なんならiOS 4専用の部分だけでも条件分岐を入れてブロック使わせてもらっていいかな?という検証。

結論:ブロックを使ったコードがバイナリに含まれているとdyldのリンクエラーで起動すらしません。


Tue Aug 10 12:48:26 unknown UIKitApplication:xxx[0xd506][2007] : dyld: Symbol not found: __NSConcreteStackBlock
Tue Aug 10 12:48:26 unknown UIKitApplication:xxx[0xd506][2007] :   Referenced from: /var/mobile/Applications/5DBA5BE0-0517-4ABB-AF15-C4006334BF74/Xxx.app/xxx
Tue Aug 10 12:48:26 unknown UIKitApplication:xxx[0xd506][2007] :   Expected in: /usr/lib/libSystem.B.dylib

まぁ、自分のアプリケーションだったらコードもコントロールできるけど、使っているライブラリなんかがブロック使い出したら、iPhone OS 3向けのビルドはもう作れないと言うことですな。