.NET MAUI — är ett plattformsoberoende ramverk från Microsoft för att skapa native-applikationer i C# och XAML, som släpptes 2022 tillsammans med .NET 6. Enligt Microsoft .NET MAUI Documentation, 2024 stöder MAUI iOS, Android, Windows, macOS och Tizen, och förenar dem i ett enda projekt med en gemensam kodbas. Ramverket är den direkta efterträdaren till Xamarin.Forms.
Huvudpunkter
.NET MAUI (Multi-platform App UI) — är evolutionen av Xamarin.Forms, omdesignad från grunden för .NET 6+. Till skillnad från Xamarin.Forms, som krävde separata projekt för varje plattform, använder MAUI en enhetlig struktur med en gemensam .csproj-fil och plattformsmappar Platforms/iOS, Platforms/Android, Platforms/Windows och Platforms/MacCatalyst. Den första stabila versionen av MAUI släpptes i maj 2022.
Den viktigaste skillnaden mellan .NET MAUI och dess föregångare — fullständig integration med .NET 8 BCL (Base Class Library). Utvecklare har direkt åtkomst till System.Text.Json, System.Net.Http, System.Linq, System.IO och andra API:er utan extra SDK. Xamarin.Forms använde .NET Standard 2.0 för gemensam logik, vilket begränsade åtkomsten till nya funktioner i .NET-plattformen.
Enligt Microsoft Build 2024 används .NET MAUI i 40 000+ applikationer i App Store och Google Play. Bland kända projekt finns UPS Mobile, The Weather Channel och Siemens Teamcenter. Microsoft utvecklar aktivt MAUI inom ramen för .NET 9.
Tillkännagivandet av .NET MAUI skedde på Microsoft Build 2020 som en del av .NET-enhetlighetsstrategin. Microsoft enade .NET Core, Mono och .NET Framework till en enda .NET 5+-plattform. Xamarin.Forms blev grunden för MAUI, men kodbasen skrevs om helt: föråldrade API:er togs bort, renderare ersattes med Handlers, DependencyService ersattes med en DI-behållare.
Version .NET MAUI 8 (november 2023) lade till stöd för Native AOT, förbättrad CollectionView-prestanda, Blazor Hybrid (inbäddning av Blazor-komponenter i MAUI-applikationer) och ny teckensnittsmappning. .NET MAUI 9 (2024) inkluderar stöd för C# 12, förbättrad integration med WinUI 3 och macOS Sonoma, samt ett nytt Drag & Drop API för alla plattformar.
Första skillnaden — en enda applikation. I Xamarin.Forms krävdes två separata projekt för iOS och Android i en enda lösning. I .NET MAUI ett projekt med plattformsmappar. Detta förenklar kodnavigering, beroendehantering och CI/CD-pipelines. .csproj-filen använder SDK-style-format med TargetFrameworks: net8.0-android, net8.0-ios, net8.0-maccatalyst.
Andra skillnaden — renderingsarkitektur genom Handlers istället för renderare. I Xamarin.Forms hade varje element (Button, Label) sin egen Renderer-klass som skapade en native-kontroll. För anpassning krävdes en Custom Renderer. I MAUI är en Handler ett lättviktsobjekt som mappar ett abstrakt element till en native-kontroll och stöder Property Mappers för att uppdatera egenskaper utan att återskapa kontrollen.
Tredje skillnaden — en enda DI-behållare Microsoft.Extensions.DependencyInjection. Xamarin.Forms använde DependencyService för registrering av plattformsimplementeringar. MAUI bäddar in DI i ramverkets kärna: tjänster registreras i MauiAppBuilder, kontroller tar emot beroenden via konstruktorn. Detta förenklar testning och följer moderna .NET-praxis.
Arkitekturen för .NET MAUI är baserad på en flerskiktsmodell. Det nedre lagret — .NET BCL och Mono Runtime (Android) / CoreCLR (Windows) / NativeAOT (iOS). Mellersta lagret — Microsoft.Maui.dll med ramverkets kärna: Handlers, Layout, Graphics, Controls. Övre lagret — utvecklarens applikation med XAML-sidor, ViewModel och tjänster.
Single Project — är en viktig arkitektonisk egenskap hos .NET MAUI. Alla filer är uppdelade i tre kategorier: gemensam kod (Shared), plattformskod (Platforms) och resurser (Resources). Multi-targeting i .csproj anger för vilka plattformar applikationen byggs. Varje plattform kompilerar bara sin egen Platforms-mapp och den gemensamma koden.
Plattformskod finns i villkorliga mappar. Platforms/Android innehåller MainActivity.cs, MainApplication.cs och AndroidManifest.xml. Platforms/iOS — AppDelegate.cs, Info.plist och Entitlements.plist. Platforms/Windows — Package.appxmanifest och App.xaml. För villkorlig kompilering i koden används direktiven #if ANDROID, #if IOS, #if WINDOWS, #if MACCATALYST.
XAML — ett deklarativt märkspråk, ärvt från Xamarin.Forms och WPF. I .NET MAUI används XAML för att beskriva sidor (ContentPage), layouter (VerticalStackLayout, Grid, FlexLayout), element (Label, Entry, Button, Image) och kontroller (CollectionView, CarouselView). XAML kompileras till BAML-format i byggfasen.
MVVM-mönstret implementeras via CommunityToolkit.Mvvm — ett open-source-bibliotek från Microsoft. Attributet [ObservableProperty] genererar INotifyPropertyChanged-egenskaper, [RelayCommand] skapar kommandon från metoder. Source Generator CommunityToolkit.Mvvm 8.2 transformerar partial class ViewModel och genererar ObservableObject utan Reflection. Detta påskyndar Binding med 30% jämfört med manuell implementering.
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 = "Tryck på mig",
BackgroundColor = Colors.Blue,
TextColor = Colors.White,
Command = new Command(async () =>
await DisplayAlert("Hej", "Världen", "OK"))
}
}
};
}
}
.NET MAUI stöder 5 plattformar: iOS 15.0+, Android 5.0 (API 21)+, Windows 10 1809+, macOS 12.0+ (MacCatalyst) och Tizen 6.5+. Varje plattform använder sin egen uppsättning kontroller och API:er. iOS använder UIKit via Mac Catalyst, Android — AndroidX via Xamarin.Android, Windows — WinUI 3, macOS — AppKit via Mac Catalyst.
På iOS och Android använder MAUI samma renderingsmekanismer som Xamarin.Forms — native UI-kontroller. Men Handlers ger mer flexibel anpassning. För plattformskonfiguration av Button på iOS används OnPlatform<Button> med PlatformConfiguration.iOS. För Windows använder MAUI WinUI 3 — ett modernt UI-ramverk från Microsoft med stöd för Fluent Design System.
macOS-stöd har lagts till via Mac Catalyst — Apple-teknik som kör UIKit-applikationer på Mac. Detta möjliggör 100% återanvändning av iOS MAUI-kod för macOS-versionen av applikationen. För specifika Mac-funktioner (Menu Bar, Touch Bar) tillhandahåller MAUI plattforms-API:er via Mac Catalyst och NSView-omslag.
Tizen — Samsung-plattform för Smart TV, smartphones och smartklockor. Tizen-stöd i .NET MAUI implementeras via Samsung Tizen .NET. MAUI-applikationer kompileras för Tizen via Samsung TizenFX-bindningar. Tizen är dock ingen prioriterad plattform för Microsoft — uppdateringar för den kommer med 1–2 månaders försening.
| Plattform | Minsta version | UI-ramverk | Status |
|---|---|---|---|
| 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 | Extra |
Enhetlig kodbas — .NET MAUI minskar mängden kodduplicering. Ett projekt i C# och XAML kompileras för 5 plattformar och ger upp till 95% gemensam kod för applikationer med enkelt UI. Affärslogik, tjänster, datamodeller och HTTP-klienter finns i gemensam kod. Endast plattformsfunktioner (kamera, geolokalisering, biometri) kräver separata implementeringar via DI.
Prestanda för .NET MAUI är högre än för Xamarin.Forms. Handlers minskar renderingsomkostnaderna: Microsofts tester visar en minskning av skärmrenderingstiden med 20–30% jämfört med Xamarin.Forms 5.0. Native AOT på iOS kompilerar C#-kod direkt till ARM64-instruktioner, eliminerar JIT-kompilering och minskar starttiden med 40%.
Blazor Hybrid — en unik förmåga hos .NET MAUI. BlazorWebView bäddar in Blazor-komponenter direkt i MAUI-applikationen. Webbgränssnittsutvecklare kan återanvända Blazor-komponenter (Razor-sidor, JS-interop, CSS-stilar) i mobilapplikationen. Blazor Hybrid fungerar på alla 5 MAUI-plattformar utan att ändra koden för Blazor-komponenterna.
.NET-ekosystemet — tillgång till tusentals NuGet-paket: Entity Framework Core för databearbete, Serilog för loggning, Polly för återkommande HTTP-förfrågningar, FluentValidation för validering. CommunityToolkit.Maui tillhandahåller färdiga UI-element: Popup, Toast, Snackbar, SemanticScreenReader för tillgänglighet. .NET MAUI integreras med Azure, SignalR och Microsoft Graph SDK.
Utvecklingsverktyg — Visual Studio 2022 och Rider från JetBrains. XAML Hot Reload uppdaterar UI utan att starta om applikationen på 1–2 sekunder. C# Hot Reload (från .NET 6+) kompilerar om en metodändring utan att starta om processen. Visual Studio Debugger, Profiler och IntelliCode kompletterar verktygssatsen för prestanda- och kodkvalitetsdiagnostik.
Vanliga frågor
.NET MAUI — är ett plattformsoberoende ramverk från Microsoft för att skapa native-appar i C# och XAML för iOS, Android, Windows, macOS och Tizen. Det är efterträdaren till Xamarin.Forms, inbäddat i .NET 6+ och använder ett enda projekt (Single Project) istället för separata projekt för varje plattform.
.NET MAUI använder ett enda projekt, Handlers istället för renderare, inbyggd DI-behållare, Native AOT för iOS och Blazor Hybrid. Xamarin.Forms kräver separata projekt för varje plattform, använder Custom Renderer för UI-anpassning, DependencyService för DI och stöder inte Blazor. .NET MAUI är en del av .NET, Xamarin.Forms är ett separat SDK.
Ja, .NET MAUI stöder macOS via Mac Catalyst (minsta version macOS 12.0). iOS-appar i MAUI kompileras automatiskt för Mac utan kodändringar. För inbyggda Mac-funktioner (Menu Bar, Dock, Touch ID) används plattformssamtal via Mac Catalyst och NSView-omslag i mappen Platforms/MacCatalyst.
Nej, .NET MAUI är inte kompatibelt med Dart/Flutter-paket. MAUI använder .NET-ekosystemet och NuGet-paket. För plattformsfunktioner (kamera, Bluetooth, biometri) används inbyggda bibliotek via Android Bindings (Kotlin/Java) och iOS Bindings (Objective-C/Swift). CommunityToolkit.Maui tillhandahåller färdiga omslag för populära scenarier.
Skillnaden i prestanda är minimal. .NET MAUI med Handlers och Native AOT på iOS når 95–98% av prestandan hos en native SwiftUI-app. På Android är skillnaden med en Kotlin-app 3–7% i UI-renderingstester (Microsoft Benchmarks, 2024). För de flesta företagsapplikationer är skillnaden omärkbar för användaren.
Sammanfattning
Vi utvecklar en mobil applikation nyckelfärdigt
IT Sectr skapar iOS- och Android-applikationer för startups och företag sedan 2017. Vi ger dig råd och föreslår den bästa lösningen.
Läs också