Xamarin.iOS の埋め込みフレームワーク
"このドキュメントでは、アプリケーション開発者がアプリにユーザー フレームワークを埋め込む方法について説明します。"
Apple の iOS 8.0 では、アプリ拡張機能と Xcode のメイン アプリの間でコードを共有するための埋め込みフレームワークを作成できるようになりました。
Xamarin.iOS 9.0 では、Xamarin.iOS アプリでこれらの埋め込みフレームワーク (Xcode で作成) を使用するためのサポートが追加されています。 "任意の種類の Xamarin.iOS プロジェクトから埋め込みフレームワークを作成することはできず、既存のネイティブ (Objective-C) フレームワークの使用のみが可能です。"
Xamarin.iOS でフレームワークを使用するには、次の 2 つの方法があります。
プロジェクトの iOS ビルドオプションの追加の mtouch 引数に以下を追加して、フレームワークを mtouch ツールに渡します。
--framework:/Path/To/My.Framework
これはプロジェクト構成ごとに設定する必要があります。
コンテキスト メニューの [ネイティブ参照の追加]
[プロジェクト] を右クリックし、[ネイティブ参照の追加] に移動する
これはすべての構成で機能します。
今後のバージョンの Visual Studio for Mac と Xamarin Tools for Visual Studio では、IDE 内から (プロジェクト ファイルを手動で編集せずに) フレームワークを使用できるようになります。
GitHub にはいくつかのサンプル プロジェクトがあります。
制限事項
- 埋め込みフレームワークは、統合プロジェクトでのみサポートされます。
- 埋め込みフレームワークは、少なくとも iOS 8.0 のデプロイ ターゲットを持つプロジェクトでのみサポートされます。
- 拡張機能に埋め込みフレームワークが必要な場合は、コンテナー アプリにもフレームワークへの参照が必要です。そうでない場合、フレームワークはアプリ バンドルに含まれません。
Mono ランタイム
内部的に Xamarin.iOS では、Mono ランタイムを各拡張機能とコンテナー アプリに静的にリンクするのではなく、この機能を利用してフレームワークとして Mono ランタイムとリンクします。
コンテナー アプリが統合アプリで、拡張機能が含まれ、ターゲットデプロイが iOS 8.0 以降の場合に、これは自動的に行われます。
拡張機能のないアプリは Mono ランタイムと静的にリンクします。これは、フレームワークを参照するアプリが 1 つしかない場合、フレームワークの使用に対してサイズのペナルティがあるためです。
この動作は、プロジェクトの iOS ビルド オプションに追加の mtouch 引数として次を追加することで、アプリ開発者によってオーバーライドできます。
--mono:static
: Mono ランタイムと静的にリンクします。--mono:framework
: フレームワークとして Mono ランタイムとリンクします。
拡張機能のないアプリでもフレームワークとして Mono ランタイムとリンクするシナリオの 1 つは、実行可能ファイルのサイズを減らすことで、実行可能ファイルに対して Apple が適用するサイズ制限を克服することです。 参考までに、Mono ランタイムはアーキテクチャごとに約 1.7 MB を追加します (ただし、Xamarin.iOS 8.12 の時点ではこれはリリース間によって異なり、アプリ間でも異なります)。 Mono フレームワークはアーキテクチャごとに約 2.3 MB を追加します。つまり、拡張機能のない単一のアーキテクチャ アプリの場合、フレームワークとして Mono ランタイムにアプリをリンクすると、実行可能ファイルが最大 1.7 MB 縮小しますが、最大 2.3 MB のフレームワークが追加され、全体で最大約 0.6 MB 大きなアプリが作成されます。