Apa yang baru di .NET MAUI untuk .NET 9
Fokus UI Aplikasi Multi-platform .NET (.NET MAUI) di .NET 9 adalah untuk meningkatkan kualitas produk. Ini termasuk memperluas cakupan pengujian, pengujian skenario ujung ke ujung, dan perbaikan bug. Untuk informasi selengkapnya tentang peningkatan kualitas produk di .NET MAUI 9, lihat catatan rilis berikut:
- .NET MAUI 9 RC1
- Pratinjau .NET MAUI 9 7
- Pratinjau .NET MAUI 9 6
- Pratinjau .NET MAUI 9 5
- Pratinjau .NET MAUI 9 4
- Pratinjau .NET MAUI 9 3
- Pratinjau .NET MAUI 9 2
- Pratinjau .NET MAUI 9 1
Penting
Karena bekerja dengan dependensi eksternal, seperti Xcode atau Android SDK Tools, kebijakan dukungan .NET MAUI berbeda dari kebijakan dukungan .NET dan .NET Core. Untuk informasi selengkapnya, lihat Kebijakan dukungan .NET MAUI.
Di .NET 9, .NET MAUI dikirim sebagai beban kerja .NET dan beberapa paket NuGet. Keuntungan dari pendekatan ini adalah memungkinkan Anda untuk dengan mudah menyematkan proyek Anda ke versi tertentu, sekaligus memungkinkan Anda untuk dengan mudah mempratinjau build yang belum dilepas atau eksperimental. Saat Anda membuat proyek .NET MAUI baru, paket NuGet yang diperlukan secara otomatis ditambahkan ke proyek.
Target penyebaran minimum
.NET MAUI 9 memerlukan target penyebaran minimum iOS 12.2, dan Mac Catalyst 15.0 (macOS 12.0). Target penyebaran minimum Android dan Windows tetap sama. Untuk informasi selengkapnya, lihat Platform yang didukung untuk aplikasi .NET MAUI.
Kontrol baru
.NET MAUI 9 menyertakan dua kontrol baru.
HybridWebView
HybridWebView memungkinkan hosting konten HTML/JS/CSS arbitrer dalam tampilan web, dan memungkinkan komunikasi antara kode dalam tampilan web (JavaScript) dan kode yang menghosting tampilan web (C#/.NET). Misalnya, jika Anda memiliki aplikasi React JS yang ada, Anda dapat menghostingnya di aplikasi asli .NET MAUI lintas platform, dan membangun back-end aplikasi menggunakan C# dan .NET.
Untuk membangun aplikasi .NET MAUI dengan HybridWebView Anda memerlukan:
- Konten web aplikasi, yang terdiri dari HTML statis, JavaScript, CSS, gambar, dan file lainnya.
- HybridWebView Kontrol sebagai bagian dari UI aplikasi. Ini dapat dicapai dengan mereferensikannya di XAML aplikasi.
- Kode dalam konten web, dan di C#/.NET, yang menggunakan HybridWebView API untuk mengirim pesan di antara kedua komponen.
Seluruh aplikasi, termasuk konten web, dipaketkan dan dijalankan secara lokal di perangkat, dan dapat diterbitkan ke penyimpanan aplikasi yang berlaku. Konten web dihosting dalam kontrol tampilan web asli dan berjalan dalam konteks aplikasi. Bagian mana pun dari aplikasi dapat mengakses layanan web eksternal, tetapi tidak diperlukan.
Untuk informasi selengkapnya, lihat HybridWebView.
Bilah Judul untuk Windows
Kontrol ini TitleBar
menyediakan kemampuan untuk menambahkan bilah judul kustom ke aplikasi Anda di Windows:
TitleBar
dapat ditetapkan sebagai nilai Window.TitleBar
properti pada setiap Window
:
<Window.TitleBar>
<TitleBar x:Name="TeamsTitleBar"
Title="Hello World"
Icon="appicon.png"
HeightRequest="46">
<TitleBar.Content>
<Entry x:Name="SearchTitleBar"
Placeholder="Search"
VerticalOptions="Center"
MinimumWidthRequest="300"
MaximumWidthRequest="450"
HeightRequest="32"/>
</TitleBar.Content>
</TitleBar>
</Window.TitleBar>
Contoh penggunaannya dalam C# adalah:
Window.TitleBar = new TitleBar
{
Title = "MAUI App",
Icon = "appicon.png",
HeightRequest = 46,
LeadingContent = new AvatarButton()
};
A TitleBar
sangat dapat disesuaikan melalui Content
properti , , LeadingContent
dan TrailingContent
:
<TitleBar Title="My App"
BackgroundColor="#512BD4"
HeightRequest="48">
<TitleBar.Content>
<SearchBar Placeholder="Search"
MaximumWidthRequest="300"
HorizontalOptions="FillAndExpand"
VerticalOptions="Center" />
</TitleBar.Content>
<TitleBar.TrailingContent>
<ImageButton HeightRequest="36"
WidthRequest="36"
BorderWidth="0"
Background="Transparent">
<ImageButton.Source>
<FontImageSource Size="16"
Glyph=""
FontFamily="SegoeMDL2"/>
</ImageButton.Source>
</ImageButton>
</TitleBar.TrailingContent>
</TitleBar>
Cuplikan layar berikut menunjukkan tampilan yang dihasilkan:
Catatan
Dukungan Mac Catalyst untuk TitleBar
kontrol akan ditambahkan dalam rilis mendatang.
Penyempurnaan kontrol
.NET MAUI 9 mencakup peningkatan kontrol.
Mode pengikatan BackButtonBehavior OneWay
Mode pengikatan untuk IsVisible
dan IsEnabled
pada BackButtonBehavior di aplikasi Shell sekarang BindingMode.OneWay
bukan BindingMode.OneTime
. Ini memungkinkan Anda untuk lebih mudah mengontrol perilaku tombol kembali saat runtime, dengan pengikatan data:
<ContentPage ...>
<Shell.BackButtonBehavior>
<BackButtonBehavior Command="{Binding BackCommand}"
IsVisible="{Binding IsBackButtonVisible}"
IconOverride="back.png" />
</Shell.BackButtonBehavior>
...
</ContentPage>
BlazorWebView
Di iOS dan Mac Catalyst 18, .NET MAUI 9 mengubah perilaku default untuk menghosting konten di menjadi BlazorWebView localhost
. Alamat internal 0.0.0.0
yang digunakan untuk menghosting konten tidak lagi berfungsi dan menghasilkan BlazorWebView tidak memuat konten apa pun dan penyajian sebagai persegi panjang kosong.
Untuk memilih menggunakan 0.0.0.0
alamat, tambahkan kode berikut ke CreateMauiApp
metode di MauiProgram.cs:
// Set this switch to use the LEGACY behavior of always using 0.0.0.0 to host BlazorWebView
AppContext.SetSwitch("BlazorWebView.AppHostAddressAlways0000", true);
Jika Anda mengalami hang di Android, BlazorWebView Anda harus mengaktifkan sakelar AppContext dalam CreateMauiApp
metode di kelas Anda MauiProgram
:
AppContext.SetSwitch("BlazorWebView.AndroidFireAndForgetAsync", true);
Sakelar ini memungkinkan BlazorWebView untuk menembak dan melupakan pembuangan asinkron yang terjadi, dan sebagai hasilnya memperbaiki sebagian besar kebuntuan pembuangan yang terjadi di Android. Untuk informasi selengkapnya, lihat Memperbaiki kebuntuan pembuangan di Android.
CollectionView dan CarouselView
.NET MAUI 9 mencakup dua handler baru opsional di iOS dan Mac Catalyst yang menghadirkan peningkatan performa dan stabilitas ke CollectionView
dan CarouselView
. Handler ini didasarkan pada UICollectionView
API.
Untuk memilih menggunakan handler ini, tambahkan kode berikut ke kelas Anda MauiProgram
:
#if IOS || MACCATALYST
builder.ConfigureMauiHandlers(handlers =>
{
handlers.AddHandler<Microsoft.Maui.Controls.CollectionView, Microsoft.Maui.Controls.Handlers.Items2.CollectionViewHandler2>();
handlers.AddHandler<Microsoft.Maui.Controls.CarouselView, Microsoft.Maui.Controls.Handlers.Items2.CarouselViewHandler2>();
});
#endif
ContentPage
Di .NET MAUI 9, HideSoftInputOnTapped properti ini juga didukung di Mac Catalyst, serta Android dan iOS.
Dukungan input keyboard lunak
.NET MAUI 9 menambahkan dukungan input keyboard lunak baru untuk Password
, , Date
dan Time
. Ini dapat diaktifkan dan Editor Entry kontrol:
<Entry Keyboard="Date" />
Perataan teks
Enumerasi TextAlignment menambahkan Justify
anggota yang dapat digunakan untuk meratakan teks dalam kontrol teks. Misalnya, Anda dapat meratakan teks secara horizontal dalam Label dengan HorizontalTextAlignment.Justify
:
<Label Text="Lorem ipsum dolor sit amet, consectetur adipiscing elit. In facilisis nulla eu felis fringilla vulputate."
HorizontalTextAlignment="Justify"/>
TimePicker
TimePickerTimeSelected mendapatkan peristiwa, yang dimunculkan saat waktu yang dipilih berubah. Objek TimeChangedEventArgs yang menyertai TimeSelected
peristiwa memiliki NewTime
properti dan OldTime
, yang masing-masing menentukan waktu baru dan lama.
WebView
WebViewProcessTerminated
menambahkan peristiwa yang dimunculkan saat WebView proses berakhir secara tak terduga. Objek WebViewProcessTerminatedEventArgs
yang menyertai peristiwa ini mendefinisikan properti khusus platform yang menunjukkan mengapa proses gagal.
Siklus hidup aplikasi
.NET MAUI 9 menambahkan metode siklus hidup pemberitahuan jarak jauh berikut di iOS dan Mac Catalyst:
RegisteredForRemoteNotifications
, yang dipanggil ketika aplikasi telah berhasil mendaftar untuk pemberitahuan jarak jauh.ReceivedRemoteNotifications
, yang dipanggil ketika pemberitahuan jarak jauh diterima.
Contoh berikut menunjukkan cara menggunakan metode siklus hidup ini:
using Microsoft.Maui.LifecycleEvents;
namespace PlatformLifecycleDemo;
public static class MauiProgram
{
public static MauiApp CreateMauiApp()
{
var builder = MauiApp.CreateBuilder();
builder
.UseMauiApp<App>()
.ConfigureLifecycleEvents(events =>
{
#if IOS || MACCATALYST
events.AddiOS(ios => ios
.ReceivedRemoteNotifications((app, dictionary) => LogEvent(nameof(iOSLifecycle.OnReceivedRemoteNotifications)))
.RegisteredForRemoteNotifications((app, data) => LogEvent(nameof(iOSLifecycle.OnRegisteredForRemoteNotifications)));
#endif
static bool LogEvent(string eventName, string type = null)
{
System.Diagnostics.Debug.WriteLine($"Lifecycle event: {eventName}{(type == null ? string.Empty : $" ({type})")}");
return true;
}
});
return builder.Build();
}
}
Pengikatan yang dikompilasi dalam kode
Pengikatan yang ditulis dalam kode biasanya menggunakan jalur string yang diselesaikan pada runtime dengan pantulan, dan overhead melakukan ini bervariasi dari platform ke platform. .NET MAUI 9 memperkenalkan metode ekstensi tambahan SetBinding yang menentukan pengikatan menggunakan Func
argumen alih-alih jalur string:
// in .NET 8
MyLabel.SetBinding(Label.TextProperty, "Text");
// in .NET 9
MyLabel.SetBinding(Label.TextProperty, static (Entry entry) => entry.Text);
Pendekatan pengikatan yang dikompilasi ini memberikan manfaat berikut:
- Meningkatkan performa pengikatan data dengan menyelesaikan ekspresi pengikatan pada waktu kompilasi daripada runtime.
- Pengalaman pemecahan masalah pengembang yang lebih baik karena pengikatan yang tidak valid dilaporkan sebagai kesalahan build.
- Intellisense saat mengedit.
Tidak semua metode dapat digunakan untuk menentukan pengikatan yang dikompilasi. Ekspresi harus berupa ekspresi akses properti sederhana. Contoh berikut menunjukkan ekspresi pengikatan yang valid dan tidak valid:
// Valid: Property access
static (PersonViewModel vm) => vm.Name;
static (PersonViewModel vm) => vm.Address?.Street;
// Valid: Array and indexer access
static (PersonViewModel vm) => vm.PhoneNumbers[0];
static (PersonViewModel vm) => vm.Config["Font"];
// Valid: Casts
static (Label label) => (label.BindingContext as PersonViewModel).Name;
static (Label label) => ((PersonViewModel)label.BindingContext).Name;
// Invalid: Method calls
static (PersonViewModel vm) => vm.GetAddress();
static (PersonViewModel vm) => vm.Address?.ToString();
// Invalid: Complex expressions
static (PersonViewModel vm) => vm.Address?.Street + " " + vm.Address?.City;
static (PersonViewModel vm) => $"Name: {vm.Name}";
Selain itu, .NET MAUI 9 menambahkan Binding.Create metode yang mengatur pengikatan langsung pada objek dengan Func
, dan mengembalikan instans objek pengikatan:
// in .NET 8
myEntry.SetBinding(Entry.TextProperty, new MultiBinding
{
Bindings = new Collection<BindingBase>
{
new Binding(nameof(Entry.FontFamily), source: RelativeBindingSource.Self),
new Binding(nameof(Entry.FontSize), source: RelativeBindingSource.Self),
new Binding(nameof(Entry.FontAttributes), source: RelativeBindingSource.Self),
},
Converter = new StringConcatenationConverter()
});
// in .NET 9
myEntry.SetBinding(Entry.TextProperty, new MultiBinding
{
Bindings = new Collection<BindingBase>
{
Binding.Create(static (Entry entry) => entry.FontFamily, source: RelativeBindingSource.Self),
Binding.Create(static (Entry entry) => entry.FontSize, source: RelativeBindingSource.Self),
Binding.Create(static (Entry entry) => entry.FontAttributes, source: RelativeBindingSource.Self),
},
Converter = new StringConcatenationConverter()
});
Penting
Pengikatan yang dikompilasi diperlukan alih-alih pengikatan berbasis string di aplikasi NativeAOT, dan di aplikasi dengan pemangkasan penuh diaktifkan.
Pengikatan yang dikompilasi di XAML
Di .NET MAUI 8, pengikatan yang dikompilasi dinonaktifkan untuk ekspresi pengikatan XAML apa pun yang menentukan Source
properti, dan tidak didukung pada multi-pengikatan. Pembatasan ini telah dihapus di .NET MAUI 9.
Secara default, .NET MAUI tidak menghasilkan peringatan build untuk pengikatan yang tidak menggunakan pengikatan yang dikompilasi, kecuali Anda telah mengaktifkan NativeAOT untuk aplikasi Anda. Namun, Anda dapat memilih untuk mengikat peringatan yang dikompilasi yang diproduksi dengan mengatur $(MauiStrictXamlCompilation)
properti build ke true
dalam file proyek aplikasi Anda (*.csproj):
<MauiStrictXamlCompilation>true</MauiStrictXamlCompilation>
Pemutusan handler
Saat menerapkan kontrol kustom menggunakan handler, setiap implementasi handler platform diperlukan untuk mengimplementasikan DisconnectHandler
metode , untuk melakukan pembersihan tampilan asli seperti berhenti berlangganan dari peristiwa. Namun, sebelum .NET MAUI 9, DisconnectHandler
implementasinya sengaja tidak dipanggil oleh .NET MAUI. Sebagai gantinya, Anda harus memanggilnya sendiri saat memilih untuk membersihkan kontrol, seperti saat menavigasi mundur di aplikasi.
Di .NET MAUI 9, handler secara otomatis memutuskan sambungan dari kontrol mereka jika memungkinkan, seperti saat menavigasi mundur di aplikasi. Dalam beberapa skenario, Anda mungkin tidak menginginkan perilaku ini. Oleh karena itu, .NET MAUI 9 menambahkan HandlerProperties.DisconnectPolicy
properti terlampir untuk mengontrol kapan handler terputus dari kontrolnya. Properti ini memerlukan HandlerDisconnectPolicy
argumen, dengan HandlerDisconnectPolicy
enumerasi yang menentukan nilai berikut:
Automatic
, yang menunjukkan bahwa handler akan terputus secara otomatis. Ini adalah nilai default propertiHandlerProperties.DisconnectPolicy
terlampir.Manual
, yang menunjukkan bahwa handler harus terputus secara manual dengan memanggilDisconnectHandler
implementasi.
Contoh berikut menunjukkan pengaturan HandlerProperties.DisconnectPolicy
properti terlampir:
<controls:Video x:Name="video"
HandlerProperties.DisconnectPolicy="Manual"
Source="video.mp4"
AutoPlay="False" />
Kode C# yang setara adalah:
Video video = new Video
{
Source = "video.mp4",
AutoPlay = false
};
HandlerProperties.SetDisconnectPolicy(video, HandlerDisconnectPolicy.Manual);
Selain itu, ada DisconnectHandlers
metode ekstensi yang memutuskan penghandel dari IView
:
video.DisconnectHandlers();
Saat memutuskan sambungan, DisconnectHandlers
metode akan menyebar ke bawah pohon kontrol sampai selesai atau tiba pada kontrol yang telah menetapkan kebijakan manual.
Dukungan multi-jendela
.NET MAUI 9 menambahkan kemampuan untuk membawa jendela tertentu ke depan di Mac Catalyst dan Windows dengan Application.Current.ActivateWindow
metode :
Application.Current?.ActivateWindow(windowToActivate);
Penyematan asli
.NET MAUI 9 menyertakan API penuh untuk skenario penyematan asli, yang sebelumnya harus ditambahkan secara manual ke proyek Anda:
var mauiApp = MauiProgram.CreateMauiApp();
#if ANDROID
var mauiContext = new MauiContext(mauiApp.Services, window);
#else
var mauiContext = new MauiContext(mauiApp.Services);
#endif
var mauiView = new MyMauiContent();
var nativeView = mauiView.ToPlatform(mauiContext);
Atau, Anda dapat menggunakan metode , ToPlatformEmbedded
meneruskan Window
untuk platform tempat aplikasi berjalan:
var mauiApp = MauiProgram.CreateMauiApp();
var mauiView = new MyMauiContent();
var nativeView = mauiView.ToPlatformEmbedded(mauiApp, window);
Dalam kedua contoh, nativeView
adalah versi khusus platform dari mauiView
.
Untuk melakukan bootstrap aplikasi asli yang disematkan di .NET MAUI 9, panggil UseMauiEmbeddedApp
metode ekstensi pada objek Anda MauiAppBuilder
:
public static class MauiProgram
{
public static MauiApp CreateMauiApp()
{
var builder = MauiApp.CreateBuilder();
builder
.UseMauiEmbeddedApp<App>();
return builder.Build();
}
}
Template Proyek
.NET MAUI 9 menambahkan templat proyek .NET MAUI Blazor Hybrid dan Web App ke Visual Studio yang membuat solusi dengan aplikasi .NET MAUI Blazor Hybrid dengan aplikasi Blazor Web, yang berbagi kode umum dalam proyek pustaka kelas Razor.
Templat juga dapat digunakan dari dotnew new
:
dotnet new maui-blazor-web -n AllTheTargets
Kamus sumber daya
Di .NET MAUI 9, XAML ResourceDictionary yang berdiri sendiri (yang tidak didukung oleh file code-behind) default untuk mengkompilasi XAML-nya. Untuk menolak perilaku ini, tentukan <?xaml-comp compile="false" ?>
setelah header XML.
Pemangkasan sakelar fitur
Beberapa area .NET MAUI dilengkapi dengan arahan pemangkas, yang dikenal sebagai sakelar fitur, yang memungkinkan untuk menghapus kode untuk fitur yang dinonaktifkan ketika TrimMode=full
, serta untuk NativeAOT:
Properti MSBuild | Deskripsi |
---|---|
MauiEnableVisualAssemblyScanning |
Ketika diatur ke true , .NET MAUI akan memindai rakitan untuk jenis yang menerapkan IVisual dan untuk [assembly:Visual(...)] atribut, dan akan mendaftarkan jenis ini. Secara default, properti build ini diatur ke false . |
MauiShellSearchResultsRendererDisplayMemberNameSupported |
Ketika diatur ke false , nilai SearchHandler.DisplayMemberName akan diabaikan. Sebagai gantinya, Anda harus memberikan ItemTemplate untuk menentukan tampilan SearchHandler hasil. Secara default, properti build ini diatur ke true . |
MauiQueryPropertyAttributeSupport |
Saat diatur ke false , [QueryProperty(...)] atribut tidak akan digunakan untuk mengatur nilai properti saat menavigasi. Sebagai gantinya IQueryAttributable , Anda harus menerapkan antarmuka untuk menerima parameter kueri. Secara default, properti build ini diatur ke true . |
MauiImplicitCastOperatorsUsageViaReflectionSupport |
Saat diatur ke false , .NET MAUI tidak akan mencari operator cast implisit saat mengonversi nilai dari satu jenis ke jenis lainnya. Ini dapat memengaruhi pengikatan antara properti dengan jenis yang berbeda, dan mengatur nilai properti dari objek yang dapat diikat dengan nilai dari jenis yang berbeda. Sebagai gantinya, Anda harus menentukan TypeConverter untuk jenis Anda dan melampirkannya ke jenis menggunakan [TypeConverter(typeof(MyTypeConverter))] atribut . Secara default, properti build ini diatur ke true . |
_MauiBindingInterceptorsSupport |
Ketika diatur ke false , .NET MAUI tidak akan mencegat panggilan apa pun ke SetBinding metode dan tidak akan mencoba mengkompilasinya. Secara default, properti build ini diatur ke true . |
Untuk menggunakan sakelar fitur, Anda harus memasukkan properti MSBuild yang sesuai ke dalam file proyek aplikasi Anda (*.csproj), yang menyebabkan kode terkait dipangkas dari rakitan .NET MAUI. Menonaktifkan fitur yang tidak diperlukan aplikasi dapat membantu mengurangi ukuran aplikasi saat dikombinasikan Full
dengan mode pemangkasan.
XAML
Semua kelas yang mengimplementasikan IMarkupExtension, IMarkupExtension<T>, IValueProvider, dan IExtendedTypeConverter perlu diannotasi dengan RequireServiceAttribute atau AcceptEmptyServiceProviderAttribute. Ini diperlukan karena pengoptimalan kompilator XAML yang diperkenalkan di .NET MAUI 9 yang memungkinkan pembuatan kode yang lebih efisien, yang membantu mengurangi ukuran aplikasi dan meningkatkan performa runtime.
Untuk informasi tentang menganotasi ekstensi markup dengan atribut ini, lihat Penyedia layanan.
Sinkronisasi Xcode
.NET MAUI 9 mencakup sinkronisasi Xcode (xcsync
), yang merupakan alat yang memungkinkan Anda menggunakan Xcode untuk mengelola file spesifik Apple dengan proyek .NET, termasuk katalog aset, file plist, papan cerita, dan file xib. Alat ini memiliki dua perintah utama untuk menghasilkan proyek Xcode sementara dari proyek .NET, dan untuk menyinkronkan perubahan dari file Xcode kembali ke proyek .NET Anda.
Anda menggunakan dotnet build
dengan xcsync-generate
perintah atau xcsync-sync
, untuk membuat atau menyinkronkan file-file ini, dan meneruskan file proyek dan argumen tambahan:
dotnet build /t:xcsync-generate
/p:xcSyncProjectFile=<PROJECT>
/p:xcSyncXcodeFolder=<TARGET_XCODE_DIRECTORY>
/p:xcSyncTargetFrameworkMoniker=<FRAMEWORK>
/p:xcSyncVerbosity=<LEVEL>
Untuk informasi selengkapnya, lihat Sinkronisasi Xcode.
API yang tidak digunakan lagi
.NET MAUI 9 menghentikan beberapa API, yang akan dihapus sepenuhnya dalam rilis mendatang.
Menengah
Kontrol Frame
ditandai sebagai usang di .NET MAUI 9, dan akan dihapus sepenuhnya dalam rilis mendatang. Border
Kontrol harus digunakan di tempatnya. Untuk informasi selengkapnya, lihat Batas.
MainPage
Alih-alih menentukan halaman pertama aplikasi Anda menggunakan MainPage
properti pada Application
objek, Anda harus mengatur Page
properti pada Window
halaman pertama aplikasi Anda. Inilah yang terjadi secara internal di .NET MAUI saat Anda mengatur MainPage
properti, sehingga tidak ada perubahan perilaku yang diperkenalkan oleh MainPage
properti yang ditandai sebagai usang.
Contoh berikut menunjukkan pengaturan Page
properti pada Window
, melalui penimpaan CreateWindow
:
public partial class App : Application
{
public App()
{
InitializeComponent();
}
protected override Window CreateWindow(IActivationState? activationState)
{
return new Window(new AppShell());
}
}
Properti MainPage
dipertahankan untuk .NET MAUI 9, tetapi akan dihapus sepenuhnya dalam rilis mendatang.
Tata letak kompatibilitas
Kelas tata letak kompatibilitas di Microsoft.Maui.Controls.Compatibility
namespace telah usang.
Panggilan pengukuran warisan
Metode pengukuran warisan berikut VisualElement
telah usang:
protected override SizeRequest OnMeasure(double widthConstraint, double heightConstraint)
.public virtual SizeRequest Measure(double widthConstraint, double heightConstraint, MeasureFlags flags = MeasureFlags.None)
dariVisualElement
.
Sebagai pengganti, metode berikut telah diperkenalkan:
public size Measure(double widthConstraint, double heightConstraint)
Metode ini Measure
mengembalikan ukuran minimum yang dibutuhkan elemen untuk ditampilkan pada perangkat. Margin dikecualikan dari pengukuran, tetapi dikembalikan dengan ukurannya. Ini adalah metode yang disukai untuk dipanggil saat mengukur tampilan.
Selain itu, Microsoft.Maui.SizeRequest
struktur usang. Sebagai gantinya, Microsoft.Maui.Size
harus digunakan.
.NET untuk Android
.NET untuk Android 9, yang menambahkan dukungan untuk API 35, termasuk pekerjaan untuk mengurangi waktu build, dan untuk meningkatkan trimability aplikasi untuk mengurangi ukuran dan meningkatkan performa. Untuk informasi selengkapnya tentang .NET untuk Android 9, lihat catatan rilis berikut:
- .NET untuk Android 9 RC1
- .NET untuk Pratinjau Android 9 7
- .NET untuk Pratinjau Android 9 6
- .NET untuk Pratinjau Android 9 5
- .NET untuk Pratinjau Android 9 4
- .NET untuk Pratinjau Android 9 3
- .NET untuk Pratinjau Android 9 2
- .NET untuk Pratinjau Android 9 1
Paket aset
.NET untuk Android 9 memperkenalkan kemampuan untuk menempatkan aset ke dalam paket terpisah, yang dikenal sebagai paket aset. Ini memungkinkan Anda untuk mengunggah game dan aplikasi yang biasanya lebih besar dari ukuran paket dasar yang diizinkan oleh Google Play. Dengan memasukkan aset ini ke dalam paket terpisah, Anda mendapatkan kemampuan untuk mengunggah paket yang berukuran hingga 2Gb, daripada ukuran paket dasar 200Mb.
Penting
Paket aset hanya dapat berisi aset. Dalam kasus .NET untuk Android, ini berarti item yang memiliki AndroidAsset
tindakan build.
Aplikasi MAUI .NET menentukan aset melalui MauiAsset
tindakan build. Paket aset dapat ditentukan melalui AssetPack
atribut :
<MauiAsset
Include="Resources\Raw\**"
LogicalName="%(RecursiveDir)%(Filename)%(Extension)"
AssetPack="myassetpack" />
Catatan
Metadata tambahan akan diabaikan oleh platform lain.
Jika Anda memiliki item tertentu yang ingin Anda tempatkan dalam paket aset, Anda dapat menggunakan Update
atribut untuk menentukan AssetPack
metadata:
<MauiAsset Update="Resources\Raw\MyLargeAsset.txt" AssetPack="myassetpack" />
Paket aset dapat memiliki opsi pengiriman yang berbeda, yang mengontrol kapan aset Anda akan diinstal pada perangkat:
- Paket waktu penginstalan diinstal pada saat yang sama dengan aplikasi. Jenis paket ini bisa berukuran hingga 1Gb, tetapi Anda hanya dapat memiliki salah satunya. Jenis pengiriman ini ditentukan dengan
InstallTime
metadata. - Paket ikuti cepat akan diinstal pada beberapa titik segera setelah aplikasi selesai diinstal. Aplikasi akan dapat dimulai saat jenis paket ini sedang diinstal sehingga Anda harus memeriksanya telah selesai diinstal sebelum mencoba menggunakan aset. Paket aset semacam ini dapat berukuran hingga 512Mb. Jenis pengiriman ini ditentukan dengan
FastFollow
metadata. - Paket sesuai permintaan tidak akan pernah diunduh ke perangkat kecuali aplikasi secara khusus memintanya. Ukuran total semua paket aset Anda tidak boleh melebihi 2Gb, dan Anda dapat memiliki hingga 50 paket aset terpisah. Jenis pengiriman ini ditentukan dengan
OnDemand
metadata.
Di aplikasi .NET MAUI, jenis pengiriman dapat ditentukan dengan DeliveryType
atribut pada MauiAsset
:
<MauiAsset Update="Resources\Raw\myvideo.mp4" AssetPack="myassetpack" DeliveryType="FastFollow" />
Untuk informasi selengkapnya tentang paket aset Android, lihat Paket aset Android.
Dukungan Android 15
.NET untuk Android 9 menambahkan pengikatan .NET untuk Android 15 (API 35). Untuk membangun API ini, perbarui kerangka kerja target proyek Anda:
<TargetFramework>net9.0-android35</TargetFramework>
Metode marshalled LLVM
Metode marshalled Komputer Virtual tingkat rendah (LLVM) sekarang diaktifkan secara default di .NET untuk Android 9 di aplikasi non-Blazor. Ini telah menghasilkan peningkatan ~ 10% dalam performa dalam aplikasi pengujian.
Metode marshalled LLVM dapat dinonaktifkan dalam file proyek Anda (.csproj):
<PropertyGroup Condition="'$(TargetFramework)' == 'net9.0-android'">
<AndroidEnableLLVM>false</AndroidEnableLLVM>
<AndroidEnableLLVMOptimizations>false</AndroidEnableLLVMOptimizations>
</PropertyGroup>
Peningkatan pemangkasan
.NET untuk Android 9 menyertakan perbaikan saat menggunakan pemangkasan penuh untuk mengurangi ukuran aplikasi. Pemangkasan penuh biasanya hanya diaktifkan untuk build rilis aplikasi Anda, dan dapat dikonfigurasi dalam file proyek Anda (.csproj):
<PropertyGroup Condition="'$(Configuration)' == 'Release' And '$(TargetFramework)' == 'net9.0-android'">
<TrimMode>Full</TrimMode>
</PropertyGroup>
.NET untuk iOS
.NET 9 di iOS, tvOS, Mac Catalyst, dan macOS menggunakan Xcode 15.4 untuk versi platform berikut:
- iOS: 17.5
- tvOS: 17.5
- Mac Catalyst: 17.5
- macOS: 14.5
Untuk informasi selengkapnya tentang .NET 9 di iOS, tvOS, Mac Catalyst, dan macOS, lihat catatan rilis berikut:
- .NET 9.0.1xx RC1
- Pratinjau .NET 9.0.1xx 7
- Pratinjau .NET 9.0.1xx 6
- Pratinjau .NET 9.0.1xx 5
- Pratinjau .NET 9.0.1xx 4
- Pratinjau .NET 9.0.1xx 3
- Pratinjau .NET 9.0.1xx 2
- Pratinjau .NET 9.0.1xx 1
Pengikatan
.NET untuk iOS 9 memperkenalkan kemampuan untuk versi multi-target .NET untuk pengikatan iOS. Misalnya, proyek pustaka mungkin perlu dibuat untuk dua versi iOS yang berbeda:
<TargetFrameworks>net9.0-ios17.0;net9.0-ios17.2</TargetFrameworks>
Ini akan menghasilkan dua pustaka, satu menggunakan pengikatan iOS 17.0, dan satu menggunakan pengikatan iOS 17.2.
Penting
Proyek aplikasi harus selalu menargetkan iOS SDK terbaru.
AOT Asli untuk iOS & Mac Catalyst
Di .NET untuk iOS 9, kompilasi Ahead of Time (AOT) asli untuk iOS dan Mac Catalyst memanfaatkan pemangkasan penuh untuk mengurangi ukuran paket aplikasi dan performa startup Anda. Ini adalah fitur penerbitan yang dapat Anda gunakan saat siap untuk mengirim aplikasi.
Penting
Aplikasi Anda dan dependensinya harus sepenuhnya dapat dipangkas untuk menggunakan fitur ini.