.NET MAUI for .NET 8 の新機能
.NET 8 の .NET MAUI では、品質を重視しています。 .NET 8 では、689 件の問題を終了した 1618 個のプル要求がマージされました。 これには、.NET MAUI チームと .NET MAUI コミュニティからの変更が含まれます。 これらの変更により、.NET 8 の品質が大幅に向上します。
重要
Xcode や Android SDK Tools などの基になる外部依存関係を操作するため、.NET Multi-platform App UI (.NET MAUI) サポート ポリシーは、.NET および .NET Core サポート ポリシー とは異なります。 詳細については、「.NET MAUI のサポート ポリシー」をご覧ください。
.NET 8 では、.NET MAUI は .NET ワークロードおよび複数の NuGet パッケージとして出荷されます。 このアプローチの利点は、プロジェクトを特定のバージョンに簡単にピン留めできる一方で、リリースされていないビルドや試験的なビルドを簡単にプレビューできるようにすることです。 新しい .NET MAUI プロジェクトを作成すると、必要な NuGet パッケージがプロジェクトに自動的に追加されます。
この記事では、.NET MAUI for .NET 8 の新機能を一覧で説明し、各項目のより詳細な情報へのリンクを示します。
.NET 8 の新機能については、「.NET 8 の新機能」をご覧ください。
新しい機能
このリリースの .NET MAUI の焦点は品質ですが、アプリで新しいシナリオを可能にする新しい機能もあります。
コントロール
- テキスト入力をサポートするコントロールは、ソフト入力キーボードの表示と非表示をサポートする拡張メソッドが追加されました。 詳細については、「ソフト入力キーボードの表示と非表示」をご覧ください。
- ContentPage クラスには HideSoftInputOnTapped プロパティが追加されました。これは、ページ上の任意の場所をタップすると、ソフト入力キーボードが表示されている場合、非表示になるかどうかを示します。 詳細については、「ContentPag」をご覧ください。
- BlazorWebView には、StartPath プロパティ、TryDispatchAsync メソッド、強化されたログ機能をなどが追加されました。 詳細については、「BlazorWebView を使用して .NET MAUI アプリで Blazor Web アプリをホストする」をご覧ください。
- WebView には UserAgent プロパティが追加されました。 詳細については、「WebView」をご覧ください。
- 自動再生やピクチャー イン ピクチャーを含む HTML5 ビデオのインライン メディア再生は、iOS の WebView でデフォルトで有効になっています。 詳細については、「iOS および Mac Catalyst でメディアの再生設定を設定する」をご覧ください。
- 5 つの引数を受け取る
Grid.Add
オーバーロードが .NET MAUI に追加されました。 ただし、このメソッドは非推奨であり、Xamarin.Forms からの移行を支援するためにのみ存在します。 - Grid には、指定した行と列のスパンを持つ指定した行と列にある Grid にビューを追加する AddWithSpan 拡張メソッドが追加されました。
デスクトップ
- メニュー バーの項目とコンテキスト メニュー項目は、キーボード アクセラレータと呼ばれるキーボード ショートカットを使用して呼び出すことができます。 詳細については、「キーボード アクセラレータ」をご覧ください。
- Windows アプリは、パッケージ化されていないアプリとして公開できます。 詳細については、「CLI を使用して Windows 用のパッケージ化されていない .NET MAUI アプリを公開する」をご覧ください。
ジェスチャ認識エンジン
- PointerGestureRecognizer には、PointerPressedCommand、PointerPressedCommandParameter、PointerReleasedCommand、PointerReleasedCommandParameter のプロパティと、PointerPressed、PointerReleased のイベントが加わります。 詳細については、「ポインター ジェスチャを認識する」をご覧ください。
- PointerGestureRecognizer クラスによって発生するポインター イベントに付随する PointerEventArgs オブジェクトには、PlatformPointerEventArgs 型の PlatformArgs プロパティが追加されました。 このプロパティは、ポインター ジェスチャ イベントのプラットフォーム固有の引数へのアクセスを提供します。 詳細については、「ポインター ジェスチャを認識する」をご覧ください。
- 公開するドラッグ アンド ドロップ ジェスチャ イベントに付随する DragStartingEventArgs、DragEventArgs、DropEventArgs、DropCompletedEventArgs のオブジェクトにはそれぞれ
PlatformArgs
プロパティが追加されました。 このプロパティは、ドラッグ アンド ドロップ イベントのプラットフォーム固有の引数へのアクセスを提供します。 詳細については、「ドラッグ アンド ドロップ ジェスチャを認識する」をご覧ください。 - ドラッグ または ドロップ ジェスチャが発生した位置は、GetPosition メソッドを DragEventArgs、DragStartingEventArgs または DropEventArgs オブジェクトで呼び出すことによって取得できます。 詳細については、「ドラッグ アンド ドロップ ジェスチャを認識する」をご覧ください。
- TapGestureRecognizer クラスには、Android でセカンダリ タップを処理する機能が追加されました。 詳細については、「タップ ジェスチャを認識する」をご覧ください。
ナビゲーション
- シェル ナビゲーションは、使い捨てナビゲーション データを渡すことができる GoToAsync オーバーロードを取得します。このデータは、ナビゲーションが発生した後に ShellNavigationQueryParameters オブジェクトとしてクリアされます。 詳細については、「使い捨てオブジェクト ベースのナビゲーション データを渡す」をご覧ください。
プラットフォームの統合
- Geolocation クラスは、アプリがフォアグラウンドにあるときに場所の変更をリッスンできます。 詳細については、「場所の変更のリッスン」をご覧ください。
- Flashlight は、デバイスで懐中電灯が使用可能かどうかを判断する IsSupportedAsync メソッドを取得します。 詳細については、「懐中電灯」をご覧ください。
- SensorSpeed の間隔は、すべてのプラットフォームで統一されています。 詳細については、「デバイス センサーへのアクセス」をご覧ください。
- Permissions クラスは、Permissions.Bluetooth アクセス許可を取得します。これは、Bluetooth デバイスを検索し、現在のデバイスを他の Bluetooth デバイスで検出し、既にペアリングされている Bluetooth デバイスと通信するための Android 12 アクセス許可です。 詳細については、「 アクセス許可」を参照してください。
- Permissions クラスは、Permissions.NearbyWifiDevices アクセス許可を取得します。これは、近くの WiFi デバイスにアクセスするための Android 13 アクセス許可です。 詳細については、「 アクセス許可」を参照してください。
XAML
x:ClassModifier
属性を XAML クラスに指定して、アセンブリ内の生成されたクラスのアクセス レベルを制御できます。 詳細については、「クラス修飾子」をご覧ください。- ResourceDictionary で定義されているリソースは、
DynamicResource
マークアップ拡張機能を使用してAppThemeBinding
で使用することもできます。 詳細については、「テーマ リソースの定義と使用」をご覧ください。 - Color は SolidColorBrush クラスの
ContentProperty
であるため、XAML から明示的に設定する必要はありません。
トラブルシューティング
- トラブルシューティングの目的で、リソースの生成を無効にすることができます。 詳細については、「イメージのパッケージ化を無効にする」、「スプラッシュ スクリーンのパッケージ化を無効にする」、「フォントのパッケージ化を無効にする」、「アセット ファイルのパッケージ化を無効にする」をご覧ください。
- トラブルシューティングの目的で、空のスプラッシュ スクリーンを生成できます。 詳細については、「空のスプラッシュ スクリーンを生成する」をご覧ください。
- Resizeter は重複したイメージ ファイル名をチェックします。 詳細については、「画像ファイル名の重複エラー」をご覧ください。
その他
- ウィンドウ管理は、
App
クラスから切り離すことができます。 詳細については、「App クラスからウィンドウ管理を切り離す」をご覧ください。 - Android アプリでは、いくつかのシステム フォントを簡単に使用できます。 詳細については、「フォントの使用」をご覧ください。
- iOS では、
MauiUIApplicationDelegate
はiOSLifecycle.PerformFetch
デリゲートを介してオーバーライドまたは使用できるPerformFetch
メソッドを取得します。 詳細については、iOS および Mac Catalyst プラットフォームのライフサイクル イベントに関するページを参照してください。
型の非推奨と削除
次の型またはメンバーは非推奨になりました。
- ClickGestureRecognizer は非推奨となりました。
AutomationProperties.Name
、AutomationProperties.HelpText
、AutomationProperties.LabeledBy
添付プロパティは非推奨になりました。- FocusChangeRequested は非推奨になりました。 代わりに、Focus() メソッドを使用してビューにフォーカスを設定します。
次の型またはメンバーは削除されました。
Application.Properties
プロパティとApplication.SavePropertiesAsync
メソッドは削除されました。 アプリのプロパティ データを .NET MAUI に移行するには、「Xamarin.Forms アプリのプロパティ ディクショナリから .NET MAUI 基本設定にデータを移行する」をご覧ください。PhoneDialer.Current
プロパティは削除されました。 代わりにPhoneDialer.Default
を使用してくださいOpenGLView
は削除されました。
動作の変更
次の動作が以前のリリースから変更されました。
- XAML から Map コントロールを使用するには、次の
xmlns
名前空間の宣言xmlns:maps="http://schemas.microsoft.com/dotnet/2021/maui/maps"
が必要になりました。 ImageSource.FromStream
メソッドを使用してストリームからイメージを読み込むときに、Android でイメージ キャッシュが無効になります。 これは、適切なキャッシュ キーを作成するデータがないためです。- iOS では、ソフト入力キーボードがテキスト入力フィールドをカバーする場合、ページが自動的にスクロールされて、フィールドがソフト入力キーボードの上に配置されます。 この既定の動作は、
Microsoft.Maui.Platform
名前空間内のKeyboardAutoManagerScroll.Disconnect
メソッドを呼び出すことで無効にすることができます。 無効にした後、KeyboardAutoManagerScroll.Connect
メソッドを呼び出すと、動作をもう一度有効にすることができます。 - シェル アプリでタブの色を設定する方法は、一部のプラットフォームで変更されています。 詳細については、「タブの外観」をご覧ください。
- アプリのプロジェクト ファイルで
$(ApplicationIdGuid)
ビルド プロパティの値を指定する必要はありません。 これは、.NET MAUI Windows アプリでは、アプリ ID として GUID が不要になり、代わりに$(ApplicationId)
ビルド プロパティの値をアプリ ID として使用するためです。 そのため、com.mycompany.myapp など、すべてのプラットフォームで同じ逆ドメイン形式のアプリ ID が使用されるようになりました。 - .NET MAUI Mac Catalyst アプリは、メニュー バーのメニュー項目が 50 個に制限されなくなりました。
W2DImageLoadingService
クラスが使用される代わりに、Microsoft.Maui.Graphics
名前空間内のPlatformImage.FromStream
メソッドが使用され、Windows に画像を読み込むようになりました。- Android では、アニメーションはシステム アニメーションの設定が考慮されます。 詳細については、「基本アニメーション」を参照してください。
パフォーマンス
.NET MAUI 8 には多くのパフォーマンスの変更があります。 これらの変更は、次の 5 つの領域に分類できます。
- 新機能
- ビルドと内部ループのパフォーマンス
- パフォーマンスまたはアプリ サイズの向上
- .NET MAUI の構造体と
IEquatable
{AppThemeBinding}
のパフォーマンスの問題を修正- パフォーマンスのために
CA1307
とCA1309
に対応 - パフォーマンスのために
CA1311
に対応 - Android で未使用の
ViewAttachedToWindow
イベントを削除 {Binding}
の不要なSystem.Reflection
を削除StringComparer.Ordinal
をDictionary
とHashSet
に使用- Android の
MauiDrawable
で Java 相互運用を減らす - Android での
Label
のレイアウト パフォーマンスの向上 - .NET MAUI でコントロールの Java 相互運用呼び出しを減らす
- Android での
Entry.MaxLength
のパフォーマンスの向上 - Windows での
CollectionView
のメモリ使用量の向上 - Apple プラットフォームでの
UnmanagedCallersOnlyAttribute
の使用 - Android での文字列の Java 相互運用の高速化
- Android での C# イベントの Java 相互運用の高速化
- JNI の関数ポインターを使用
Xamarin.AndroidX.Legacy.Support.V4
を削除- iOS および macOS でのジェネリックの重複除去
- iOS に似たプラットフォームでの
System.Linq.Expressions
実装の修正 - iOS と Catalyst 用の
DynamicCodeSupport=false
の設定
- .NET MAUI の構造体と
- メモリ リーク
- ツールとドキュメント
詳細については、「.NET 8 の .NET MAUI 関連のパフォーマンスの向上」をご覧ください。
.NET 7 から .NET 8 へのアップグレード
.NET 7 から .NET 8 にプロジェクトをアップグレードするには、Visual Studio 17.8 以降、またはスタンドアロン インストーラーと dotnet workload install maui
コマンドを使用して、.NET 8 と .NET MAUI ワークロードをインストールします。
次に、.csproj ファイルを開き、ターゲット フレームワーク モニカー (TFM) を 7 から 8 に変更します。 net7.0-ios13.6
などの TFM を使用している場合は、プラットフォームのバージョンを必ず一致させるか、完全に削除してください。 次の例は、.NET 7 プロジェクトの TFM を示しています。
<TargetFrameworks>net7.0-android;net7.0-ios;net7.0-maccatalyst;net7.0-tizen</TargetFrameworks>
<TargetFrameworks Condition="$([MSBuild]::IsOSPlatform('windows'))">$(TargetFrameworks);net7.0-windows10.0.19041.0</TargetFrameworks>
次の例は、.NET 8 プロジェクトの TFM を示しています。
<TargetFrameworks>net8.0-android;net8.0-ios;net8.0-maccatalyst;net8.0-tizen</TargetFrameworks>
<TargetFrameworks Condition="$([MSBuild]::IsOSPlatform('windows'))">$(TargetFrameworks);net8.0-windows10.0.19041.0</TargetFrameworks>
明示的なパッケージ参照は、次の .NET MAUI NuGet パッケージの .csproj ファイルにも追加する必要があります。
<ItemGroup>
<PackageReference Include="Microsoft.Maui.Controls" Version="$(MauiVersion)" />
<PackageReference Include="Microsoft.Maui.Controls.Compatibility" Version="$(MauiVersion)" />
</ItemGroup>
$(MauiVersion)
変数がインストールした .NET MAUI のバージョンから参照されます。 これをオーバーライドするには、$(MauiVersion)
ビルド プロパティを .csproj ファイルに追加します。
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>net8.0-android;net8.0-ios;net8.0-maccatalyst</TargetFrameworks>
<UseMaui>True</UseMaui>
<MauiVersion>8.0.3</MauiVersion>
</PropertyGroup>
</Project>
これは、夜間フィードからアドホック ビルドを使用する場合や、プル リクエストからダウンロードしたビルドを使用する場合に便利です。
さらに、.NET 8 の .csproj ファイルから $(ApplicationIdGuid)
ビルド プロパティを削除することもできます。 詳細については、「動作変更」を参照してください。
アップグレードしたアプリを初めてビルドする前に、bin
フォルダーと obj
フォルダーを削除してください。
Note
.NET 8 の .NET MAUI アプリのプロジェクト テンプレートでは、$(Nullable)
ビルド プロパティを使用してプロジェクトの null 許容コンテキストを有効にします。 詳細については、「Nullable」をご覧ください。
関連項目
.NET MAUI