しかし、現在開発中のアプリを iOS 3 デバイスでテストしてみると、以下のようなメッセージがコンソールに出て停止してしまいます。
dyld: Symbol not found: __NSConcreteStackBlock Referenced from: 〜省略〜 Expected in: /usr/lib/libSystem.B.dylibNSConcreteStackBlock ってなんですか?
なんだろうと思って調べたら、Blocks が原因だと分かりました。
Blocks 引用
ブロックオブジェクトは、C言語レベルの構文によるランタイム機能です。標準Cの関数に似ていま すが、実行可能なコードのほかに、自動(スタック)メモリまたはマネージド(ヒープ)メモリに バインドされている変数を含むことができます。したがって、ブロックでは、実行時の動作に影響 を与える状態(データ)セットを維持できます。Blocks は iOS 4 から導入されました。
今回、初めて自アプリで GameKit を使用する際に Blocks を使っていました。
GameKit フレームワークは iOS 3デバイスには無いので、その際、無視出来るように、リンク設定で Optional (Xcode 3時代のWeakと同じ意味らしい) に設定していましたが、 どうやらこの libSystem.B.dylib も Optional に設定しないといけないらしいです。
設定方法は、下記画像を参考にして下さい。
libSystem.B.dylib を Optional にすると、iOS 3デバイスでも実行することができました。
とは言え、もうそろそろ iOS 3 が乗っている古いデバイスでは、処理速度的に対応が難しくなってきました。次回のアプリからは iOS 4 以上を対象にしたいと思っています。
0 件のコメント:
コメントを投稿