.NET MAUI — vad är det, arkitektur och plattformsoberoende utveckling

Författare: IT Sectr Publicerad: 2026-05-01 Lästid: 8 min

.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 — efterträdare till Xamarin.Forms, inbäddad i .NET 6+ utan separat SDK
  • Ett enda Single Project ersätter tre separata plattformsprojekt
  • XAML och C# används för deklarativ UI-byggnad och affärslogik
  • Handlers har ersatt de föråldrade Xamarin.Forms-renderarna för plattformsabstraktion
  • Stöd för 5 plattformar: iOS, Android, Windows, macOS, Tizen

Vad är .NET MAUI

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

Historia och ursprung för .NET MAUI

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.

Skillnad mellan .NET MAUI och Xamarin.Forms

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.

Arkitektur för .NET MAUI

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 och Multi-Targeting

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 och MVVM i .NET MAUI

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.

Exempel på applikation i .NET MAUI

csharp
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"))
                }
            }
        };
    }
}

Plattformar och support

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

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.

PlattformMinsta versionUI-ramverkStatus
iOSiOS 15.0UIKit (Mac Catalyst)Stabil
AndroidAPI 21 (5.0)AndroidX / Material 3Stabil
WindowsWin 10 1809WinUI 3 / Fluent DesignStabil
macOSmacOS 12.0AppKit (Mac Catalyst)Stabil
TizenTizen 6.5TizenFX / SamsungExtra

Fördelar med .NET MAUI

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

Vad är .NET MAUI?

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

Vad skiljer .NET MAUI från Xamarin.Forms?

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

Stöder .NET MAUI macOS?

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.

Kan man använda Flutter-paket i .NET MAUI?

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.

Är .NET MAUI långsammare än en native-app?

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

  • .NET MAUI — plattformsoberoende ramverk från Microsoft i C# och XAML, efterträdare till Xamarin.Forms
  • Single Project med multi-targeting ersätter 3 separata projekt med en konfiguration
  • Handlers ger snabbare rendering än Xamarin.Forms-renderare
  • Blazor Hybrid gör det möjligt att bädda in webbkomponenter direkt i mobilapplikationen
  • 5 plattformar — iOS 15+, Android 5.0+, Windows 10, macOS 12+, Tizen 6.5+
  • Native AOT på iOS minskar starttiden med 40% och den binära filstorleken
  • Välj .NET MAUI för .NET-projekt med behov av plattformsoberoende och tillgång till native API:er

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.

Diskutera projektet

Läs också