Xamarin.iOS の各種デバイス向けコンパイル
実行可能ファイルのビルド プロパティは、プロジェクトの iOS ビルドのプロパティ ページから設定できます。このページは、プロジェクト名を右クリックし、[オプション] > [iOS ビルド] の順に移動するか (Visual Studio for Mac)、[プロパティ] に移動します (Visual Studio)。
UI で利用できる構成オプションに加え、独自のコマンド ライン オプション セットを Xamarin.iOS ビルド ツール (mtouch) に渡すこともできます。
SDK オプション
Visual Studio for Mac では、SDK に関連する 2 つの重要なプロパティを構成できます。ソフトウェアのビルドに利用される iOS SDK バージョンと配置ターゲット (または必要な最小 iOS バージョン) です。
iOS SDK バージョン オプションでは、Apple が公開している SDK をさまざまなバージョンで利用できます。これはビルド中に参照すべきコンパイラ、リンカー、ライブラリを Xamarin.iOS に指示します。 プロジェクトを右クリックして [オプション] を選択し、オプション ウィンドウで [iOS ビルド] を選択します。
配置ターゲット設定では、アプリケーションを実行するオペレーティング システムの必要な最小バージョンを選択します。 これはプロジェクトの Info.plist ファイルで設定されます。 アプリケーションを実行するために必要なすべての API が含まれる最小のバージョンを選択してください。
通常、Xamarin.iOS API は最新版の SDK で利用できるすべてのメソッドを公開します。Microsoft では、必要に応じて、実行時に機能が利用できるかどうかを検出する便利なプロパティを提供しています (たとえば、UIDevice.UserInterfaceIdiom
と UIDevice.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 ビルド オプションから有効にすることができます。
アーキテクチャ サポート
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
を解析することです。