質問

新しい ARM プロセッサを搭載したデバイス (iPhone 3GS や一部の iPod 3G など) と古い ARM プロセッサを搭載したデバイスを実行時に区別する方法を探しています。uname() を使用してデバイスのモデルを特定できることはわかっていますが、ARM プロセッサが強化されたのは一部の iPod touch 3G だけであるため、これでは十分ではありません。

したがって、次のいずれかを探しています。

  1. プロセッサーのモデルを検出する方法 - おそらく存在しないと思います。
  2. ARM ネオン命令がサポートされているかどうかを判断する方法 - これから答えを導き出すことができます。
  3. デバイスの合計ストレージ サイズを決定する方法 - これを既知のデバイス モデルと組み合わせると、巧妙に答えが得られる可能性があります。
  4. < ランダムなアイデアを入力 >

前もって感謝します :)

役に立ちましたか?

解決

考えられる回避策の1つは、OpenGL ES 2.0が利用可能かどうかを検出することです。新しいプロセッサがそれを有効にしているためです。

mobileorchardの記事があります方法について

他のヒント

まさにあなたが求めているものではありませんが、1つの簡単な解決策は、アプリケーションのファットをビルドして、ARMv6とARMv7の両方の実行可能コードを含めることです。これを行うと、適切なコードがプロセッサで自動的に実行され、ランタイムチェックを行う必要はありません。事実上、ローダーにランタイム検出を実行させることになります。

これを行うには、XCodeプロジェクトのアーキテクチャ設定を<!> quot; Standard(armv6)<!> quot;から変更します。 <!> quot;最適化(armv6 armv7)<!> quot;

次に、実装でこれを行います:

#if defined __ARM_NEON__
    // Code that uses NEON goes here
#else  // defined __ARM_NEON__
    // Fallback code without NEON goes here
#endif // defined __ARM_NEON__

(NEON以外の)ARMv7機能を確認するために使用できる同様のマクロがありますが、これは頭の外では思い出せません。

ランタイムディスパッチを本当に行いたい場合は、 libcのsysctlbyname 関数。具体的には、HW_MACHINE_ARCHパラメータを調べると便利な場合があると思います。

編集:後で気づいた明白な穴がなくなったため、この回答を取り下げました:将来のハードウェアで未知のサブタイプを取得したときにどうすればよいですか?これは将来の保証ではありませんでした。また、文書化されていないAPIの使用に関するAppleのゼロトレランスを考えると、そのAPIの文書化されたステータスの不確実性は助けにはなりません。

Stephen Canonの答えを使用して、アプリケーションfatを構築する必要があります。現時点では、信頼性が高く将来性のあるランタイム検出は実行できません(残念なことに、私は保証します)。

これが不格好であることは承知していますが、私の頭に浮かぶ最善の方法は、デバイスがビデオ録画をサポートしているかどうかを検出することです。現在、ARM7 ベースの iPhone および iPod デバイスのみがそれをサポートしているため、これは正当な方法だと思います。

これを行うには、UIImagePickerController の availableMediaTypesForSourceType を kUTTypeMovie の isSourceTypeAvailable と組み合わせて使用​​します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top