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
    

    これはプロジェクト構成ごとに設定する必要があります。

  • コンテキスト メニューの [ネイティブ参照の追加]

[プロジェクト] を右クリックし、[ネイティブ参照の追加] に移動する

Select Add native references in Visual Studio for Mac

これはすべての構成で機能します。

今後のバージョンの 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 大きなアプリが作成されます。