.NET 8 の .NET MAUI の焦点は品質です。 .NET 8 では、689 件の問題を終了した 1618 個のプル要求がマージされました。 これには、.NET MAUI チームと .NET MAUI コミュニティからの変更が含まれます。 これらの変更により、.NET 8 の品質が大幅に向上します。
Von Bedeutung
Xcode や Android SDK Tools などの基になる外部依存関係を操作するため、.NET マルチプラットフォーム アプリ 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 プロパティを取得します。これは、ページ上の任意の場所をタップすると、ソフト入力キーボードが表示されている場合に非表示になるかどうかを示します。 詳細については、「 ContentPage」を参照してください。
- BlazorWebView は、 StartPath プロパティ、 TryDispatchAsync メソッド、および強化されたログ機能を取得します。 詳細については、「 BlazorWebView を使用して .NET MAUI アプリで Blazor Web アプリをホストする」を参照してください。
- WebView は、 UserAgent プロパティを取得します。 詳細については、 WebView を参照してください。
- iOS の WebView では、HTML5 ビデオのインライン メディア再生 (自動再生や画像の画像を含む) が既定で有効になっています。 詳細については、「 iOS および Mac Catalyst でメディアの再生設定を設定する」を参照してください。
- 5 つの引数を受け取る
Grid.Add
オーバーロードが .NET MAUI に追加されました。 ただし、このメソッドは非推奨であり、Xamarin.Forms からの移行を支援するためにのみ存在します。 - Grid では、 AddWithSpan 拡張メソッドを使用して、指定した行と列のスパンを持つ指定した行と列の Grid にビューを追加します。
デスクトップ
- メニュー バーの項目とコンテキスト メニュー項目は、キーボード アクセラレータと呼ばれるキーボード ショートカットを使用して呼び出すことができます。 詳細については、「 キーボード アクセラレータ」を参照してください。
- Windows アプリは、パッケージ化されていないアプリとして発行できます。 詳細については、「 CLI を使用して Windows 用にパッケージ化されていない .NET MAUI アプリを発行する」を参照してください。
ジェスチャ認識エンジン
- PointerGestureRecognizer は、 PointerPressedCommand、 PointerPressedCommandParameter、 PointerReleasedCommand、 PointerReleasedCommandParameter プロパティ、および PointerPressed イベントと PointerReleased イベントを取得します。 詳細については、「 ポインター ジェスチャを認識する」を参照してください。
- PointerGestureRecognizer クラスによって発生するポインター イベントに付随するPointerEventArgs オブジェクトは、PlatformPointerEventArgs型のPlatformArgsプロパティを取得します。 このプロパティは、ポインター ジェスチャ イベントのプラットフォーム固有の引数へのアクセスを提供します。 詳細については、「 ポインター ジェスチャを認識する」を参照してください。
- ドラッグ アンド ドロップ ジェスチャ イベントに付随する DragStartingEventArgs、 DragEventArgs、 DropEventArgs、および DropCompletedEventArgs オブジェクトは、それぞれ
PlatformArgs
プロパティを取得します。 このプロパティは、ドラッグ アンド ドロップ イベントのプラットフォーム固有の引数へのアクセスを提供します。 詳細については、「 ドラッグ アンド ドロップ ジェスチャを認識する」を参照してください。 - ドラッグ アンド ドロップ ジェスチャが発生した位置は、DragEventArgs、DragStartingEventArgs、またはDropEventArgs オブジェクトで GetPosition メソッドを呼び出すことによって取得できます。 詳細については、「 ドラッグ アンド ドロップ ジェスチャを認識する」を参照してください。
- TapGestureRecognizer クラスは、Android でセカンダリ タップを処理する機能を取得します。 詳細については、「 タップ ジェスチャを認識する」を参照してください。
ナビゲーション
- シェル ナビゲーションは GoToAsync オーバーロードを取得します。これにより、単一の使用ナビゲーション データを渡すことができます。このオーバーロードは、ナビゲーションが発生した後に ShellNavigationQueryParameters オブジェクトとしてクリアされます。 詳細については、「 単一使用オブジェクト ベースのナビゲーション データを渡す」を参照してください。
プラットフォーム統合
- Geolocation クラスは、アプリがフォアグラウンドにあるときに場所の変更をリッスンできます。 詳細については、「 場所の変更をリッスンする」を参照してください。
- Flashlight は、デバイスで懐中電灯が使用可能かどうかを決定する IsSupportedAsync メソッドを取得します。 詳細については、「 懐中電灯」を参照してください。
- SensorSpeed 合は、すべてのプラットフォームで統一されています。 詳細については、「 デバイス センサーへのアクセス」を参照してください。
- Permissions クラスは、Permissions.Bluetoothアクセス許可を取得します。これは、Bluetoothデバイスを検索し、現在のデバイスを他のBluetoothデバイスで検出し、既にペアリングされているBluetooth デバイスと通信するための Android 12 アクセス許可です。 詳細については、「アクセス許可」を参照してください。
- Permissions クラスは、近くの WiFi デバイスにアクセスするための Android 13 アクセス許可であるPermissions.NearbyWifiDevicesアクセス許可を取得します。 詳細については、「アクセス許可」を参照してください。
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 では、ソフト入力キーボードがテキスト入力フィールドをカバーする場合にページが自動的にスクロールされ、フィールドがソフト入力キーボードの上に配置されます。 この既定の動作は、
KeyboardAutoManagerScroll.Disconnect
名前空間内のMicrosoft.Maui.Platform
メソッドを呼び出すことで無効にすることができます。 無効にした後、KeyboardAutoManagerScroll.Connect
メソッドを呼び出すと、動作をもう一度有効にすることができます。 - シェル アプリでタブの色を設定する方法は、一部のプラットフォームで変更されています。 詳細については、「タブの 外観」を参照してください。
- アプリのプロジェクト ファイルで
$(ApplicationIdGuid)
ビルド プロパティの値を指定する必要はありません。 これは、.NET MAUI Windows アプリでは、アプリ ID として GUID が不要になり、代わりに$(ApplicationId)
ビルド プロパティの値をアプリ ID として使用するためです。 そのため、com.mycompany.myapp など、すべてのプラットフォームで同じ逆ドメイン形式のアプリ ID が使用されるようになりました。 - .NET MAUI Mac Catalyst アプリは、メニュー バーのメニュー項目が 50 個に制限されなくなりました。
-
Microsoft.Maui.Graphics
名前空間のPlatformImage.FromStream
メソッドを使用して、W2DImageLoadingService
クラスを使用する必要なく、Windows にイメージを読み込むことができます。 - Android では、アニメーションはシステム アニメーションの設定を考慮します。 詳細については、「 基本アニメーション」を参照してください。
- 中央パッケージ管理 (CPM) が有効になっている場合、
<UseMaui>true</UseMaui>
プロジェクト プロパティに必要な NuGet パッケージが自動的に含まれるようになりました。
[パフォーマンス]
.NET MAUI 8 には多くのパフォーマンス変更があります。 これらの変更は、次の 5 つの領域に分類できます。
- 新機能
- ビルドと内部ループのパフォーマンス
- パフォーマンスまたはアプリ のサイズの向上
-
.NET MAUI の構造体と
IEquatable
-
でパフォーマンスの問題を修正する
{AppThemeBinding}
-
パフォーマンスの
CA1307
とCA1309
に対処する -
パフォーマンスの
CA1311
に対処する -
Android で未使用の
ViewAttachedToWindow
イベントを削除する -
不要な
System.Reflection
を削除する{Binding}
-
Dictionary
とStringComparer.Ordinal
を使用する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 MAUI での .NET 8 パフォーマンスの向上」を参照してください。
.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>
中央パッケージ管理 (CPM) を使用する場合、.NET MAUI パッケージは自動的に参照されなくなり、明示的に追加する必要があります。 アセット (MauiImage
、MauiAsset
など) のみを含むプロジェクトの場合は、(Microsoft.Maui.Controls
ではなく) Microsoft.Maui.Resizetizer
パッケージを追加するだけで十分です。
$(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>
これは、 夜間フィード からアドホック ビルドを使用する場合や、プル要求からダウンロードしたビルドを使用する場合に便利です。
さらに、 $(ApplicationIdGuid)
ビルド プロパティは、.NET 8 の .csproj ファイルから削除できます。 詳細については、「動作の 変更」を参照してください。
アップグレードしたアプリを初めてビルドする前に、bin
フォルダーと obj
フォルダーを削除してください。
注
.NET 8 の .NET MAUI アプリのプロジェクト テンプレートを使用すると、 $(Nullable)
ビルド プロパティを使用して、プロジェクトの null 許容コンテキストを有効にします。 詳細については、「 Null 許容」を参照してください。
こちらも参照ください
.NET MAUI