次の方法で共有


パート 1 - Xamarin モバイル プラットフォームの概要

Xamarin プラットフォームは、iOS および Android 用のアプリケーションを開発できる多くの要素で構成されています。

  • C# 言語 – ジェネリック、LINQ、並列タスク ライブラリなど、使い慣れた構文と高度な機能を使用できます。
  • Mono .NET Framework – Microsoft の .NET Framework で広範な機能のクロスプラットフォーム実装を提供します。
  • コンパイラ – プラットフォームに応じて、ネイティブ アプリ (iOS など) または統合 .NET アプリケーションとランタイム (Android など) が生成されます。 また、コンパイラは、未使用コードのリンク解除など、モバイル デプロイに対する最適化も多く実行します。
  • IDE ツール – Mac および Windows の Visual Studio を使用して、Xamarin プロジェクトを作成、ビルド、デプロイできます。

また、基になる言語は .NET Frameworkを使用した C# であるため、Windows Phone にもデプロイできるコードを共有するように、プロジェクトを構造化できます。

しくみ

Xamarin では C# でアプリを記述し、複数のプラットフォームで同じコードを共有できますが、実際の実装は、システムごとに異なります。

コンパイル

C# ソースがネイティブ アプリに取り込まれる方法は、プラットフォームごとに異なります。

  • iOS - C# は、ARM アセンブリ言語に AOT (Ahead-of-Time) コンパイルされます。 .NET Framework が組み込まれ、未使用のクラスはリンク中に取り除かれ、アプリケーション サイズが縮小されます。 Apple では iOS でのランタイム コードの生成が許可されていないため、使用できない言語機能があります (「Xamarin.iOS の制限事項」を参照してください)。
  • Android – C# は IL にコンパイルされ、MonoVM + JIT でパッケージ化されます。 フレームワーク内の未使用のクラスは、リンク中に取り除かれます。 アプリケーションは Java/ART (Android ランタイム) と side-by-side 実行され、JNI を介してネイティブ型と対話します (Xamarin.Android の制限事項に関するページを参照してください)。
  • Windows – C# は IL にコンパイルされ、組み込みのランタイムによって実行されます。Xamarin ツールは必要ありません。 Xamarin のガイダンスに従って Windows アプリケーションを設計すると、iOS と Android でコードが再利用しやすくなります。 また、ユニバーサル Windows プラットフォームには、Xamarin.iOS の AOT コンパイルと同じように動作する、.NET ネイティブ オプションも用意されています。

Xamarin.iOS および Xamarin.Android のリンカー ドキュメントでは、コンパイル プロセスのこの部分がさらに詳しく説明されています。

コードを System.Reflection.Emit で動的に生成するランタイム "コンパイル" は、避ける必要があります。

Apple のカーネルにより、iOS デバイスでは動的なコード生成を行うことができません。したがって、その場でのコード出力は Xamarin.iOS では機能しません。 同様に、動的言語ランタイム機能は Xamarin ツールで使用できません。

リフレクション機能の中には動作するものもありますが (たとえば、MonoTouch.Dialog ではリフレクション API に使用されます)、コード生成は動作しません。

プラットフォーム SDK アクセス

Xamarin では、プラットフォーム固有の SDK によって提供される機能に、使い慣れた C# 構文で簡単にアクセスできます。

  • iOS – Xamarin.iOS では、Apple の CocoaTouch SDK フレームワークが、C# から参照できる名前空間として公開されます。 たとえば、すべてのユーザー インターフェイス コントロールを含む UIKit フレームワークは、シンプルな using UIKit; ステートメントに含めることができます。
  • Android – Xamarin.Android では、Google の Android SDK が名前空間として公開されます。このため、サポートされている SDK の任意の部分を using ステートメントで参照できます。たとえば、using Android.Views; を使用して、ユーザー インターフェイス コントロールにアクセスできます。
  • Windows – Windows アプリは、Windows 上の Visual Studio を使用して構築されます。 プロジェクトの種類には、Windows フォーム、WPF、WinRT、ユニバーサル Windows プラットフォーム (UWP) などがあります。

開発者向けのシームレスな統合

Xamarin のすばらしい点は、Xamarin.iOS と Xamarin.Android が (Microsoft の Windows SDK と連動して)、内部の違いにもかかわらず、シームレスなエクスペリエンスによって、3 つのプラットフォームすべてで再利用できる C# コードを記述できることです。

ビジネス ロジック、データベースの使用状況、ネットワーク アクセス、およびその他の一般的な機能を 1 回記述し、それを各プラットフォームで再利用することで、ネイティブ アプリケーションのように表示および実行されるプラットフォーム固有のユーザー インターフェイスの基盤を提供できます。

統合開発環境 (IDE) の可用性

Xamarin 開発は、Mac でも Windows でも Visual Studio を使用して行うことができます。 選択する IDE は、対象とするプラットフォームによって決まります。

Windows アプリは Windows でのみ開発できるため、iOS、Android、"および" Windows 用にビルドするには、Visual Studio for Windows が必要です。 ただし、Windows コンピューターと Mac コンピューター間でプロジェクトとファイルを共有することは可能なので、iOS アプリと Android アプリを Mac 上に構築し、後で共有コードを Windows プロジェクトに追加することができます。

各プラットフォームの開発要件については、要件ガイドで詳しく説明します。

iOS

iOS アプリケーションを開発するには、macOS が実行されている Mac コンピューターが必要です。 Visual Studio を使用して、Visual Studio で Xamarin を使用して iOS アプリケーションを作成およびデプロイすることもできます。 ただし、Mac は、ビルドとライセンスの目的で引き続き必要です。

テスト用のコンパイラとシミュレーターを提供するには、Apple の Xcode IDE をインストールする必要があります。 テストは自分のデバイスで無料で実行できますが、配布 (たとえば App Store) 用のアプリケーションを構築するには、Apple の開発者プログラムに参加する必要があります (年間 99 米国ドル)。 アプリケーションを提出または更新するたびに、Apple による確認と承認が必要で、お客様がダウンロードできるようになるのはその後です。

コードは Visual Studio IDE で記述され、画面レイアウトはプログラムによってビルドすることも、Mac 上で Xcode を使用して編集することもできます。

設定手順の詳細については、Xamarin.iOS インストール ガイドを参照してください。

Android

Android アプリケーション開発では、Java SDK と Android SDK をインストールする必要があります。 SDK には、ビルド、デプロイ、テストに必要なコンパイラ、エミュレーター、およびその他のツールが用意されています。 Java、Google の Android SDK、Xamarin のツールはすべて、Windows と macOS にインストールして実行できます。 推奨される構成は次のとおりです。

  • Visual Studio 2019 を含む Windows 10
  • Visual Studio 2019 for Mac を含む macOS Mojave (10.11 以降)

Xamarin には、必要な Java、Android、Xamarin ツール (画面レイアウト用のビジュアル デザイナーを含む) を使用してシステムを構成する、統合インストーラーが用意されています。 詳細な手順については、Xamarin.Android インストール ガイドを参照してください。

Google のライセンスがなくても、実際のデバイスでアプリケーションをビルドしてテストできますが、ストア (Google Play、Amazon、Barnes & Noble など) を通じてアプリケーションを配布するには、運営会社に登録料金を支払う場合があります。 Google Play ではすぐにアプリが公開されますが、他のストアには Apple と同様の承認プロセスがあります。

Windows

Windows アプリ (WinForms、WPF、または UWP) は、Visual Studio を使用してビルドされます。 Xamarin が直接使用されることはありません。 ただし、C# コードは Windows、iOS、Android で共有できます。 Windows 開発に必要なツールについては、Microsoft のデベロッパー センターを参照してください。

ユーザー インターフェイス (UI) の作成

Xamarin を使用する主なメリットは、アプリケーション ユーザー インターフェイスで各プラットフォームのネイティブ コントロールが使用され、Objective-C または Java で (iOS または Android それぞれに対して) 記述されたアプリケーションと見分けがつかないアプリが作成されることです。

アプリで画面を構築する場合、コードでコントロールをレイアウトするか、各プラットフォームで使用できるデザイン ツールを使用して完全な画面を作成できます。

プログラムでコントロールを作成する

各プラットフォームで、コードを使用して、ユーザー インターフェイス コントロールを画面に追加できます。 この処理に時間がかかる場合があるのは、コントロールの位置とサイズのピクセル座標をハードコーディングするとき、完成したデザインを視覚化するのが難しいためです。

しかし、特に iOS で iPhone と iPad のビューを構築するとき、そのサイズ変更やレンダリングがそれぞれの画面サイズに応じて異なる方法で行われる場合は、プログラムでコントロールを作成することにメリットがあります。

ビジュアル デザイナー

画面を視覚的にレイアウトする方法は、プラットフォームごとに異なります。

  • iOS – ストーリーボードには複数のビューとコントロールが含まれており、プロジェクトに含まれる .Storyboard ファイルでアクセスできます。
  • Android – Xamarin には、Visual Studio 用の Android ドラッグ アンド ドロップ UI デザイナーが用意されています。
  • Windows – Microsoft は、Visual Studio と Blend で、ドラッグ アンド ドロップ UI デザイナーを提供しています。 画面レイアウトは .XAML ファイル として保存されます。

次のスクリーンショットは、各プラットフォームで使用可能なビジュアル画面デザイナーを示しています。

These screenshots show the visual screen designers available on each platform

いずれの場合も、視覚的に作成した要素はコードで参照することができます。

ユーザー インターフェイスに関する考慮事項

Xamarin を使用してクロス プラットフォーム アプリケーションを構築する主なメリットは、ネイティブ UI ツールキットを利用して、使い慣れたインターフェイスをユーザーに提示できることです。 UI は、他のネイティブ アプリケーションと同じくらい高速に動作します。

UI メタファーの中には複数のプラットフォームで動作するものがあり、たとえば、3 つすべてのプラットフォームで同様のスクロール リスト コントロールが使用されていますが、アプリケーションの "操作感" を適切なものにするために、UI は必要に応じて、プラットフォーム固有のユーザー インターフェイス要素を利用する必要があります。 プラットフォーム固有の UI メタファーの例は次のとおりです。

  • iOS - ソフトバック ボタン、画面の下部にあるタブを使用した階層ナビゲーション。
  • Android – ハードウェア/システム ソフトウェアの戻るボタン、アクション メニュー、画面上部のタブ。
  • Windows – Windows アプリは、デスクトップ、タブレット (Microsoft Surface など)、電話で実行できます。 たとえば、Windows 10 デバイスには、ハードウェアの戻るボタンとライブ タイルが含まれる場合があります。

対象となるプラットフォームに関連するデザインのガイドラインを読んでおくことをお勧めします。

ライブラリとコードの再利用

Xamarin プラットフォームを使用すると、すべてのプラットフォームで既存の C# コードを再利用し、プラットフォームごとにネイティブに記述されたライブラリを統合できます。

C# ソースとライブラリ

Xamarin 製品では C# と .NET Framework が使用されるため、既存のソース コード (オープンソースと社内プロジェクトの両方) の多くを Xamarin.iOS または Xamarin.Android プロジェクトで再利用できます。 多くの場合、ソースは Xamarin ソリューションに追加するだけですぐに機能します。 サポートされていない .NET Framework 機能が使用されている場合は、調整が必要になることがあります。

Xamarin.iOS または Xamarin.Android で使用できる C# ソースの例には、SQLite-NET、NewtonSoft.JSON、SharpZipLib などがあります。

Objective-C バインド + バインド プロジェクト

Xamarin には、Objective-C ライブラリを Xamarin.iOS プロジェクトで使用できるようにするバインドの作成に役立つ btouch というツールが用意されています。 これを行う方法の詳細については、Objective-C 型のバインドに関するドキュメントを参照してください。

Xamarin.iOS で使用できる Objective-C ライブラリの例には、RedLaser バーコード スキャン、Google Analytics、PayPal の統合などがあります。 オープンソースの Xamarin.iOS バインドは、GitHub で入手できます。

.jar バインド + バインド プロジェクト

Xamarin では、Xamarin.Android の既存の Java ライブラリの使用がサポートされています。 Xamarin.Android の .JAR ファイル使用する方法の詳細については、Java ライブラリのバインドに関するドキュメントを参照してください。

オープンソースの Xamarin.Android バインドは、GitHub で入手できます。

PInvoke 経由の C

"プラットフォーム呼び出し" テクノロジ (P/Invoke) を使用すると、マネージド コード (C#) でネイティブ ライブラリ内のメソッドを呼び出すことができます。また、ネイティブ ライブラリからマネージド コードへのコールバックもサポートされています。

たとえば、SQLite-NET ライブラリでは次のようなステートメントが使用されます。

[DllImport("sqlite3", EntryPoint = "sqlite3_open", CallingConvention=CallingConvention.Cdecl)]
public static extern Result Open (string filename, out IntPtr db);

これは、iOS および Android のネイティブ C 言語 SQLite 実装にバインドされます。 既存の C API に慣れている開発者は、一連の C# クラスを構築してネイティブ API にマップし、既存のプラットフォーム コードを利用することができます。 Xamarin.iOS でネイティブ ライブラリをリンクするためのドキュメントがあり、同様の原則が Xamarin.Android に適用されます。

CppSharp 経由の C++

Miguel は自身のブログで CXXI (現在は CppSharp と呼ばれています) について説明しています。 C++ ライブラリに直接バインドする代わりに、C ラッパーを作成し、P/Invoke を使用してバインドする方法もあります。