web-dev-qa-db-ja.com

iOS 5でarmv6およびarmv7アーキテクチャ向けにビルドする方法

iOS5 Appleドロップスarmv6アーキテクチャからARCHS_STANDARD_32_BIT =。

iPhone3Gのサポートを維持するために、iOS5でもarmv6でコンパイルしたい。

誰かがこれに対する解決策を見つけましたか?

96
iGranDav

今日、iOS 4.0の展開ターゲットを指定して何かを作成しました。 Architecturesでarmv7のみが指定されているため、XcodeはiOS4.2より下のすべてをサポートするには、armv6をArchitecturesに含める必要があると警告しました。そのフィールドを編集し、ダイアログが表示されたら「+」ボタンをクリックして、リテラルの「armv6」を入力します。

私の場合、アプリをiOS4およびiOS5で動作させたいです。 iOS5で正しく動作するようにいくつかの変更を行う必要がありましたが、これらの変更はすべてiOS4に対応したコード変更で行われました。

また、iOS4でクラッシュすることなくアプリを実行できるように、iOS5固有の機能をいくつか追加しました。具体的には、iOS5の機能を使用する前にテストし、オプションとしてiOS5専用ライブラリをリンクしました。

したがって、iOS5の世界でiPhone3Gをサポートすることは、「iOS5を実行している古いデバイスでアプリを実行することを確認する」ではなく、「iOS5以降でアプリを実行する(iOS5機能の使用に関係なく) 「。ここには違いがあります。それについて考えてください。 :-)

とにかく、armv6サポートを追加するのはとても簡単です。そして、私はポイントがこれだと思います:ある時点で、(何らかの理由で)心配する必要のあるarmv6デバイスがもうないときは、そのために構築する必要はありません。 Appleの見解では、誰でもできるだけ早く最新のハードウェアにアップグレードする必要があります。そのため、この世界では、ツールがデフォルトで最新かつ最高のものにデフォルト設定される必要はありません。 :-)幸いなことに(またはそうではない)、開発者は現実の世界に住んでおり、しばらくの間古いものをサポートする必要があることを認識しています。 Xcode開発チームもこれを知っていると思うので、非常に簡単にarmv6サポートを追加できます。

97
Mark Granoff

簡単な答えは、現在の設定を「標準(armv7)-$(ARCHS_STANDARD_32_BIT)」から「armv6」および「armv7」に変更する必要があるということです。下の画像をご覧ください。動作させるには、以前の設定の行を削除する必要があります。

Correct settings for armv6 and armv7

51
adjwilli

また、プロジェクトとターゲットでこれを設定してください...それを理解するのに1時間かかりました。一方には設定しましたが、もう一方には設定しませんでした。お役に立てれば。 GLTA

11
ubert

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では期待どおりに動作します。

宜しくお願いします

9
jfieres

これが実際に解決策であるかどうかはまだわかりませんが、$(ARCHS_STANDARD_32_BIT)である「アーキテクチャ」で定義された文字列を「armv6 armv7」で置き換えると、iOS5をベースとして、iOS4をデプロイメントとしてコンパイルできることを発見しましたターゲット、および検証に合格します。

IOS5専用のライブラリまたは呼び出しを使用していませんが、次のリリースで使用する予定です。

7
Peter Johnson

アプリをコンパイルしてApp Storeにアップロードするために、$(ARCHS_STANDARD_32_BIT)をarmv7だけに置き換える必要はありませんでした。

MarkGranoffが示唆するように、プラスを押して2行目に入力するだけで、単純にarmv6をプレーンテキストとして追加しました。

1
Johan