iOS、Mac、およびバインド プロジェクトのネイティブ参照

ネイティブ参照を使用すると、Xamarin.iOS または Xamarin.Mac プロジェクトまたはバインド プロジェクトにネイティブ フレームワークを埋め込むことができます。

iOS 8.0 以降では、アプリ拡張機能と Xcode のメイン アプリの間でコードを共有する埋め込みフレームワークを作成することが可能でした。 ネイティブ参照機能を使用すると、Xamarin.iOS でこれらの埋め込みフレームワーク (Xcode で作成) を使用できます。

重要

任意の種類の Xamarin.iOS または Xamarin.Mac プロジェクトから埋め込みフレームワークを作成することはできません。ネイティブ参照では、既存のネイティブ (Objective-C) フレームワークのみを使用できます。

用語

iOS 8 以降では、 埋め込みフレームワーク は、静的にリンクされたフレームワークと動的にリンクされたフレームワークの両方に埋め込むことができます。 適切に配布するには、アプリでサポートするデバイス アーキテクチャごとにスライスをすべて含む "fat" フレームワークにする必要があります。

静的フレームワークと動的フレームワーク

静的フレームワーク はコンパイル時にリンクされ、 動的フレームワーク は実行時にリンクされます。そのため、再リンクせずに変更できます。 iOS 8 より前のサード パーティ製フレームワークを使用している場合は、アプリにコンパイルされた Static Framework を使用していました。 詳細については、Apple の 動的ライブラリ プログラミング に関するドキュメントを参照してください。

埋め込みフレームワークとシステム フレームワーク

埋め込みフレームワーク はアプリ バンドルに含まれており、サンドボックスを介してのみ特定のアプリからアクセスできます。 System Framework は オペレーティング システム レベルで格納され、デバイス上のすべてのアプリで使用できます。 現在、オペレーティング システム レベルのフレームワークを作成できるのは Apple だけです。

薄いフレームワークと脂肪フレームワーク

Thin Framework には、Fat Framework に複数のアーキテクチャのコードが含まれている特定のシステム アーキテクチャのコンパイル済みコードのみが含まれます。 フレームワークにコンパイルされた各アーキテクチャ固有のコードベースは、 スライスと呼ばれます。 そのため、たとえば、2 つの iOS シミュレーター アーキテクチャ (i386 とX86_64) 用にコンパイルされたフレームワークがある場合、2 つのスライスが含まれます。

このサンプル フレームワークをアプリと共に配布しようとすると、シミュレーターで正しく実行されますが、フレームワークには iOS デバイス用のコード固有のスライスが含まれていないため、デバイスで失敗します。 フレームワークがすべてのインスタンスで動作するようにするには、arm64、armv7、armv7 などのデバイス固有のスライスも含める必要があります。

埋め込みフレームワークの使用

Xamarin.iOS または Xamarin.Mac アプリで埋め込みフレームワークを操作するには、Fat Framework の作成とフレームワークの埋め込みの 2 つの手順を完了する必要があります。

Fat Framework の作成

前述のように、アプリで埋め込みフレームワークを使用できるようにするには、アプリが実行されるデバイスのすべてのシステム アーキテクチャ スライスを含む Fat Framework である必要があります。

フレームワークと使用するアプリが同じ Xcode プロジェクトにある場合、Xcode では同じビルド設定を使用してフレームワークとアプリの両方がビルドされるため、これは問題になりません。 Xamarin アプリでは埋め込みフレームワークを作成できないため、この手法は使用できません。

この問題を解決するには、コマンド ライン ツールを lipo 使用して、必要なすべてのスライスを含む 1 つの Fat Framework に複数のフレームワークをマージできます。 コマンドの操作の詳細については、ネイティブ ライブラリlipoリンクに関するドキュメントを参照してください。

フレームワークの埋め込み

ネイティブ参照を使用して Xamarin.iOS または Xamarin.Mac プロジェクトにフレームワークを埋め込むには、次の手順が必要です。

  1. 新規を作成するか、既存の Xamarin.iOS、Xamarin.Mac、または Binding プロジェクトを開きます。

  2. ソリューション エクスプローラーで、プロジェクト名を右クリックし、[Add Add Native Reference]\(ネイティブ参照の追加>\) を選択します。

    ソリューション エクスプローラーで、プロジェクト名を右クリックし、[ネイティブ参照の追加] を選択します。

  3. [ 開く ] ダイアログ ボックスで、埋め込む Native Framework の名前を選択し、[ 開く ] ボタンをクリックします。

    埋め込むネイティブ フレームワークの名前を選択し、[開く] ボタンをクリックします

  4. フレームワークがプロジェクトのツリーに追加されます。

    フレームワークがプロジェクト ツリーに追加されます

プロジェクトがコンパイルされると、Native Framework がアプリのバンドルに埋め込まれます。

アプリ拡張機能と埋め込みフレームワーク

内部的に Xamarin.iOS では、この機能を利用してフレームワークとして Mono ランタイムとリンクする場合があります (デプロイ ターゲットが >iOS 8.0 の場合)、拡張機能を持つアプリのアプリ サイズが大幅に縮小されます (Mono ランタイムは、コンテナー アプリに対して 1 回、拡張機能ごとに 1 回ではなく、アプリ バンドル全体に対して 1 回だけ含まれるため)。

拡張機能はすべて iOS 8.0 を必要とするため、拡張機能はフレームワークとして Mono ランタイムとリンクします。

iOS を対象とする拡張機能とアプリがないアプリ

まとめ

この記事では、ネイティブ フレームワークを Xamarin.iOS または Xamarin.Mac アプリケーションに埋め込む方法について詳しく説明しました。