Xamarin.Forms の XAML ホット リロード
XAML ホット リロードは、生産性を向上させ、時間を節約するために既存のワークフローに接続します。 XAML ホット リロードを使用しない場合は、XAML の変更を確認するたびにアプリをビルドしてデプロイする必要があります。 ホット リロードでは、XAML ファイルを保存すると、変更が実行中のアプリに反映されます。 さらに、ナビゲーションの状態とデータが維持されるため、アプリ内の場所を失うことなく UI をすばやく反復処理できます。 したがって、XAML ホット リロードでは、アプリの再構築とデプロイに費やす時間を減らし、UI の変更を検証します。
注意
使用Xamarin.Formsしていないネイティブ UWP または WPF アプリを記述している場合は、UWP と WPF の XAML ホット リロードに関するページを参照してください。
システム要件
IDE/Framework | 最小バージョンが必要 |
---|---|
Visual Studio 2019 | 変更のみモードの場合は 16.9、フル ページ モードの場合は 16.4 |
Visual Studio 2019 for Mac | 変更のみモードの場合は 8.9、フル ページ モードの場合は 8.4 |
Xamarin.Forms | 5.0.0.2012 変更のみモードの場合。フル ページ モードの場合は 4.1 |
XAML ホット リロードを有効にするXamarin.Forms
テンプレートから開始する場合、XAML ホット リロードは既定でオンになり、プロジェクトは追加のセットアップなしで動作するように構成されます。 エミュレーターまたは物理デバイスで Android、iOS、または UWP アプリをデバッグし、XAML を変更して XAML ホット リロードをトリガーします。
既存Xamarin.Formsのソリューションから作業している場合、XAML ホット リロードを使用するために追加のインストールは必要ありませんが、最適なエクスペリエンスを確保するために構成を再確認する必要がある場合があります。 まず、IDE 設定で有効にします。
- Windows で、[ツール> オプションのデバッグ>] で [XAML ホット リロードを有効にする] チェック ボックス (および必要なプラットフォーム)をオンにします>ホット リロード。
- 以前のバージョンの Visual Studio 2019 では、このチェック ボックスは [ツール>オプション>Xamarin>ホット リロード にあります。
- Mac では、Visual Studio>Preferences> Tools for XamarinXAML ホット リロードの [Xamarin>ホット リロード を有効にする] チェック ボックスをオンにします。
- 以前のバージョンのVisual Studio for Macでは、このチェック ボックスは Visual Studio>Preferences>Projects>Xamarin ホット リロード にあります。
次に、Android と iOS のビルド設定で、リンカーが [リンクしない] または [リンクなし] に設定されていることを確認します。 物理 iOS デバイスで XAML ホット リロードを使用するには、Mono インタープリター (Visual Studio 16.4 以降) を有効にするか、追加の mtouch 引数 (Visual Studio 16.3 以降) に --interpreter を追加する必要もあります。
次のフローチャートを使用して、XAML ホット リロードで使用する既存のプロジェクトのセットアップを確認できます。
ホット リロード モード
XAML ホット リロードは、新しい変更のみモードと古いフル ページ モードの 2 つの異なるモードで動作できます。
Visual Studio 16.9 および Visual Studio for Mac 8.9 以降では、既定の動作は、5.0 以降を使用するすべてのアプリで使用Xamarin.Formsする変更モードのみです。 古いバージョンの Xamarin.Forms場合は、フル ページ モードが使用されます。 ただし、ホット リロード IDE 設定 (Windows のツール>オプション>デバッグ>ホット リロードまたは Visual Studio>Preferences>Tools for Xamarin>XAML ホット リロード on Mac) では、すべてのアプリに対してフル ページ モードを強制的に使用できます。
変更モードでのみ XAML が解析され、編集時に何が変更されたかが正確に確認され、それらの変更のみが実行中のアプリに送信されます。 これは、WPF と UWP ホット リロードで使用されるのと同じテクノロジです。 UI の状態は保持されます。完全なページの UI は再作成されないため、編集の影響を受けるコントロールの変更されたプロパティを更新するだけです。 変更のみモードでは、 ライブ ビジュアル ツリーの使用も有効になります。
既定では、変更のみのモードでは、変更を確認するためにファイルを保存する必要はありません。更新プログラムは入力時にすぐに適用されます。 ただし、この動作は、ファイルの保存時にのみ更新するように変更できます。 これは、ホット リロード IDE 設定のドキュメント保存で XAML ホット リロードを適用するチェック ボックス (現在は Windows でのみ使用できます) をオンにすることで実現できます。 ドキュメントの保存時に更新するだけで、より大きな XAML 更新を行い、完了するまで表示しない場合に役立つことがあります。
フル ページ モード では、編集と保存を行った後、実行中のアプリに完全な XAML ファイルが送信されます。 その後、実行中のアプリによってページが再読み込みされ、コントロールが再作成されます。UI の更新が表示されます。
変更のみモードはホット リロードの将来であり、可能な限り使用することをお勧めします。 高速で、UI の状態を維持し、 Live Visual Tree をサポートします。 フル ページ モードは、まだ 5.0 に更新されていないアプリに対して Xamarin.Forms 引き続き提供されます。
注意
モードを切り替える場合は、デバッグ セッションを再起動する必要があります。
XAML エラー
変更のみモード: XAML パーサーホット リロードが無効と見なす変更を行うと、エディターに下線が付いたエラーが表示され、エラー ウィンドウに含められます。 これらのホット リロードエラーには、"XHR" で始まるエラー コードがあります (XAML ホット リロードの場合)。 このようなエラーがページに存在する場合、ページの他の部分で行われた場合でも、ホット リロードは変更を適用しません。 ホット リロードがページの作業を再開するためのすべてのエラーを修正します。
フル ページ モード: XAML ホット リロードが再読み込みできない変更を行うと、エディターに下線が付いたエラーが表示され、エラー ウィンドウに含められます。 これらの変更は、失礼な編集と呼ばれ、XAML を誤読したり、存在しないイベント ハンドラーにコントロールを結び付けたりします。 失礼な編集でも、アプリを再起動せずに再読み込みを続行できます。XAML ファイル内の別の場所で別の変更を行い、保存をクリックします。 失礼な編集は再読み込みされませんが、他の変更は引き続き適用されます。
複数のプラットフォームで一度に再読み込みする
XAML ホット リロードでは、Visual Studio とVisual Studio for Macでの同時デバッグがサポートされています。 Android と iOS ターゲットを同時にデプロイして、変更が両方のプラットフォームに一度に反映されていることを確認できます。 複数のプラットフォームでデバッグするには、次を参照してください。
- Windowsの方法: 複数のスタートアップ プロジェクトを設定する
- Mac複数のスタートアップ プロジェクトを設定する
既知の制限事項
- Xamarin.Forms Android、iOS、UWP 以外のターゲット (macOS など) は現在サポートされていません。
- XAML コンパイルを無効にする [XamlCompilation(XamlCompilationOptions.Skip)]の使用はサポートされておらず、ライブ ビジュアル ツリーに問題が発生する可能性があります。
- XAML ホット リロード セッション中は、ファイルまたは NuGet パッケージを追加、削除、または名前変更することはできません。 ファイルまたは NuGet パッケージを追加または削除する場合は、XAML ホット リロードを引き続き使用するようにアプリを再構築して再デプロイします。
- 最適なエクスペリエンスを得るために、リンカーを [リンクしない ] または [ リンクなし] に設定します。 Link SDK の設定はほとんどの場合のみ機能しますが、場合によっては失敗する可能性があります。 リンカーの設定は、Android と iOS のビルド オプションにあります。
- 物理 iPhone でのデバッグでは、インタープリターが XAML ホット リロードを使用する必要があります。 これを行うには、プロジェクト設定を開き、[iOS ビルド] タブを選択し、[ Mono インタープリター設定を有効にする] が有効になっていることを確認します。 プロパティ ページの上部にある [プラットフォーム ] オプションを iPhone に変更する必要がある場合があります。
- XAML ホット リロードでは、イベント ハンドラー、カスタム コントロール、ページ 分離コード、その他のクラスなど、C# コードを再読み込みできません。
トラブルシューティング
- XAML ホット リロード出力を表示してステータス メッセージを表示します。これは、トラブルシューティングに役立ちます。
- Windows: [出力の表示] で [出力の表示>] を表示し、[Show output from: at the top]\(出力の表示\) で Xamarin ホット リロード を選択します。
- Mac: ステータス バーの XAML ホット リロードにカーソルを合わせると、そのパッドが表示されます
- XAML ホット リロードが初期化に失敗した場合:
- バージョンを更新します Xamarin.Forms 。
- 最新バージョンの IDE を使用していることを確認します。
- プロジェクトのビルド設定で、Android または iOS リンカーの設定を [リンクしない ] に設定します。
- XAML ファイルの保存時に何も発生しない場合は、IDE で XAML ホット リロードが有効になっていることを確認します。
- 物理 iPhone でデバッグしていて、アプリが応答しなくなった場合は、インタープリターが有効になっていることを確認します。 有効にするには、iOS ビルド設定で Mono インタープリター (Visual Studio 16.4/8.4 以降) を有効にするか、 または --インタープリター を 追加 mtouch 引数 フィールド (Visual Studio 16.3/8.3 以前) に追加します。
バグを報告するには、Windows で問題を報告するヘルプ>を送信>する方法と、Mac で問題を報告するヘルプ>を使用します。