Novinky v .NET MAUI pro .NET 9
Cílem rozhraní .NET Multi-Platform App UI (.NET MAUI) v .NET 9 je zlepšit kvalitu produktu. To zahrnuje rozšíření pokrytí testů, kompletní testování scénářů a opravu chyb. Další informace o vylepšení kvality produktu v rozhraní .NET MAUI 9 najdete v následujících poznámkách k verzi:
- .NET MAUI 9 RC1
- .NET MAUI 9 Preview 7
- .NET MAUI 9 Preview 6
- .NET MAUI 9 Preview 5
- .NET MAUI 9 Preview 4
- .NET MAUI 9 Preview 3
- .NET MAUI 9 Preview 2
- .NET MAUI 9 Preview 1
Důležité
Kvůli práci s externími závislostmi, jako jsou Xcode nebo Nástroje sady Android SDK, se zásady podpory .NET MAUI liší od zásad podpory .NET a .NET Core. Další informace najdete v tématu Zásady podpory .NET MAUI.
V .NET 9 se .NET MAUI dodává jako úloha .NET a několik balíčků NuGet. Výhodou tohoto přístupu je, že umožňuje snadno připnout projekty na konkrétní verze a zároveň vám umožní snadno zobrazit náhled nerelevidovaných nebo experimentálních buildů. Když vytvoříte nový projekt .NET MAUI, do projektu se automaticky přidají požadované balíčky NuGet.
Minimální cíle nasazení
.NET MAUI 9 vyžaduje minimální cíle nasazení iOS 12.2 a Mac Catalyst 15.0 (macOS 12.0). Minimální cíle nasazení pro Android a Windows zůstávají stejné. Další informace najdete v tématu Podporované platformy pro aplikace .NET MAUI.
Nové ovládací prvky
.NET MAUI 9 obsahuje dva nové ovládací prvky.
HybridWebView
HybridWebView umožňuje hostování libovolného obsahu HTML/JS/CSS ve webovém zobrazení a umožňuje komunikaci mezi kódem ve webovém zobrazení (JavaScript) a kódem, který je hostitelem webového zobrazení (C#/.NET). Pokud máte například existující aplikaci React JS, můžete ji hostovat v nativní aplikaci .NET MAUI pro různé platformy a vytvořit back-end aplikace pomocí C# a .NET.
K vytvoření aplikace HybridWebView .NET MAUI potřebujete:
- Webový obsah aplikace, který se skládá ze statického HTML, JavaScriptu, CSS, obrázků a dalších souborů.
- Ovládací HybridWebView prvek jako součást uživatelského rozhraní aplikace. Toho lze dosáhnout tak, že na ni odkazujete v kódu XAML aplikace.
- Kód ve webovém obsahu a v jazyce C#/.NET, který používá HybridWebView rozhraní API k odesílání zpráv mezi dvěma komponentami.
Celá aplikace, včetně webového obsahu, je zabalená a běží místně na zařízení a je možné ji publikovat do příslušných obchodů s aplikacemi. Webový obsah je hostovaný v nativním ovládacím prvku webového zobrazení a běží v kontextu aplikace. Každá část aplikace má přístup k externím webovým službám, ale nevyžaduje se.
Další informace naleznete v tématu HybridWebView.
Záhlaví pro Windows
Ovládací TitleBar
prvek umožňuje přidat do aplikace ve Windows vlastní záhlaví:
Vlastnost TitleBar
lze nastavit jako hodnotu Window.TitleBar
vlastnosti na libovolném 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>
Příkladem použití v jazyce C# je:
Window.TitleBar = new TitleBar
{
Title = "MAUI App",
Icon = "appicon.png",
HeightRequest = 46,
LeadingContent = new AvatarButton()
};
A TitleBar
je vysoce přizpůsobitelné prostřednictvím jeho Content
, LeadingContent
a TrailingContent
vlastnosti:
<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>
Následující snímek obrazovky ukazuje výsledný vzhled:
Poznámka:
Podpora Mac Catalyst pro TitleBar
ovládací prvek bude přidána v budoucí verzi.
Vylepšení ovládacích prvků
.NET MAUI 9 zahrnuje vylepšení ovládacích prvků.
Režim vazby BackButtonBehavior OneWay
Režim vazby pro IsVisible
a IsEnabled
v BackButtonBehavior aplikaci shellu je teď BindingMode.OneWay
místo BindingMode.OneTime
. Díky tomu můžete snadněji řídit chování tlačítka Zpět za běhu pomocí datových vazeb:
<ContentPage ...>
<Shell.BackButtonBehavior>
<BackButtonBehavior Command="{Binding BackCommand}"
IsVisible="{Binding IsBackButtonVisible}"
IconOverride="back.png" />
</Shell.BackButtonBehavior>
...
</ContentPage>
BlazorWebView
V systémech iOS a Mac Catalyst 18 změní .NET MAUI 9 výchozí chování pro hostování obsahu v objektu BlazorWebView localhost
. Interní 0.0.0.0
adresa použitá k hostování obsahu už nefunguje a výsledkem BlazorWebView není načtení žádného obsahu a vykreslení jako prázdný obdélník.
Pokud se chcete přihlásit k používání 0.0.0.0
adresy, přidejte do metody v CreateMauiApp
MauiProgram.cs následující kód:
// Set this switch to use the LEGACY behavior of always using 0.0.0.0 to host BlazorWebView
AppContext.SetSwitch("BlazorWebView.AppHostAddressAlways0000", true);
Pokud narazíte na zablokování androidu, BlazorWebView měli byste v metodě ve CreateMauiApp
třídě MauiProgram
povolit AppContext přepínač:
AppContext.SetSwitch("BlazorWebView.AndroidFireAndForgetAsync", true);
Tento přepínač umožňuje BlazorWebView aktivovat a zapomenout na asynchronní odstranění, ke kterému dochází, a v důsledku toho opraví většinu zablokování vyřazení, ke kterým dochází v Androidu. Další informace najdete v tématu Oprava zablokování vyřazení v Androidu.
CollectionView a CarouselView
.NET MAUI 9 obsahuje dva volitelné nové obslužné rutiny v iOSu a Mac Catalyst, které přinášejí vylepšení výkonu a stability a CollectionView
CarouselView
. Tyto obslužné rutiny jsou založené na UICollectionView
rozhraních API.
Pokud se chcete přihlásit k používání těchto obslužných rutin, přidejte do své MauiProgram
třídy následující kód:
#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
V rozhraní .NET MAUI 9 je vlastnost HideSoftInputOnTapped podporována také v systému Mac Catalyst a Android a iOS.
Podpora softwarového zadávání klávesnice
.NET MAUI 9 přidává novou podporu vstupu soft keyboard pro Password
, Date
a Time
. Tyto možnosti můžou být povolené Editor u a Entry ovládacích prvcích:
<Entry Keyboard="Date" />
Zarovnání textu
Výčet TextAlignment přidá Justify
člena, který lze použít k zarovnání textu v textových ovládacích prvcích. Text můžete například vodorovně zarovnat takto Label HorizontalTextAlignment.Justify
:
<Label Text="Lorem ipsum dolor sit amet, consectetur adipiscing elit. In facilisis nulla eu felis fringilla vulputate."
HorizontalTextAlignment="Justify"/>
TimePicker
TimePickerTimeSelected získá událost, která se vyvolá při změně vybraného času. Objekt TimeChangedEventArgs , který doprovází TimeSelected
událost, má NewTime
a OldTime
vlastnosti, které určují nový a starý čas, v uvedeném pořadí.
WebView
WebViewProcessTerminated
přidá událost, která se vyvolá, když WebView proces neočekávaně skončí. Objekt WebViewProcessTerminatedEventArgs
, který doprovází tuto událost, definuje vlastnosti specifické pro platformu, které označují, proč proces selhal.
Životní cyklus aplikace
.NET MAUI 9 přidává následující metody životního cyklu vzdálených oznámení v systémech iOS a Mac Catalyst:
RegisteredForRemoteNotifications
, která se vyvolá, když se aplikace úspěšně zaregistrovala pro vzdálená oznámení.ReceivedRemoteNotifications
, který se vyvolá při přijetí vzdáleného oznámení.
Následující příklad ukazuje, jak využívat tyto metody životního cyklu:
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();
}
}
Kompilované vazby v kódu
Vazby napsané v kódu obvykle používají cesty řetězců, které jsou vyřešeny za běhu s reflexí a režijní náklady se liší od platformy po platformu. .NET MAUI 9 zavádí další SetBinding metodu rozšíření, která definuje vazby pomocí argumentu Func
místo cesty řetězce:
// in .NET 8
MyLabel.SetBinding(Label.TextProperty, "Text");
// in .NET 9
MyLabel.SetBinding(Label.TextProperty, static (Entry entry) => entry.Text);
Tento zkompilovaný přístup vazby nabízí následující výhody:
- Vylepšili jsme výkon datových vazeb překladem výrazů vazeb v době kompilace místo modulu runtime.
- Lepší prostředí pro řešení potíží pro vývojáře, protože neplatné vazby jsou hlášeny jako chyby sestavení.
- IntelliSense při úpravách
Ne všechny metody lze použít k definování kompilované vazby. Výraz musí být jednoduchý přístupový výraz vlastnosti. Následující příklady ukazují platné a neplatné vazbové výrazy:
// 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}";
Kromě toho .NET MAUI 9 přidá metodu Binding.Create , která nastaví vazbu přímo na objektu pomocí a Func
vrátí instanci objektu vazby:
// 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()
});
Důležité
Kompilované vazby jsou vyžadovány místo vazeb založených na řetězcích v aplikacích NativeAOT a v aplikacích s povoleným úplným oříznutím.
Kompilované vazby v XAML
V .NET MAUI 8 jsou kompilované vazby zakázány pro všechny výrazy vazby XAML, které definují Source
vlastnost, a nejsou podporovány u více vazeb. Tato omezení byla odebrána v rozhraní .NET MAUI 9.
Ve výchozím nastavení .NET MAUI negeneruje upozornění sestavení pro vazby, které nepoužívají kompilované vazby, pokud jste pro aplikaci nepovolili NativeAOT. Upozornění kompilovaných vazeb ale můžete vyjádřit nastavením $(MauiStrictXamlCompilation)
vlastnosti sestavení do true
souboru projektu vaší aplikace (*.csproj):
<MauiStrictXamlCompilation>true</MauiStrictXamlCompilation>
Odpojení obslužné rutiny
Při implementaci vlastního ovládacího prvku pomocí obslužných rutin je každá implementace obslužné rutiny platformy nutná k implementaci DisconnectHandler
metody, k provedení jakéhokoli nativního čištění zobrazení, jako je zrušení odběru událostí. Před rozhraním .NET MAUI 9 DisconnectHandler
se však implementace záměrně nevyvolává rozhraním .NET MAUI. Místo toho byste ho museli vyvolat sami, když se rozhodnete vyčistit ovládací prvek, například při navigaci dozadu v aplikaci.
V .NET MAUI 9 se obslužné rutiny automaticky odpojí od svých ovládacích prvků, pokud je to možné, například při navigaci dozadu v aplikaci. V některých scénářích toto chování možná nebudete chtít. Proto rozhraní .NET MAUI 9 přidá připojenou HandlerProperties.DisconnectPolicy
vlastnost pro řízení, když jsou obslužné rutiny odpojeny od jejich ovládacích prvků. Tato vlastnost vyžaduje HandlerDisconnectPolicy
argument s výčtem HandlerDisconnectPolicy
definujícím následující hodnoty:
Automatic
, který označuje, že obslužné rutiny budou automaticky odpojeny. Toto je výchozí hodnotaHandlerProperties.DisconnectPolicy
připojené vlastnosti.Manual
, což označuje, že obslužné rutiny budou muset být odpojeny ručně vyvolánímDisconnectHandler
implementace.
Následující příklad ukazuje nastavení HandlerProperties.DisconnectPolicy
připojené vlastnosti:
<controls:Video x:Name="video"
HandlerProperties.DisconnectPolicy="Manual"
Source="video.mp4"
AutoPlay="False" />
Ekvivalentní kód jazyka C# je:
Video video = new Video
{
Source = "video.mp4",
AutoPlay = false
};
HandlerProperties.SetDisconnectPolicy(video, HandlerDisconnectPolicy.Manual);
Kromě toho existuje DisconnectHandlers
metoda rozšíření, která od dané IView
metody odpojí obslužné rutiny:
video.DisconnectHandlers();
Při odpojení se DisconnectHandlers
metoda rozšíří dolů řídicí strom, dokud se nedokončí nebo dorazí do ovládacího prvku, který nastavil ruční zásadu.
Podpora více oken
.NET MAUI 9 přidává možnost přenést konkrétní okno na přední straně systému Mac Catalyst a Windows metodou Application.Current.ActivateWindow
:
Application.Current?.ActivateWindow(windowToActivate);
Nativní vkládání
.NET MAUI 9 zahrnuje úplná rozhraní API pro nativní scénáře vkládání, které bylo nutné do projektu přidat ručně:
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);
Alternativně můžete použít metodu ToPlatformEmbedded
předání Window
platformy, na které je aplikace spuštěná:
var mauiApp = MauiProgram.CreateMauiApp();
var mauiView = new MyMauiContent();
var nativeView = mauiView.ToPlatformEmbedded(mauiApp, window);
V obou příkladech nativeView
je verze specifická pro platformu mauiView
.
Pokud chcete spustit nativní vloženou aplikaci v .NET MAUI 9, zavolejte metodu UseMauiEmbeddedApp
rozšíření na objektu MauiAppBuilder
:
public static class MauiProgram
{
public static MauiApp CreateMauiApp()
{
var builder = MauiApp.CreateBuilder();
builder
.UseMauiEmbeddedApp<App>();
return builder.Build();
}
}
Šablony projektů
.NET MAUI 9 přidá do sady Visual Studio šablonu projektu .NET MAUI Blazor Hybrid a Web App , která vytvoří řešení s hybridní aplikací .NET MAUI Blazor s webovou aplikací Blazor, která sdílí společný kód v projektu knihovny tříd Razor.
Šablonu lze použít také z dotnew new
:
dotnet new maui-blazor-web -n AllTheTargets
Slovníky prostředků
V .NET MAUI 9 se jako samostatný soubor XAML ResourceDictionary (který není zálohovaný souborem kódu) standardně zkompiluje xaml. Chcete-li se odhlásit z tohoto chování, zadejte <?xaml-comp compile="false" ?>
za hlavičku XML.
Přepínače funkcí oříznutí
Několik oblastí rozhraní .NET MAUI obsahuje direktivy pro zatřižení, označované jako přepínače funkcí, které umožňují odebrat kód pro zakázané funkce, i TrimMode=full
pro NativeAOT:
Vlastnost MSBuild | Popis |
---|---|
MauiEnableVisualAssemblyScanning |
Pokud je nastavená hodnota true , .NET MAUI vyhledá sestavení pro typy implementované IVisual a pro [assembly:Visual(...)] atributy a zaregistruje tyto typy. Ve výchozím nastavení je tato vlastnost sestavení nastavena na false . |
MauiShellSearchResultsRendererDisplayMemberNameSupported |
Pokud je nastavená hodnota false , bude hodnota SearchHandler.DisplayMemberName ignorována. Místo toho byste měli poskytnout ItemTemplate definici vzhledu SearchHandler výsledků. Ve výchozím nastavení je tato vlastnost sestavení nastavena na true . |
MauiQueryPropertyAttributeSupport |
Při nastavení na false hodnotu , [QueryProperty(...)] atributy nebudou použity k nastavení hodnot vlastností při navigaci. Místo toho byste měli implementovat IQueryAttributable rozhraní pro příjem parametrů dotazu. Ve výchozím nastavení je tato vlastnost sestavení nastavena na true . |
MauiImplicitCastOperatorsUsageViaReflectionSupport |
Při nastavení na false hodnotu .NET MAUI nebude při převodu hodnot z jednoho typu na jiný hledat implicitní operátory přetypování. To může ovlivnit vazby mezi vlastnostmi s různými typy a nastavením hodnoty vlastnosti objektu bindable s hodnotou jiného typu. Místo toho byste měli definovat TypeConverter typ a připojit ho k typu pomocí atributu [TypeConverter(typeof(MyTypeConverter))] . Ve výchozím nastavení je tato vlastnost sestavení nastavena na true . |
_MauiBindingInterceptorsSupport |
Pokud je tato možnost nastavená, false nebude rozhraní .NET MAUI zachycovat žádná volání SetBinding metod a nepokouší se je zkompilovat. Ve výchozím nastavení je tato vlastnost sestavení nastavena na true . |
Pokud chcete použít přepínač funkcí, měli byste do souboru projektu aplikace umístit odpovídající vlastnost MSBuild (*.csproj), která způsobí oříznutí souvisejícího kódu ze sestavení .NET MAUI. Zakázání funkcí, které aplikace nevyžaduje, může pomoct zmenšit velikost aplikace v kombinaci s režimem Full
oříznutí.
XAML
Všechny třídy, které implementují IMarkupExtension, IValueProviderIMarkupExtension<T>a IExtendedTypeConverter musí být opatřeny poznámkami buď pomocí RequireServiceAttribute nebo AcceptEmptyServiceProviderAttribute. To se vyžaduje kvůli optimalizaci kompilátoru XAML zavedené v rozhraní .NET MAUI 9, která umožňuje generování efektivnějšího kódu, což pomáhá snížit velikost aplikace a zlepšit výkon modulu runtime.
Informace o přidávání poznámek k rozšířením značek pomocí těchto atributů naleznete v tématu Poskytovatelé služeb.
Synchronizace Xcode
.NET MAUI 9 zahrnuje synchronizaci Xcode (xcsync
), což je nástroj, který umožňuje používat Xcode ke správě konkrétních souborů Apple s projekty .NET, včetně katalogů prostředků, souborů plist, scénářů a souborů xib. Nástroj má dva hlavní příkazy pro vygenerování dočasného projektu Xcode z projektu .NET a synchronizaci změn ze souborů Xcode zpět do projektu .NET.
Tyto soubory můžete vygenerovat nebo synchronizovat pomocí dotnet build
xcsync-generate
xcsync-sync
příkazů a předat soubor projektu a další argumenty:
dotnet build /t:xcsync-generate
/p:xcSyncProjectFile=<PROJECT>
/p:xcSyncXcodeFolder=<TARGET_XCODE_DIRECTORY>
/p:xcSyncTargetFrameworkMoniker=<FRAMEWORK>
/p:xcSyncVerbosity=<LEVEL>
Další informace najdete v tématu Synchronizace Xcode.
Zastaralá rozhraní API
.NET MAUI 9 vyřadí některá rozhraní API, která se v budoucí verzi úplně odeberou.
Rámec
Ovládací Frame
prvek je v .NET MAUI 9 označený jako zastaralý a v budoucí verzi se úplně odebere. Ovládací Border
prvek by měl být použit na svém místě. Další informace naleznete v tématu Ohraničení.
MainPage
Místo definování první stránky aplikace pomocí MainPage
vlastnosti objektu Application
byste měli Page
nastavit vlastnost na Window
první stránce aplikace. To se stane interně v rozhraní .NET MAUI při nastavování MainPage
vlastnosti, takže neexistuje žádná změna chování zavedená MainPage
vlastností, která je označena jako zastaralá.
Následující příklad ukazuje nastavení Page
vlastnosti na , Window
prostřednictvím přepsání CreateWindow
:
public partial class App : Application
{
public App()
{
InitializeComponent();
}
protected override Window CreateWindow(IActivationState? activationState)
{
return new Window(new AppShell());
}
}
Vlastnost MainPage
se zachová pro .NET MAUI 9, ale v budoucí verzi se úplně odebere.
Rozložení kompatibility
Třídy rozložení kompatibility v Microsoft.Maui.Controls.Compatibility
oboru názvů byly zastaralé.
Volání starších měr
VisualElement
Zastaralé metody starších měr:
protected override SizeRequest OnMeasure(double widthConstraint, double heightConstraint)
.public virtual SizeRequest Measure(double widthConstraint, double heightConstraint, MeasureFlags flags = MeasureFlags.None)
zVisualElement
.
Jako náhradu byla zavedena následující metoda:
public size Measure(double widthConstraint, double heightConstraint)
Tato Measure
metoda vrátí minimální velikost, kterou prvek potřebuje k zobrazení na zařízení. Okraje jsou z měření vyloučené, ale vrátí se s velikostí. Toto je upřednostňovaná metoda volání při měření zobrazení.
Kromě toho Microsoft.Maui.SizeRequest
je struktura zastaralá. Microsoft.Maui.Size
Místo toho byste měli použít.
.NET pro Android
.NET pro Android 9, který přidává podporu rozhraní API 35, zahrnuje práci, která zkracuje časy sestavení, a ke zlepšení možností oříznutí aplikací, aby se snížila velikost a zlepšil výkon. Další informace o .NET pro Android 9 najdete v následujících poznámkách k verzi:
- .NET pro Android 9 RC1
- .NET pro Android 9 Preview 7
- .NET pro Android 9 Preview 6
- .NET pro Android 9 Preview 5
- .NET pro Android 9 Preview 4
- .NET pro Android 9 Preview 3
- .NET pro Android 9 Preview 2
- .NET pro Android 9 Preview 1
Balíčky prostředků
.NET pro Android 9 zavádí možnost umístit prostředky do samostatného balíčku označovaného jako balíček assetů. Díky tomu můžete nahrávat hry a aplikace, které by normálně byly větší než základní velikost balíčku povolená službou Google Play. Když tyto prostředky vložíte do samostatného balíčku, získáte možnost nahrát balíček, který je o velikosti až 2 GB, a ne do základní velikosti balíčku 200 Mb.
Důležité
Balíčky prostředků můžou obsahovat pouze prostředky. V případě .NET pro Android to znamená položky, které mají AndroidAsset
akci sestavení.
Aplikace .NET MAUI definují prostředky prostřednictvím MauiAsset
akce sestavení. Balíček prostředků lze zadat prostřednictvím atributu AssetPack
:
<MauiAsset
Include="Resources\Raw\**"
LogicalName="%(RecursiveDir)%(Filename)%(Extension)"
AssetPack="myassetpack" />
Poznámka:
Další metadata budou ignorována jinými platformami.
Pokud máte konkrétní položky, které chcete umístit do balíčku assetů, můžete pomocí Update
atributu AssetPack
definovat metadata:
<MauiAsset Update="Resources\Raw\MyLargeAsset.txt" AssetPack="myassetpack" />
Balíčky prostředků můžou mít různé možnosti doručení, které řídí, kdy se vaše prostředky nainstalují do zařízení:
- Instalují se časové sady současně s aplikací. Tento typ balíčku může mít velikost až 1 Gb, ale můžete je mít pouze jeden z nich. Tento typ doručení je určen metadaty
InstallTime
. - Rychlé následné balíčky se v určitém okamžiku nainstalují krátce po dokončení instalace aplikace. Aplikace se bude moct spustit, když je tento typ balíčku nainstalovaný, takže byste měli zkontrolovat, jestli se instalace dokončila, než se pokusíte použít prostředky. Tento druh balíčku prostředků může mít velikost až 512 MB. Tento typ doručení je určen metadaty
FastFollow
. - Balíčky na vyžádání se do zařízení nikdy nestáhnou, pokud ji aplikace výslovně nepožádá. Celková velikost všech balíčků prostředků nesmí překročit 2 Gb a můžete mít až 50 samostatných balíčků prostředků. Tento typ doručení je určen metadaty
OnDemand
.
V aplikacích .NET MAUI lze typ doručení zadat pomocí atributu DeliveryType
na:MauiAsset
<MauiAsset Update="Resources\Raw\myvideo.mp4" AssetPack="myassetpack" DeliveryType="FastFollow" />
Další informace o sadách assetů Androidu najdete v tématu Sady Asset Pack pro Android.
Podpora Androidu 15
.NET pro Android 9 přidává vazby .NET pro Android 15 (API 35). Pokud chcete vytvořit pro tato rozhraní API, aktualizujte cílovou architekturu projektu:
<TargetFramework>net9.0-android35</TargetFramework>
Metody s řazením LLVM
Metody virtuálních počítačů s nízkou úrovní (LLVM) jsou teď ve výchozím nastavení povolené v .NET pro Android 9 v jiných aplikacích než Blazor. Výsledkem je přibližně 10% zlepšení výkonu testovací aplikace.
V souboru projektu (.csproj):
<PropertyGroup Condition="'$(TargetFramework)' == 'net9.0-android'">
<AndroidEnableLLVM>false</AndroidEnableLLVM>
<AndroidEnableLLVMOptimizations>false</AndroidEnableLLVMOptimizations>
</PropertyGroup>
Vylepšení oříznutí
.NET pro Android 9 obsahuje opravy při použití úplného oříznutí pro zmenšení velikosti aplikace. Úplné oříznutí je obvykle povolené jenom pro sestavení vydané verze vaší aplikace a dá se nakonfigurovat v souboru projektu (.csproj):
<PropertyGroup Condition="'$(Configuration)' == 'Release' And '$(TargetFramework)' == 'net9.0-android'">
<TrimMode>Full</TrimMode>
</PropertyGroup>
.NET pro iOS
.NET 9 v systémech iOS, tvOS, Mac Catalyst a macOS používá Xcode 15.4 pro následující verze platformy:
- iOS: 17.5
- tvOS: 17.5
- Mac Catalyst: 17.5
- macOS: 14.5
Další informace o .NET 9 v systémech iOS, tvOS, Mac Catalyst a macOS najdete v následujících poznámkách k verzi:
- .NET 9.0.1xx RC1
- .NET 9.0.1xx Preview 7
- .NET 9.0.1xx Preview 6
- .NET 9.0.1xx Preview 5
- .NET 9.0.1xx Preview 4
- .NET 9.0.1xx Preview 3
- .NET 9.0.1xx Preview 2
- .NET 9.0.1xx Preview 1
Vazby
.NET pro iOS 9 zavádí možnost více cílových verzí .NET pro vazby iOS. Projekt knihovny může být například potřeba sestavit pro dvě odlišné verze iOS:
<TargetFrameworks>net9.0-ios17.0;net9.0-ios17.2</TargetFrameworks>
Tím se vytvoří dvě knihovny, jedna pomocí vazeb iOS 17.0 a jedna pomocí vazeb iOS 17.2.
Důležité
Projekt aplikace by měl vždy cílit na nejnovější sadu SDK pro iOS.
Nativní AOT pro iOS a Mac Catalyst
V .NET pro iOS 9 využívá nativní kompilace AOT (Head of Time) pro iOS a Mac Catalyst úplné oříznutí, aby se snížila velikost balíčku a výkon při spuštění vaší aplikace. Jedná se o funkci publikování, kterou můžete použít, když jste připraveni k odeslání aplikace.
Důležité
Aby bylo možné tuto funkci využít, musí být vaše aplikace a její závislosti plně ořízitelné.