web-dev-qa-db-ja.com

シングルアプリバイナリが64ビットおよび32ビットアプリをサポートする方法

Appleお知らせ こちら) が表示されます。このドキュメントによれば、32ビットと64ビットをサポートする同じバイナリを送信できます。スタックオーバーフローが1つ見つかりました回答 ここ 。しかし、この回答によれば、私たちはshouldを設定しましたdeployment target as IO7+。しかしApple docは、これを= IOS 7 and IOS 6 support?私の質問は、32ビットと64ビットをサポートするバイナリをどのように生成できるか展開ターゲットIOS6 +?

注:私はxcode 5.0を使用しています

更新:Question above is fixed by using xcode 5.0.2。しかし、32ビット用と64ビット用のコードを作成する方法がわかりません。私は1つ知っています。2つのコードを別々に実行する必要がある場合があります。しかし、How can I do?。たとえば、ios6で非推奨の1つのメソッドが意味する場合、ios 6とios7のコードも提供します。同じケースでここもフォローしたり、他のテクニックを使用したりします。

14
Mani

Xcodeは、32ビットと64ビットの両方のバイナリを含むアプリをビルドできるため、iOS 7を実行しているすべてのデバイスで機能します。iOS6を引き続きサポートする場合は、32ビットのみをビルドする必要があります。来月は、iOS 6では32ビット、iOS 7では32ビットと64ビットをサポートする単一のアプリバイナリを作成できるようにする変更を行います。

アプリを64ビットバイナリに変換する

大まかに言うと、32ビットと64ビットの両方のランタイム環境を対象とするアプリを作成する手順は次のとおりです。

1. Xcode 5.0.1をインストールします。

2.プロジェクトを開きます。 Xcodeにより、プロジェクトを最新化するように求められます。プロジェクトを最新化すると、64ビット用にアプリをコンパイルするときに重要な新しい警告とエラーが追加されます。

3. iOS 5.1.1以降をサポートするようにプロジェクト設定を更新します。 iOS 5.1より前のiOSバージョンをターゲットにしている場合は、64ビットプロジェクトをビルドできません。

4.プロジェクトのアーキテクチャビルド設定を「標準アーキテクチャ(64ビットを含む)」に変更します。

5. 64ビットのランタイム環境をサポートするようにアプリを更新します。新しいコンパイラの警告とエラーは、このプロセスをガイドするのに役立ちます。ただし、コンパイラーがすべての作業を行うわけではありません。このドキュメントの情報を参考にして、独自のコードを調査してください。

6.実際の64ビットハードウェアでアプリをテストします。 iOSシミュレーターは開発中にも役立ちますが、関数呼び出し規則などの一部の変更は、アプリがデバイスで実行されている場合にのみ表示されます。

7. Instrumentsを使用して、アプリのメモリパフォーマンスを調整します。

8.承認のために両方のアーキテクチャを含むアプリを送信します。

この章の残りの部分では、Cocoa Touchアプリを64ビットランタイム環境に移植するときに頻繁に発生する問題について説明します。これらのセクションを使用して、コードを調査するための独自の取り組みを導きます。

から https://developer.Apple.com/library/ios/documentation/General/Conceptual/CocoaTouch64BitGuide/ConvertingYourAppto64-Bit/ConvertingYourAppto64-Bit.html#//Apple_ref/doc/uid/TP40013501-CH3-SW1

19
codercat

iOSアプリは、Objective-C言語とシステムフレームワークによって確立された低レベルのアプリケーションバイナリインターフェイスとコーディング規則に依存しています。 iOS 7以降、一部のiOSデバイスは64ビットプロセッサを使用し、32ビットと64ビットの両方のランタイム環境を提供します。ほとんどのアプリでは、64ビットランタイム環境と32ビットランタイム環境は、次の2つの点で異なります。

64ビットランタイムでは、Cocoa Touchフレームワーク(およびObjective-C言語自体)で使用される多くのデータ型のサイズが増加するか、より厳密なメモリアライメントルールがあります。 「 データ型の変更 」を参照してください。 64ビットランタイムでは、関数呼び出しを行うときに適切な関数プロトタイプを使用する必要があります。 「 関数呼び出しの変更 」を参照してください。

アプリケーションバイナリインターフェイス(ABI)

64ビットランタイムのその他の変更

64ビットARM命令セットは32ビット命令セットとは大きく異なります。アプリにアセンブリ言語コードが含まれている場合は、新しい命令セットを使用するようにコードを書き直す必要があります。また、規則がARM標準に完全に一致しないため、iOSの64ビット呼び出し規則の詳細な説明が必要です。詳細については、iOS ABI関数呼び出しガイド)を参照してください

高レベルでは、コードを64ビットのクリーンにするために、以下を実行する必要があります。

  1. 64ビット長整数を32ビット整数に割り当てないでください。
  2. 64ビットポインターを32ビット整数に割り当てないでください。
  3. 算術演算中(または整数型の変更によって引き起こされるその他の算術問題)に、ポインターおよび長整数の切り捨てを回避します。
  4. データ型サイズの変更によって引き起こされる配置の問題を修正します。
  5. 32ビットと64ビットのランタイム間で共有されるメモリ構造が同様のレイアウトを共有するようにします。
  6. コードが新しい64ビットのオペコードとランタイムを使用するように、アセンブリ言語コードを書き換えます。
  7. 可変数関数を固定数のパラメーターを取る関数にキャストしたり、その逆を行ったりしないでください。
5
codercat

大まかに言うと、32ビットと64ビットの両方のランタイム環境を対象とするアプリを作成する手順は次のとおりです。

Xcode 5.0.2をインストールします(これだけで完了しました。多分高い方が良いでしょう)

プロジェクトを開きます。 Xcodeにより、プロジェクトを最新化するように求められます。プロジェクトを最新化すると、64ビット用にアプリをコンパイルするときに重要な新しい警告とエラーが追加されます。

IOS 5.1.1以降をサポートするようにプロジェクト設定を更新します。 iOS 5.1より前のiOSバージョンをターゲットにしている場合は、64ビットプロジェクトをビルドできません。

プロジェクトのアーキテクチャビルド設定を「標準アーキテクチャ(64ビットを含む)」に変更します。

64ビットのランタイム環境をサポートするようにアプリを更新します。新しいコンパイラの警告とエラーは、このプロセスをガイドするのに役立ちます。ただし、コンパイラーがすべての作業を行うわけではありません。このドキュメントの情報を参考にして、独自のコードを調査してください。

実際の64ビットハードウェアでアプリをテストします。 iOSシミュレーターは開発中にも役立ちますが、関数呼び出し規則などの一部の変更は、アプリがデバイスで実行されている場合にのみ表示されます。

Instrumentsを使用して、アプリのメモリパフォーマンスを調整します。承認のために両方のアーキテクチャを含むアプリを送信します。

この章の残りの部分では、Cocoa Touchアプリを64ビットランタイム環境に移植するときに頻繁に発生する問題について説明します。これらのセクションを使用して、コードを調査するための独自の取り組みを導きます。

Appleの 2ビットと64ビットをサポートするためのガイド アーキテクチャに従ってください

2
Retro

質問の最初の部分について-Base SDKはiOS 7.0である「最新のiOS SDK」でなければなりません。最小の展開ターゲットはiOS 6.0である必要があります。そうでない場合、アーキテクチャに「64ビット(armv7、armv7s、armv8)を含む標準アーキテクチャ」を選択できません。これらの設定を選択すると、アプリは32ビットと64ビットのどちらかで構築されます。

更新について-32/64ビットアーチに切り替えた後、プロジェクトを分析し、表示される可能性のある新しい警告を修正します。次に、実際の64ビットデバイス(iPhone 5s/iPad Air/iPad mini Retina)でアプリをテストします。アプリでiCloudを使用している場合は、32ビットデバイスと64ビットデバイス間の同期をテストします。役立つ情報は Appleのガイド にあります(@iDevの回答に要約があります)。

[〜#〜]編集[〜#〜]

実際には、最低でも5.1.1ですが、手動で設定するか、展開ターゲットを6.0よりも低く設定する必要があります。 64ビットXcodeは、5.1.1として設定するように要求します。とにかく、64ビットアーチを使用する場合に、なぜ5.1.1をサポートする必要があるのか​​はわかりません。

0
Timur Kuchkarov

コンパイルされたプログラムxcode 5には、32ビットと64ビットの2つのバイナリコードが含まれていました.32ビットシステムでは32ビットコードが呼び出されます.64ビットシステムでは64ビットコードが呼び出されます。同時に、同じプログラムに32ビットコードしかないことを考えてください。64ビットシステムには、32ビットと64ビットの2つのフレームワークが含まれていました。32ビットプログラムを実行している64ビットシステムが基礎となるサポート用の32ビットフレームワーク、64ビットプログラムを実行すると、基礎となるサポート用の64ビットフレームワークが呼び出されます。詳細については、Appleの公式ドキュメント「Cocoa Touchの64ビット移行ガイド」を参照してください。

Xcode 5を使用すると、プログラムを64に簡単にコンパイルできます。基本的な手順は次のとおりです。

  1. サポートデバイスを「ios7」に設定します

  2. 「ビルド設定」の「アーキテクチャ」を「標準アーキテクチャ(64ビットを含む)」に変更しました。

0
Dracuuula

32ビットと64ビットの両方のランタイム環境を対象とするアプリを作成します。

https://developer.Apple.com/library/ios/documentation/General/Conceptual/CocoaTouch64BitGuide/ConvertingYourAppto64-Bit/ConvertingYourAppto64-Bit.html

0
user3279053