回答:
今日、iOS 4.0の展開ターゲットを指定して何かをビルドしました。アーキテクチャで指定されているのはarmv7だけでしたが、Xcodeは、iOS4.2より下のものをサポートするにはarmv6をアーキテクチャに含める必要があると警告しました。そのフィールドを編集し、ダイアログがポップアップしたら「+」ボタンをクリックして、リテラル「armv6」を入力します。
私の場合、アプリをiOS4とiOS5で動作させる必要があります。iOS5で正しく機能するようにいくつかの変更を加える必要がありましたが、これらの変更はすべてiOS4に適したコードの変更で行われました。
また、iOS4でクラッシュせずにアプリを実行できるように、iOS5固有の機能をいくつか追加しました。具体的には、iOS5機能を使用する前にテストし、iOS5専用ライブラリをオプションとしてリンクしました。
つまり、iOS5の世界でiPhone3Gをサポートすることは、「iOS5を実行している古いデバイスでアプリを実行することを確認したい」ではなく、「iOS4以降で実行するアプリを(iOS5の機能の使用に関係なく)簡単に」という意味です。 」ここには違いがあります。それについて考えてください。:-)
とにかく、armv6サポートの追加は非常に簡単です。そしてポイントはこれだと思います:ある時点で、(何らかの理由で)心配する必要のあるarmv6デバイスがなくなると、ビルドする必要がなくなります。Appleの見解では、誰もができるだけ早く最新のハードウェアにアップグレードするべきです。したがって、その世界では、デフォルトで最新かつ最高のもの以外にツールを設定する必要はありません。:-)幸運なことに(またはそうではない)、私たちの開発者は現実の世界に住んでいて、しばらくの間古いものをサポートする必要があることを認識しています。Xcode開発チームもこれを知っていると思います。そのため、armv6サポートを簡単に追加できます。
また、プロジェクトとターゲットでこれを設定していることを確認してください。それを理解するには1時間かかります。片方には設定しましたが、もう片方には設定しませんでした。お役に立てれば。GLTA
Appleがarmv6を標準設定から外したのには理由があると思います。
iOS5 SDKでarmv7 / armv6をコンパイルしましたが、armv6コンパイラはリリースモードで誤ったコードを生成しました。何時間もの回避策(llvmまたはgccをさまざまな最適化レベルで試す)を見つけた後、あきらめました。
したがって、古いarmv6デバイスをサポートしている限り、iOS SDK 4.xに戻ります。
コードの例:
// myView center=(160, 100)
CGPoint p=myView.center;
// now p=(100,100) (what the heck?)
p.x=myView.center.x;
p.y=myView.center.y;
// now p=(160,100)
p.y+=100;
// now p =(200,200) (what the heck?)
たぶん、メモリが破損している可能性がありますが、armv7コンパイラとiOSSDK 5.0未満では期待どおりに動作します。
宜しくお願いします
これが実際に解決策であるかどうかはまだわかりませんが、「architectures」で定義されている文字列($(ARCHS_STANDARD_32_BIT))を「armv6 armv7」で置き換えると、iOS5をベースとして、iOS4をデプロイメントとしてコンパイルできることがわかりましたターゲット、および検証を渡します。
IOS5専用のライブラリや呼び出しを使用していませんが、次のリリースで使用する予定です。