iPhone 5 およびその他の armv7s デバイスが登場した現在、この新しいアーキテクチャなしで構築された Flurry などの既存の (クローズド ソース) サードパーティ フレームワークとの互換性の問題があります。
1 つのオプションは、彼らが新しいビルドをリリースするまで待つことですが、このフレームワークから armv7s アーキテクチャを期待しないことをリンカーに知らせ、armv7代わりは。このようなものは存在しますか?
iPhone 5 およびその他の armv7s デバイスが登場した現在、この新しいアーキテクチャなしで構築された Flurry などの既存の (クローズド ソース) サードパーティ フレームワークとの互換性の問題があります。
1 つのオプションは、彼らが新しいビルドをリリースするまで待つことですが、このフレームワークから armv7s アーキテクチャを期待しないことをリンカーに知らせ、armv7代わりは。このようなものは存在しますか?
対象のアーキテクチャを含まないフレームワークをロードすることはできません。
フレームワークが更新されるまでは、armv7 アプリのみを出荷することができます。アプリは引き続き iPhone 5 で動作しますが、提供される最新のパフォーマンス最適化を使用しないでください。
または、新しいアーキテクチャでフレームワークなしで生活できる場合は、それを弱いリンクにすることができます。ただし、フレームワークからのものを使用するすべての場所でコードがロードされているかどうかをチェックインする必要があります。
以前は GCC にリンカー フラグがありましたallow_sub_type_mismatches
。これにより、リンクされたライブラリで ARM アーキテクチャのバージョンを混在させることができますが、Xcode の最近のバージョンではそれが取り除かれているようです。
ただし、これは実際には別の方法でハッキングされる可能性があります。フレームワークのコピーを作成し、その内容を表示し、その中の実際のコード ライブラリ ファイルを 16 進エディターで開き、次のようにしてすべてを置き換えます。
CEFAEDFE 0C000000 09000000
に
CEFAEDFE 0C000000 0B000000
基本的に行っていることは、各コード オブジェクト内のヘッダーを変更して、ARMv7 コードではなく ARMv7s として識別することです。命令セットは後方互換性がある (またはとにかくそうであるように見える) ため、このハックでも問題なく動作するはずです。とはいえ、実際に iPhone 5 でテストする機会が得られるまで、それは確かなことではないことを認めざるを得ません。
とにかく、フレームワークを変更したら、両方のバージョンをプロジェクトに追加し、各アーキテクチャから適切なバージョンにリンクするだけです。lipo
を使用して、変更されたライブラリと元のライブラリをマージすることにより、新しい単一のフレームワークを作成することもできます。