Xamarin.iOS の各種デバイス向けコンパイル

実行可能ファイルのビルド プロパティは、プロジェクトの [iOS ビルド] プロパティ ページから構成できます。このページは、[プロジェクト名] を右クリックし、[Visual Studio for Macのオプション iOS ビルド] と [Visual Studio のプロパティ] > を参照することで確認できます。

UI で利用できる構成オプションに加え、独自のコマンド ライン オプション セットを Xamarin.iOS ビルド ツール (mtouch) に渡すこともできます。

SDK オプション

Visual Studio for Mac では、SDK に関連する 2 つの重要なプロパティを構成できます。ソフトウェアのビルドに利用される iOS SDK バージョンと配置ターゲット (または必要な最小 iOS バージョン) です。

iOS SDK バージョン オプションでは、Apple が公開している SDK をさまざまなバージョンで利用できます。これはビルド中に参照すべきコンパイラ、リンカー、ライブラリを Xamarin.iOS に指示します。 プロジェクトを右クリックして [オプション] を選択し、オプション ウィンドウで [iOS ビルド] を選択します。

オプション ウィンドウで SDK バージョンを選択する

配置ターゲット設定では、アプリケーションを実行するオペレーティング システムの必要な最小バージョンを選択します。 これはプロジェクトの Info.plist ファイルで設定されます。 アプリケーションを実行するために必要なすべての API が含まれる最小のバージョンを選択してください。

Info.plist ファイルで配置ターゲットを設定する

通常、Xamarin.iOS API は最新版の SDK で利用できるすべてのメソッドを公開します。Microsoft では、必要に応じて、実行時に機能が利用できるかどうかを検出する便利なプロパティを提供しています (たとえば、UIDevice.UserInterfaceIdiomUIDevice.IsMultitaskingSupported は常に Xamarin.iOS で動作し、Microsoft はバックグラウンドのあらゆる仕事を行っています)。

リンク

Microsoft のリンカー専用ページをご覧ください。実行可能ファイルのサイズを減らし、実行可能ファイルを効果的に使用するためにリンカーがいかに役立つかをご確認いただけます。

コード生成エンジン

Xamarin.iOS 4.0 以降、2 つのコード生成バックエンドが Xamarin.iOS に加わりました。 通常の Mono コード生成エンジンと LLVM 最適化コンパイラを基盤とするコード生成エンジンです。 各エンジンには長所と短所があります。

通常、開発プロセスにおいては、イテレーションの速い Mono コード生成エンジンを使用することが多いです。 リリース ビルドと AppStore 配置の場合、LLVM コード生成エンジンに切り替えることがあります。

LLVM 最適化バックエンド エンジンは、Mono エンジンより簡潔なコードを短時間で生成できますが、コンパイル時間が長くなります。

生成エンジンは、Visual Studio for Mac または Visual Studio の iOS ビルド オプションから有効にすることができます。

Visual Studio for Mac での L L V M の有効化。

Visual Studio での L L V M の有効化。

アーキテクチャ サポート

ARMv6 (Xamarin.iOS では、v8.10 で ARMv6 のサポートが終了しました)

  • iPhone (オリジナル)、3G
  • iPod 第 1、2 世代

ARMv7

  • iPhone 3GS、4、4S
  • iPad 1、2、3、Mini
  • iPod 第 3、4、5 世代

ARMv7s

  • iPhone 5
  • iPhone 5c
  • iPad 4

ARMv7s プロセッサのみを対象とする場合、わずかに速いコードが生成されますが、パッケージに複数の実行可能ファイルが含まれる FAT バイナリをコンパイルしない限り、ARMv7 または ARMv6 システムでは実行されません。

ARM64 (Xamarin.iOS では、v8.6 で ARM64 のサポートを開始しました)

  • iPhone 5s
  • iPhone SE
  • iPhone 6、6 Plus
  • iPhone 6s、6s Plus
  • iPhone 7、7 Plus
  • iPhone 8、8 Plus
  • iPhone X
  • iPad Air
  • iPad Air 2
  • iPad Mini 2、3、4
  • iPad Pro (すべて)

App Store に提出するビルドには、64 ビット サポートを含める必要があります。これは Apple が定めた要件です。 また、iOS 11 は 64 ビット アプリケーションにのみ対応しています。

ARM Thumb-2 サポート

Thumb は、ARM プロセッサで利用される、より簡潔な命令セットです。 Thumb サポートを有効にすれば、実行時間が長くなりますが、実行可能ファイルのサイズを減らすことができます。 Thumb は ARMv7 と ARMv7s でサポートされています。

フレームワークの条件付き利用

プロジェクトで最新の iOS リリースの機能の一部を活用したい場合は、条件付きで新しいフレームワークを利用する必要があります。 この典型的な例は、iOS 4.0 以降で iAd を利用し、3.x デバイスにも対応するというものです。 これを達成するには、iAd フレームワークに対して "弱く" リンクする必要があることを Xamarin.iOS に認識させる必要があります。 結合が弱いことで、フレームワークからのクラスが初めて必要になったときにだけフレームワークが要求に応じて読み込まれます。

これを行うには、次の手順を実行する必要があります。

  • [プロジェクト オプション] を開き、 [iOS ビルド] ウィンドウに移動します。
  • 弱くリンクする各構成の [追加オプション] に を追加'-gcc_flags "-weak_framework iAd"'します。

その他のオプション

これに加え、型の処理が旧バージョンの iOS で実行されないようにする必要があります。その型が旧バージョンにはない可能性があります。 これを行う方法はいくつかありますが、その 1 つは UIDevice.CurrentDevice.SystemVersion を解析することです。