iOS 5.1.1 から iOS 8 を対象とするアプリを開発しています。これは、arm64、armv7、および armv7s を含むユニバーサル バイナリです。現在、arm64 は iOS 7 以降 (サポートされているデバイス) でロードされますが、iOS 8 でのみロードするように強制したいと思います (つまり、iOS 7 を armv7s のロードに戻します)。
動機:効率的な理由から、iOS 8 固有の機能の条件付きコンパイルが必要です。iOS 8 でレンダリング バックエンド全体を OpenGL ES から Metal に切り替えていますが、この 2 つの間の動的ディスパッチに料金を支払いたくありません。バックエンドは一連の C 関数であるため、API を動的に選択するには、すべてに対して関数ポインターの追加レイヤーが必要になります。arm64 が iOS 8 のみの場合、Metal を使用して条件付きでコンパイルできます#ifdef __arm64__
。
私がうまくいくと思うこと:「iOS Deployment Target」の下にarm64の条件付きビルド設定を追加しています。ビルド ログを確認し-miphoneos-version-min=8.0
たところ、arm64 ビルド用に追加されていることがわかりました。iOS 8 と arm64 で正常に動作します。iOS 7 と arm64 の場合、2 つの結果が考えられます。1) iOS 7 は 64 ビット バイナリを確認し、サポートされていないものとして破棄し、armv7s のロードに進みます。2) 64 ビット バイナリを読み込もうとしてクラッシュします。問題は、私の唯一の 64 ビット デバイスが iOS 8 を実行しているため、テストできないことです。
私の質問は、これが機能するかどうか (おそらく誰かが以前にこれを試したことがあるかどうか)、または問題に対する別の解決策があるかどうかです。
参照用の条件付きビルド設定のスクリーンショット: