iOS Swift ライブラリのバインド

重要

現在、Xamarin プラットフォームでのカスタム バインディングの使用を調査しています。 今後の開発作業の発展のために、このアンケートにご回答ください。

iOS プラットフォームは、そのネイティブ言語とツールと共に常に進化しており、最新のオファリングを使用して開発されたサード パーティ製のライブラリが多数あります。 コードとコンポーネントを再利用して最大限に活用することは、クロスプラットフォーム開発の主な目標の 1 つです。 Swift でビルドされたコンポーネントを再利用する機能は、開発者の間で人気が高まり続けているため、Xamarin 開発者にとってますます重要になっています。 お客様は、通常の Objective-C ライブラリをバインドするプロセスについて、既に理解されているかもしれません。 Swift フレームワークをバインドするプロセスについて説明する追加のドキュメントを利用できるようになったため、Xamarin アプリケーションでも同じ方法で使用できます。 このドキュメントの目的は、Xamarin 用の Swift バインドを作成するための上位レベルのアプローチについて説明することです。

上位レベルのアプローチ

Xamarin を使用すると、任意のサード パーティ製のネイティブ ライブラリを、Xamarin アプリケーションで使用できるようにバインドできます。 Swift は新しい言語であり、この言語でビルドされたライブラリに対してバインドを作成するには、いくつかの追加の手順とツールが必要です。 このアプローチには、次の 4 つの手順が含まれます。

  1. ネイティブ ライブラリのビルド
  2. Xamarin メタデータを準備する。これにより、Xamarin ツールで C# クラスを生成できるようになります
  3. ネイティブ ライブラリとメタデータを使用して Xamarin バインド ライブラリをビルドする
  4. Xamarin アプリケーションで Xamarin バインド ライブラリを使用する

以下のセクションでは、これらの手順の概要を追加の詳細情報と共に説明します。

ネイティブ ライブラリをビルドする

最初の手順では、 Objective-C ヘッダーを作成してネイティブ Swift Framework を準備します。 このファイルは自動生成されたヘッダーであり、必要な Swift クラス、メソッド、フィールドを公開し、Xamarin バインド ライブラリを介して Objective-C と最終的には C# の両方からアクセスできるようにします。 このファイルは、次のパスの下のフレームワーク内にあります。 <FrameworkName>.framework/Headers/<FrameworkName>-Swift.h。 公開されているインターフェイスに必要なすべてのメンバーがいる場合は、次の手順に進むことができます。 それ以外の場合は、これらのメンバーを公開するためにさらなる手順が必要です。 このアプローチは、Swift フレームワークのソース コードにアクセスできるかどうかによって異なります。

  • コードにアクセスできる場合は、必要な Swift メンバーを @objc 属性で装飾し、いくつかの追加ルールを適用して、Xcode ビルド ツールでこれらのメンバーを Objective-C ワールドとヘッダーに公開する必要があることを認識させることができます。
  • ソース コードへのアクセス権がない場合は、元の Swift フレームワークをラップし、@objc 属性を使用してアプリケーションで必要なパブリック インターフェイスを定義するプロキシ Swift フレームワークを作成する必要があります。

Xamarin メタデータを準備する

2 番目の手順では、C# クラスを生成するためにバインド プロジェクトによって使用される API 定義インターフェイスを準備します。 これらの定義は、Objective Sharpie ツールと前述の自動生成された <FrameworkName>-Swift.h ヘッダー ファイルによって手動または自動で作成できます。 メタデータが生成されたら、手動で検証を行う必要があります。

Xamarin.iOS バインド ライブラリをビルドする

3 番目の手順では、特別なプロジェクトを作成します (Xamarin.iOS バインド ライブラリ)。 前の手順で準備したフレームワークとメタデータに加え、各フレームワークが依存している追加の依存関係も参照します。 また、参照先のネイティブ フレームワークと、使用している Xamarin.iOS アプリケーションとのリンクも処理します。

Xamarin バインド ライブラリを使用する

4 番目の最後の手順は、Xamarin.iOS アプリケーションでバインド ライブラリを参照することです。 iOS 12.2 以降を対象とする Xamarin.iOS アプリケーションでは、ネイティブ ライブラリの使用を有効にするだけで十分です。 下位バージョンを対象とするアプリケーションでは、いくつかの追加手順が必要です。

  • ランタイム サポート用に Swift dylib の依存関係を追加します。 iOS 12.2 と Swift 5.1 以降、言語は ABI (アプリケーション バイナリ インターフェイス) が安定し、互換性を持つようになりました。 そのため、より低い iOS バージョンを対象とするアプリケーションでは、フレームワークで使用される Swift dylibs の依存関係を含める必要があります。 SwiftRuntimeSupport NuGet パッケージを使用して、必要な dylib の依存関係を結果のアプリケーション パッケージに自動的に含めます。
  • 署名された dylibs を含む SwiftSupport フォルダを追加します。これは、アップロードプロセス中に AppStore によって検証されます。 パッケージには Xcode ツールを使用して署名し、AppStore Connect に配布する必要があります。そうしないと、自動的に拒否されます。

チュートリアル

上記のアプローチでは、Xamarin 用の Swift バインドを作成するために必要な手順の概要について説明しています。 これらのバインドを実際に準備する際には、ネイティブのツールと言語の変更に合わせるなど、多くの下位レベルの手順が必要になり、さらに詳細な考慮事項があります。 ここでの目的は、この概念と、このプロセスに関連する手順の概要をより深く理解できるようにすることです。 詳細な手順のガイドについては、Xamarin Swift Binding Walkthrough のドキュメントをご覧ください。