Sdílet prostřednictvím


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:

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í:

Přehled záhlaví .NET MAUI

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, LeadingContenta 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="&#xE713;"
                                 FontFamily="SegoeMDL2"/>
            </ImageButton.Source>
        </ImageButton>
    </TitleBar.TrailingContent>
</TitleBar>

Následující snímek obrazovky ukazuje výsledný vzhled:

Snímek obrazovky záhlaví .NET MAUI

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, Datea 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 Funcvrá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í hodnota HandlerProperties.DisconnectPolicy připojené vlastnosti.
  • Manual, což označuje, že obslužné rutiny budou muset být odpojeny ručně vyvoláním DisconnectHandler 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é IViewmetody 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=fullpro 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 falsehodnotu , [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 falsehodnotu .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á, falsenebude 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 , Windowprostř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) z VisualElement.

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:

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:

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é.

Viz také