第 1 章の概要。 Xamarin.Forms はどのように適合するか

Download Sampleサンプルのダウンロード

Note

この本は 2016 年春に発行されて以降、改訂されていません。 多くの情報はまだ価値がありますが、一部の資料は古くなっており、トピックの中にはまったく正しくないものまたは不完全なものもあります。

プログラミングにおいて最も好ましくないジョブの 1 つは、特にプラットフォームで異なるプログラミング言語を使用する場合に、プラットフォーム間でコード ベースを移植することです。 また、コードを移植する際にリファクタリングしがちですが、両方のプラットフォームを並列して維持する必要がある場合、2 つのコード ベースに違いがあると、将来のメンテナンスがより困難になります。

クロス プラットフォームのモバイル開発

この問題は、モバイル プラットフォームをターゲットとする場合によく見られます。 現在、2 つの主要なモバイル プラットフォームである、iOS オペレーティング システムを実行する iPhone と iPad の Apple ファミリ、およびさまざまな携帯電話やタブレットで実行される Android オペレーティング システムが存在します。 もう 1 つの重要なプラットフォームは、Microsoft のユニバーサル Windows プラットフォーム (UWP) です。これにより、単一プログラムで両方の Windows 10 をターゲットとすることができます。

これらのプラットフォームをターゲットとするソフトウェア ベンダーは、異なるユーザー インターフェイス パラダイム、3 つの異なる開発環境、3 つの異なるプログラミング インターフェイスに加えて、おそらく最も厄介な 3 つの異なるプログラミング言語 (iPhone と iPad 用の Objective-C、Android 用の Java、Windows 用の C#) に対処する必要があります。

C# および .NET ソリューション

Objective-C、Java、および C# はすべて C プログラミング言語から派生したものですが、これらはまったく異なる経路で進化しています。 C# はこれらの言語の最新のものであり、非常に有効な方法で成熟しています。 さらに、C# は、.NET と呼ばれるプログラミング インフラストラクチャ全体と密接に関連しています。これにより、数値演算、デバッグ、リフレクション、コレクション、グローバリゼーション、ファイル I/O、ネットワーク、セキュリティ、スレッド処理、Web サービス、データ処理、XML および JSON の読み取りと書き込みがサポートされます。

Xamarin では、現在、C# と .NET を使用するネイティブの Mac、iOS、および Android API をターゲットとするツールが提供されています。 これらのツールは、Xamarin.Mac、Xamarin.iOS、および Xamarin.Android と呼ばれ、Xamarin プラットフォームと総称されます。 これらは、こうしたプラットフォームのネイティブ API を .NET イディオムで表現するライブラリおよびバインディングです。

開発者は、Xamarin プラットフォームを使用して、Mac、iOS、または Android をターゲットとするアプリケーションを C# で作成できます。 しかし、複数のプラットフォームをターゲットとする場合は、コードの一部をターゲット プラットフォーム間で共有するのが非常に賢明です。 これには、プラットフォームに依存するコード (通常はユーザー インターフェイスを含む) と、プラットフォームに依存しないコード (通常は基本 .NET Framework のみが必要) へのプログラムの分離が含まれます。 このプラットフォームに依存しないコードは、ポータブル クラス ライブラリ (PCL)、または共有プロジェクト (多くの場合、共有アセット プロジェクト、つまり、SAP と呼ばれる) に配置することができます。

Note

ポータブル クラス ライブラリは、.NET Standard ライブラリに置き換えられています。 本のすべてのサンプル コードは、.NET Standard ライブラリを使用するように変換されています。

Xamarin.Forms の概要

複数のモバイル プラットフォームをターゲットとする場合、Xamarin.Forms ではさらに多くのコード共有を行うことができます。 Xamarin.Forms 用に作成された単一プログラムでは、これらのプラットフォームをターゲットにすることができます。

  • iPhone、iPad、iPod touch で実行されるプログラム用の iOS
  • Android フォンとタブレットで実行されるプログラム用の Android
  • Windows 10 をターゲットとするユニバーサル Windows プラットフォーム

Note

Xamarin.Forms では Windows 8.1、Windows Phone 8.1、Windows 10 Mobile がサポートされなくなりましたが、Xamarin.Forms アプリケーションは Windows 10 デスクトップで実行されます。 MacWPFGTK #、および Tizen プラットフォーム用のプレビュー サポートもあります。

Xamarin.Forms プログラムの大部分は、ライブラリまたは SAP に存在します。 各プラットフォームは、この共有コードを呼び出す小さなアプリケーション スタブで構成されています。

Xamarin.Forms API は各プラットフォーム上のネイティブ コントロールにマップされるため、各プラットフォームでその特性のルック アンド フィールが維持されます。

Triple screenshot of platform visuals sharing

スクリーンショットの左から右に、iPhone と Android フォンが示されています。

各画面のページには、テキストを表示するための Xamarin.FormsLabel、アクションを開始するための Button、オン/オフの値を選択するための Switch、連続する範囲内の値を指定するための Slider が含まれています。 これら 4 つのビューはすべて、ContentPage上の StackLayout の子です。

また、このページには、複数の ToolbarItem オブジェクトで構成される Xamarin.Forms ツールバーがアタッチされています。 これらは、iOS および Android 画面の上部と、Windows 10 Mobile 画面の下部にアイコンとして表示されます。

また、Xamarin.Forms では、複数のアプリケーション プラットフォーム用に Microsoft で開発された XAML (Extensible Application Markup Language) がサポートされています。 上に示されたプログラムのすべてのビジュアルは、PlatformVisuals サンプルに示されているように、XAML で定義されています。

Xamarin.Forms プログラムでは、実行されているプラットフォームを特定し、それに応じて別のコードを実行することができます。 開発者は、より効果的に、さまざまなプラットフォーム用のカスタム コードを作成し、そのコードをプラットフォームに依存しない方法で Xamarin.Forms プログラムから実行することができます。 また、開発者は、プラットフォームごとにレンダラーを記述して、追加のコントロールを作成することができます。

Xamarin.Forms は、基幹業務アプリケーション、プロトタイプ作成、または簡単な概念実証デモを行うための優れたソリューションですが、ベクター グラフィックスや複雑なタッチ操作を必要とするアプリケーションには最適ではありません。

開発環境

開発環境は、ターゲットとするプラットフォームと使用するマシンによって異なります。

iOS をターゲットとする場合は、Xcode と Xamarin プラットフォームがインストールされた Mac が必要になります。 また、Android をサポートするには、Java および必要な SDK のインストールが必要です。 その後、Visual Studio for Mac を使用して、iOS と Android の両方をターゲットにすることができます。

Visual Studio をインストールすると、PC で iOS、Android、およびすべての Windows プラットフォームをターゲットにすることができます。 しかし、Visual Studio から iOS をターゲットとする場合は、引き続き、Xcode と Xamarin プラットフォームがインストールされた Mac が必要です。

USB でコンピューターに接続されている実際のデバイス、またはシミュレーターでプログラムをテストすることができます。

インストール

Xamarin.Forms アプリケーションを作成してビルドする前に、ターゲットとするプラットフォームと開発環境に応じて、iOS アプリケーション、Android アプリケーション、および UWP アプリケーションを個別に作成してビルドしてみる必要があります。

Xamarin および Microsoft Web サイトには、この方法についての情報が含まれています。

これらの個々のプラットフォーム用にプロジェクトを作成して実行できたら、Xamarin.Forms アプリケーションの作成と実行に問題はないはずです。