.NET MAUI — is een cross-platform framework van Microsoft voor het maken van native applicaties in C# en XAML, uitgebracht in 2022 samen met .NET 6. Volgens Microsoft .NET MAUI Documentation, 2024 ondersteunt MAUI iOS, Android, Windows, macOS en Tizen, en verenigt ze in één project met een gemeenschappelijke codebase. Het framework is de directe opvolger van Xamarin.Forms.
Belangrijkste punten
.NET MAUI (Multi-platform App UI) — is de evolutie van Xamarin.Forms, vanaf de basis herontworpen voor .NET 6+. In tegenstelling tot Xamarin.Forms, dat aparte projecten voor elk platform vereiste, gebruikt MAUI één structuur met een gedeeld .csproj-bestand en platformmappen Platforms/iOS, Platforms/Android, Platforms/Windows en Platforms/MacCatalyst. De eerste stabiele release van MAUI vond plaats in mei 2022.
Het belangrijkste verschil van .NET MAUI met zijn voorganger — volledige integratie met .NET 8 BCL (Base Class Library). Ontwikkelaars hebben direct toegang tot System.Text.Json, System.Net.Http, System.Linq, System.IO en andere API's zonder extra SDK. Xamarin.Forms gebruikte .NET Standard 2.0 voor gedeelde logica, wat de toegang tot nieuwe .NET-platformmogelijkheden beperkte.
Volgens Microsoft Build 2024 wordt .NET MAUI gebruikt in 40.000+ apps in de App Store en Google Play. Bekende projecten zijn UPS Mobile, The Weather Channel en Siemens Teamcenter. Microsoft ontwikkelt MAUI actief binnen .NET 9.
De aankondiging van .NET MAUI vond plaats op Microsoft Build 2020 als onderdeel van de .NET-unificatiestrategie. Microsoft verenigde .NET Core, Mono en .NET Framework in één .NET 5+-platform. Xamarin.Forms werd de basis voor MAUI, maar de codebase werd volledig herschreven: verouderde API's werden verwijderd, renderers vervangen door Handlers, DependencyService vervangen door een DI-container.
Versie .NET MAUI 8 (november 2023) voegde ondersteuning toe voor Native AOT, verbeterde CollectionView-prestaties, Blazor Hybrid (het inbedden van Blazor-componenten in MAUI-apps) en een nieuwe lettertoewijzing. .NET MAUI 9 (2024) bevat ondersteuning voor C# 12, verbeterde integratie met WinUI 3 en macOS Sonoma, en een nieuwe Drag & Drop API voor alle platforms.
Het eerste verschil — één applicatie. In Xamarin.Forms waren voor iOS en Android twee aparte projecten in één oplossing nodig. In .NET MAUI één project met platformmappen. Dit vereenvoudigt codenavigatie, afhankelijkheidsbeheer en CI/CD-pijplijnen. Het .csproj-bestand gebruikt SDK-style formaat met TargetFrameworks: net8.0-android, net8.0-ios, net8.0-maccatalyst.
Het tweede verschil — renderarchitectuur via Handlers in plaats van renderers. In Xamarin.Forms had elk element (Button, Label) zijn eigen Renderer-klasse die een native besturingselement creëerde. Voor aanpassing was een Custom Renderer nodig. In MAUI is een Handler een lichtgewicht object dat een abstract element naar een native besturingselement map en Property Mappers ondersteunt om eigenschappen bij te werken zonder het besturingselement opnieuw te maken.
Het derde verschil — één DI-container Microsoft.Extensions.DependencyInjection. Xamarin.Forms gebruikte DependencyService voor registratie van platformimplementaties. MAUI integreert DI in de kern van het framework: services worden geregistreerd in MauiAppBuilder, controllers ontvangen afhankelijkheden via de constructor. Dit vereenvoudigt testen en volgt moderne .NET-praktijken.
De architectuur van .NET MAUI is gebaseerd op een meerlaags model. De onderste laag — .NET BCL en Mono Runtime (Android) / CoreCLR (Windows) / NativeAOT (iOS). De middelste laag — Microsoft.Maui.dll met de kern van het framework: Handlers, Layout, Graphics, Controls. De bovenste laag — de ontwikkelaarstoepassing met XAML-pagina's, ViewModel en services.
Single Project — is een belangrijk architectonisch kenmerk van .NET MAUI. Alle bestanden zijn verdeeld in drie categorieën: gedeelde code (Shared), platformcode (Platforms) en resources (Resources). Multi-targeting in .csproj geeft aan voor welke platforms de applicatie wordt gebouwd. Elk platform compileert alleen zijn eigen Platforms-map en de gedeelde code.
Platformcode bevindt zich in conditionele mappen. Platforms/Android bevat MainActivity.cs, MainApplication.cs en AndroidManifest.xml. Platforms/iOS — AppDelegate.cs, Info.plist en Entitlements.plist. Platforms/Windows — Package.appxmanifest en App.xaml. Voor conditionele compilatie in code worden de directives #if ANDROID, #if IOS, #if WINDOWS, #if MACCATALYST gebruikt.
XAML — een declaratieve opmaaktaal, overgenomen van Xamarin.Forms en WPF. In .NET MAUI wordt XAML gebruikt voor het beschrijven van pagina's (ContentPage), layouts (VerticalStackLayout, Grid, FlexLayout), elementen (Label, Entry, Button, Image) en besturingselementen (CollectionView, CarouselView). XAML wordt in de bouwfase gecompileerd naar BAML-formaat.
Het MVVM-patroon wordt geïmplementeerd via CommunityToolkit.Mvvm — een open-source bibliotheek van Microsoft. Het attribuut [ObservableProperty] genereert INotifyPropertyChanged-eigenschappen, [RelayCommand] maakt commands van methoden. Source Generator CommunityToolkit.Mvvm 8.2 transformeert de partial class ViewModel en genereert ObservableObject zonder Reflection. Dit versnelt Binding met 30% vergeleken met handmatige implementatie.
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 = "Druk op mij",
BackgroundColor = Colors.Blue,
TextColor = Colors.White,
Command = new Command(async () =>
await DisplayAlert("Hallo", "Wereld", "OK"))
}
}
};
}
}
.NET MAUI ondersteunt 5 platforms: iOS 15.0+, Android 5.0 (API 21)+, Windows 10 1809+, macOS 12.0+ (MacCatalyst) en Tizen 6.5+. Elk platform gebruikt zijn eigen set besturingselementen en API's. iOS gebruikt UIKit via Mac Catalyst, Android — AndroidX via Xamarin.Android, Windows — WinUI 3, macOS — AppKit via Mac Catalyst.
Op iOS en Android gebruikt MAUI dezelfde rendermechanismen als Xamarin.Forms — native UI-besturingselementen. Handlers bieden echter flexibelere aanpassing. Voor platformconfiguratie van Button op iOS wordt OnPlatform<Button> met PlatformConfiguration.iOS gebruikt. Voor Windows gebruikt MAUI WinUI 3 — een modern UI-framework van Microsoft met ondersteuning voor Fluent Design System.
macOS-ondersteuning is toegevoegd via Mac Catalyst — Apple-technologie die UIKit-apps op Mac uitvoert. Dit maakt 100% hergebruik van iOS MAUI-code voor de macOS-versie mogelijk. Voor specifieke Mac-functies (Menu Bar, Touch Bar) biedt MAUI platform-API's via Mac Catalyst en NSView-wrappers.
Tizen — Samsung-platform voor Smart TV, smartphones en smartwatches. Tizen-ondersteuning in .NET MAUI is geïmplementeerd via Samsung Tizen .NET. MAUI-apps worden gecompileerd voor Tizen via Samsung TizenFX-bindings. Tizen is echter geen prioriteitsplatform voor Microsoft — updates verschijnen met 1–2 maanden vertraging.
| Platform | Minimale versie | UI-framework | Status |
|---|---|---|---|
| iOS | iOS 15.0 | UIKit (Mac Catalyst) | Stabiel |
| Android | API 21 (5.0) | AndroidX / Material 3 | Stabiel |
| Windows | Win 10 1809 | WinUI 3 / Fluent Design | Stabiel |
| macOS | macOS 12.0 | AppKit (Mac Catalyst) | Stabiel |
| Tizen | Tizen 6.5 | TizenFX / Samsung | Aanvullend |
Eén codebase — .NET MAUI vermindert de hoeveelheid codeduplicatie. Eén project in C# en XAML compileert voor 5 platforms en zorgt voor tot 95% gedeelde code voor apps met een eenvoudige UI. Bedrijfslogica, services, datamodellen en HTTP-clients bevinden zich in gedeelde code. Alleen platformfuncties (camera, geolocatie, biometrie) vereisen aparte implementaties via DI.
Prestaties van .NET MAUI zijn hoger dan van Xamarin.Forms. Handlers verminderen de renderoverhead: Microsoft-tests tonen een vermindering van de schermweergavetijd met 20–30% in vergelijking met Xamarin.Forms 5.0. Native AOT op iOS compileert C#-code direct naar ARM64-instructies, elimineert JIT-compilatie en verkort de opstarttijd met 40%.
Blazor Hybrid — een unieke mogelijkheid van .NET MAUI. BlazorWebView embedt Blazor-componenten direct in de MAUI-app. Webinterfacontwikkelaars kunnen Blazor-componenten (Razor-pagina's, JS-interop, CSS-stijlen) hergebruiken in de mobiele app. Blazor Hybrid werkt op alle 5 MAUI-platforms zonder wijziging van de Blazor-componentcode.
.NET-ecosysteem — toegang tot duizenden NuGet-pakketten: Entity Framework Core voor databankwerk, Serilog voor logging, Polly voor herhaalde HTTP-verzoeken, FluentValidation voor validatie. CommunityToolkit.Maui bied kant-en-klare UI-elementen: Popup, Toast, Snackbar, SemanticScreenReader voor toegankelijkheid. .NET MAUI integreert met Azure, SignalR en Microsoft Graph SDK.
Ontwikkeltools — Visual Studio 2022 en Rider van JetBrains. XAML Hot Reload werkt UI bij zonder de app opnieuw te starten in 1–2 seconden. C# Hot Reload (vanaf .NET 6+) hercompileert een methodeaanpassing zonder het proces opnieuw te starten. Visual Studio Debugger, Profiler en IntelliCode vullen de set tools voor prestatie- en codekwaliteitsdiagnose aan.
Veelgestelde vragen
.NET MAUI — is een cross-platform framework van Microsoft voor het maken van native apps in C# en XAML voor iOS, Android, Windows, macOS en Tizen. Het is de opvolger van Xamarin.Forms, ingebouwd in .NET 6+ en gebruikt één project (Single Project) in plaats van aparte projecten voor elk platform.
.NET MAUI gebruikt één project, Handlers in plaats van renderers, een ingebouwde DI-container, Native AOT voor iOS en Blazor Hybrid. Xamarin.Forms vereist aparte projecten voor elk platform, gebruikt Custom Renderer voor UI-aanpassing, DependencyService voor DI en ondersteunt Blazor niet. .NET MAUI is onderdeel van .NET, Xamarin.Forms is een aparte SDK.
Ja, .NET MAUI ondersteunt macOS via Mac Catalyst (minimale versie macOS 12.0). iOS-apps in MAUI worden automatisch gecompileerd voor Mac zonder codeaanpassingen. Voor native Mac-functies (Menu Bar, Dock, Touch ID) worden platformaanroepen gebruikt via Mac Catalyst en NSView-wrappers in de map Platforms/MacCatalyst.
Nee, .NET MAUI is niet compatibel met Dart/Flutter-pakketten. MAUI gebruikt het .NET-ecosysteem en NuGet-pakketten. Voor platformfuncties (camera, Bluetooth, biometrie) worden native bibliotheken gebruikt via Android Bindings (Kotlin/Java) en iOS Bindings (Objective-C/Swift). CommunityToolkit.Maui biedt kant-en-klare wrappers voor populaire scenario's.
Het prestatieverschil is minimaal. .NET MAUI met Handlers en Native AOT op iOS bereikt 95–98% van de prestaties van een native SwiftUI-app. Op Android is het verschil met een Kotlin-app 3–7% in UI-rendertests (Microsoft Benchmarks, 2024). Voor de meeste bedrijfstoepassingen is het verschil onmerkbaar voor de gebruiker.
Samenvatting
We ontwikkelen een mobiele applicatie turnkey
IT Sectr creëert sinds 2017 iOS- en Android-applicaties voor startups en bedrijven. We adviseren u en stellen de beste oplossing voor.
Lees ook