.NET MAUI — egy Microsoft által készített többplatformos keretrendszer natív alkalmazások létrehozásához C# és XAML nyelven, amely 2022-ben jelent meg a .NET 6-tal együtt. A Microsoft .NET MAUI Documentation, 2024 szerint a MAUI támogatja az iOS, Android, Windows, macOS és Tizen platformokat, egyesítve őket egyetlen projektben közös kódbázissal. A keretrendszer a Xamarin.Forms közvetlen utódja.
Főbb pontok
.NET MAUI (Multi-platform App UI) — a Xamarin.Forms evolúciója, az alapoktól újragondolva a .NET 6+-hoz. Ellentétben a Xamarin.Forms-szal, amely külön projekteket igényelt minden platformhoz, a MAUI egységes struktúrát használ közös .csproj fájllal és Platforms/iOS, Platforms/Android, Platforms/Windows és Platforms/MacCatalyst platformmappákkal. A MAUI első stabil kiadása 2022 májusában történt.
A .NET MAUI legfontosabb különbsége az elődjéhez képest — teljes integráció a .NET 8 BCL-lel (Base Class Library). A fejlesztők közvetlen hozzáférést kapnak a System.Text.Json, System.Net.Http, System.Linq, System.IO és más API-khoz további SDK nélkül. A Xamarin.Forms a .NET Standard 2.0-t használta a közös logikához, ami korlátozta a hozzáférést a .NET platform új képességeihez.
A Microsoft Build 2024 szerint a .NET MAUI-t 40 000+ alkalmazásban használják az App Store-ban és a Google Play-ben. Az ismert projektek között van az UPS Mobile, a The Weather Channel és a Siemens Teamcenter. A Microsoft aktívan fejleszti a MAUI-t a .NET 9 keretében.
A .NET MAUI bejelentése a Microsoft Build 2020-n történt a .NET egyesítési stratégia részeként. A Microsoft egyesítette a .NET Core-t, a Mono-t és a .NET Framework-öt egyetlen .NET 5+ platformmá. A Xamarin.Forms lett a MAUI alapja, de a kódbázist teljesen újraírták: az elavult API-kat eltávolították, a renderelőket Handlerekre cserélték, a DependencyService-t DI-konténerre cserélték.
A .NET MAUI 8 verzió (2023. november) hozzáadta a Native AOT támogatását, a továbbfejlesztett CollectionView teljesítményt, a Blazor Hybrid-öt (Blazor komponensek beágyazása MAUI-alkalmazásba) és az új betűtípus-leképezést. A .NET MAUI 9 (2024) tartalmazza a C# 12 támogatását, a továbbfejlesztett integrációt a WinUI 3-mal és a macOS Sonoma-val, valamint az új Drag & Drop API-t minden platformhoz.
Az első különbség — egyetlen alkalmazás. A Xamarin.Forms-ban az iOS-hez és Android-hoz két külön projekt kellett egy megoldáson belül. A .NET MAUI-ban egy projekt platformmappákkal. Ez leegyszerűsíti a kódban való navigációt, a függőségek kezelését és a CI/CD-folyamatokat. A .csproj fájl SDK-style formátumot használ TargetFrameworks-szel: net8.0-android, net8.0-ios, net8.0-maccatalyst.
A második különbség — renderelési architektúra Handlereken keresztül renderelők helyett. A Xamarin.Forms-ban minden elemnek (Button, Label) saját Renderer osztálya volt, amely létrehozta a natív vezérlőt. A testreszabáshoz Custom Renderer-re volt szükség. A MAUI-ban a Handler egy könnyű objektum, amely az absztrakt elemet natív vezérlőre képezi le, és támogatja a Property Mappers-t a tulajdonságok frissítéséhez a vezérlő újbóli létrehozása nélkül.
A harmadik különbség — egyetlen DI-konténer Microsoft.Extensions.DependencyInjection. A Xamarin.Forms a DependencyService-t használta a platformimplementációk regisztrálásához. A MAUI a DI-t a keretrendszer magjába építi: a szolgáltatások a MauiAppBuilder-ben regisztrálódnak, a vezérlők a konstruktoron keresztül kapják a függőségeket. Ez leegyszerűsíti a tesztelést és követi a modern .NET gyakorlatokat.
A .NET MAUI architektúrája többrétegű modellen alapul. Az alsó réteg — .NET BCL és Mono Runtime (Android) / CoreCLR (Windows) / NativeAOT (iOS). A középső réteg — Microsoft.Maui.dll a keretrendszer magjával: Handlers, Layout, Graphics, Controls. A felső réteg — a fejlesztő alkalmazása XAML-oldalakkal, ViewModel-lel és szolgáltatásokkal.
Single Project — a .NET MAUI egyik legfontosabb architekturális jellemzője. Minden fájl három kategóriába van osztva: közös kód (Shared), platformkód (Platforms) és erőforrások (Resources). A .csproj-ban lévő multi-targeting határozza meg, hogy mely platformokra épül az alkalmazás. Minden platform csak a saját Platforms mappáját és a közös kódot fordítja le.
A platformkód feltételes mappákban található. A Platforms/Android tartalmazza a MainActivity.cs, MainApplication.cs és AndroidManifest.xml fájlokat. Platforms/iOS — AppDelegate.cs, Info.plist és Entitlements.plist. Platforms/Windows — Package.appxmanifest és App.xaml. A feltételes fordításhoz a kódban a #if ANDROID, #if IOS, #if WINDOWS, #if MACCATALYST direktívák használatosak.
XAML — deklaratív jelölőnyelv, a Xamarin.Forms-tól és a WPF-től örökölve. A .NET MAUI-ban a XAML oldalak (ContentPage), elrendezések (VerticalStackLayout, Grid, FlexLayout), elemek (Label, Entry, Button, Image) és vezérlők (CollectionView, CarouselView) leírására szolgál. A XAML a build fázisban BAML formátumba fordul.
Az MVVM minta a CommunityToolkit.Mvvm — egy Microsoft által készített nyílt forráskódú könyvtáron keresztül valósul meg. Az [ObservableProperty] attribútum INotifyPropertyChanged tulajdonságokat generál, a [RelayCommand] metódusokból hoz létre parancsokat. A Source Generator CommunityToolkit.Mvvm 8.2 átalakítja a partial class ViewModel-t, ObservableObject-et generálva Reflection nélkül. Ez 30%-kal gyorsítja a Binding-et a kézi megvalósításhoz képest.
using Microsoft.Maui;
using Microsoft.Maui.Controls;
namespace MauiApp;
public class MainPage : ContentPage
{
public MainPage()
{
Title = "MAUI App";
Content = new VerticalStackLayout
{
Spacing = 12,
Padding = new Thickness(16),
Children =
{
new Label
{
Text = "Hello, .NET MAUI!",
FontSize = 24,
FontAttributes = FontAttributes.Bold
},
new Button
{
Text = "Nyomj meg",
BackgroundColor = Colors.Blue,
TextColor = Colors.White,
Command = new Command(async () =>
await DisplayAlert("Helló", "Világ", "OK"))
}
}
};
}
}
.NET MAUI 5 platformot támogat: iOS 15.0+, Android 5.0 (API 21)+, Windows 10 1809+, macOS 12.0+ (MacCatalyst) és Tizen 6.5+. Minden platform a saját vezérlő- és API-készletét használja. Az iOS a UIKit-et használja Mac Catalyst-en keresztül, az Android — AndroidX-et a Xamarin.Android-n keresztül, a Windows — WinUI 3-at, a macOS — AppKit-et Mac Catalyst-en keresztül.
iOS-en és Androidon a MAUI ugyanazokat a renderelési mechanizmusokat használja, mint a Xamarin.Forms — natív UI vezérlőket. Azonban a Handlers rugalmasabb testreszabást biztosítanak. Az iOS-en a Button platform konfigurációjához az OnPlatform<Button> használatos a PlatformConfiguration.iOS-szel. A Windows-hoz a MAUI a WinUI 3-at használja — egy modern Microsoft UI keretrendszert Fluent Design System támogatással.
A macOS támogatás a Mac Catalyst — az Apple technológiáján keresztül került hozzáadásra, amely UIKit alkalmazásokat futtat Mac-en. Ez lehetővé teszi az iOS MAUI kód 100%-os újrafelhasználását a macOS verzióhoz. A speciális Mac funkciókhoz (Menu Bar, Touch Bar) a MAUI platform API-kat biztosít Mac Catalyst-en és NSView burkolókon keresztül.
Tizen — a Samsung platformja Smart TV-khez, okostelefonokhoz és okosórákhoz. A Tizen támogatás a .NET MAUI-ban a Samsung Tizen .NET-en keresztül valósul meg. A MAUI alkalmazások a Samsung TizenFX kötéseken keresztül fordulnak Tizen-re. Azonban a Tizen nem prioritása a Microsoftnak — a frissítések 1–2 hónapos késéssel jelennek meg.
| Platform | Minimális verzió | UI keretrendszer | Státusz |
|---|---|---|---|
| iOS | iOS 15.0 | UIKit (Mac Catalyst) | Stabil |
| Android | API 21 (5.0) | AndroidX / Material 3 | Stabil |
| Windows | Win 10 1809 | WinUI 3 / Fluent Design | Stabil |
| macOS | macOS 12.0 | AppKit (Mac Catalyst) | Stabil |
| Tizen | Tizen 6.5 | TizenFX / Samsung | Kiegészítő |
Egységes kódbázis — a .NET MAUI csökkenti a kódismétlés mértékét. Egyetlen projekt C#-ban és XAML-ben 5 platformra fordul, akár 95% közös kódot biztosítva az egyszerű UI-val rendelkező alkalmazások számára. Az üzleti logika, szolgáltatások, adatmodellek és HTTP kliensek a közös kódban találhatók. Csak a platformfunkciók (kamera, helymeghatározás, biometria) igényelnek külön implementációkat DI-n keresztül.
Teljesítmény — a .NET MAUI magasabb, mint a Xamarin.Forms-é. A Handlers csökkentik a renderelési többletterhelést: a Microsoft tesztei 20–30%-os képernyő-megjelenítési időcsökkenést mutatnak a Xamarin.Forms 5.0-hoz képest. A Native AOT iOS-en közvetlenül ARM64 utasításokra fordítja a C# kódot, kiküszöbölve a JIT fordítást és 40%-kal csökkentve az indítási időt.
Blazor Hybrid — a .NET MAUI egyedi képessége. A BlazorWebView közvetlenül a MAUI alkalmazásba ágyazza a Blazor komponenseket. A webes felületek fejlesztői újrahasználhatják a Blazor komponenseket (Razor oldalak, JS-interop, CSS stílusok) a mobilalkalmazásban. A Blazor Hybrid mind az 5 MAUI platformon működik a Blazor komponensek kódjának módosítása nélkül.
.NET ökoszisztéma — hozzáférés több ezer NuGet csomaghoz: Entity Framework Core adatbázisokhoz, Serilog naplózáshoz, Polly ismételt HTTP kérésekhez, FluentValidation érvényesítéshez. A CommunityToolkit.Maui kész UI elemeket biztosít: Popup, Toast, Snackbar, SemanticScreenReader az akadálymentesítéshez. A .NET MAUI integrálódik az Azure-ral, SignalR-rel és a Microsoft Graph SDK-val.
Fejlesztői eszközök — Visual Studio 2022 és Rider a JetBrains-től. A XAML Hot Reload frissíti a UI-t az alkalmazás újraindítása nélkül 1–2 másodperc alatt. A C# Hot Reload (.NET 6+-tól) újrafordítja a metódusmódosítást a folyamat újraindítása nélkül. A Visual Studio Debugger, Profiler és IntelliCode kiegészíti a teljesítmény- és kódminőség-diagnosztikai eszközöket.
Gyakran ismételt kérdések
.NET MAUI — egy Microsoft által készített többplatformos keretrendszer natív alkalmazások létrehozásához C# és XAML nyelven iOS, Android, Windows, macOS és Tizen rendszerekre. A Xamarin.Forms utódja, beépítve a .NET 6+-ba, és egyetlen projektet (Single Project) használ a platformonkénti külön projektek helyett.
.NET MAUI egyetlen projektet, Handlereket renderelők helyett, beépített DI-konténert, Native AOT-t iOS-hez és Blazor Hybrid-öt használ. A Xamarin.Forms külön projekteket igényel minden platformhoz, Custom Renderer-t használ a UI testreszabásához, DependencyService-t a DI-hez, és nem támogatja a Blazort. A .NET MAUI a .NET része, a Xamarin.Forms egy külön SDK.
Igen, a .NET MAUI támogatja a macOS-t a Mac Catalyst-en keresztül (minimális verzió: macOS 12.0). Az iOS alkalmazások a MAUI-ban automatikusan Mac-re fordulnak kódmódosítás nélkül. A natív Mac funkciókhoz (Menu Bar, Dock, Touch ID) platformhívások használatosak a Mac Catalyst-en és NSView burkolókon keresztül a Platforms/MacCatalyst mappában.
Nem, a .NET MAUI nem kompatibilis a Dart/Flutter csomagokkal. A MAUI a .NET ökoszisztémát és NuGet csomagokat használja. A platformfunkciókhoz (kamera, Bluetooth, biometria) natív könyvtárak használatosak az Android Bindings (Kotlin/Java) és iOS Bindings (Objective-C/Swift) segítségével. A CommunityToolkit.Maui kész burkolókat biztosít a népszerű forgatókönyvekhez.
A teljesítménybeli különbség minimális. A .NET MAUI Handlerekkel és Native AOT-val iOS-en eléri a natív SwiftUI alkalmazás teljesítményének 95–98%-át. Androidon a különbség a Kotlin alkalmazáshoz képest 3–7% a UI renderelési tesztekben (Microsoft Benchmarks, 2024). A legtöbb üzleti alkalmazás esetében a különbség észrevehetetlen a felhasználó számára.
Összefoglalás
Kulcsrakész mobilalkalmazást fejlesztünk
Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.
Olvassa el is