.NET MAUI — to wieloplatformowy framework Microsoft do tworzenia natywnych aplikacji w C# i XAML, wydany w 2022 roku wraz z .NET 6. Według Microsoft .NET MAUI Documentation, 2024, MAUI obsługuje iOS, Android, Windows, macOS i Tizen, łącząc je w jeden projekt ze wspólną bazą kodu. Framework jest bezpośrednim następcą Xamarin.Forms.
Najważniejsze
.NET MAUI (Multi-platform App UI) — to ewolucja Xamarin.Forms, przeprojektowana od podstaw pod .NET 6+. W przeciwieństwie do Xamarin.Forms, który wymagał oddzielnych projektów dla każdej platformy, MAUI używa jednolitej struktury ze wspólnym plikiem .csproj i folderami platformowymi Platforms/iOS, Platforms/Android, Platforms/Windows i Platforms/MacCatalyst. Pierwsze stabilne wydanie MAUI miało miejsce w maju 2022 roku.
Kluczowa różnica .NET MAUI od poprzednika — pełna integracja z .NET 8 BCL (Base Class Library). Deweloperzy mają dostęp do System.Text.Json, System.Net.Http, System.Linq, System.IO i innych API bezpośrednio bez dodatkowego SDK. Xamarin.Forms używał .NET Standard 2.0 do wspólnej logiki, co ograniczało dostęp do nowych możliwości platformy .NET.
Według danych Microsoft Build 2024, .NET MAUI jest używany w 40 000+ aplikacjach w App Store i Google Play. Wśród znanych projektów — UPS Mobile, The Weather Channel i Siemens Teamcenter. Microsoft aktywnie rozwija MAUI w ramach .NET 9, zaplanowanego na listopad 2024 roku.
Zapowiedź .NET MAUI miała miejsce na Microsoft Build 2020 jako część strategii unifikacji .NET. Microsoft połączył .NET Core, Mono i .NET Framework w jedną platformę .NET 5+. Xamarin.Forms stał się podstawą dla MAUI, ale baza kodu została całkowicie przepisana: przestarzałe API usunięto, rendery zastąpiono Handlerami, DependencyService zastąpiono kontenerem DI.
Wersja .NET MAUI 8 (listopad 2023) dodała obsługę Native AOT, ulepszoną wydajność CollectionView, Blazor Hybrid (osadzanie komponentów Blazor w aplikacji MAUI) i nowe mapowanie czcionek. .NET MAUI 9 (2024) zawiera obsługę C# 12, ulepszoną integrację z WinUI 3 i macOS Sonoma, a także nowe API Drag & Drop dla wszystkich platform.
Pierwsza różnica — jedna aplikacja. W Xamarin.Forms dla iOS i Android potrzebne były dwa osobne projekty w jednym rozwiązaniu. W .NET MAUI jeden projekt z folderami platformowymi. Upraszcza to nawigację po kodzie, zarządzanie zależnościami i potoki CI/CD. Plik .csproj używa formatu SDK-style z TargetFrameworks: net8.0-android, net8.0-ios, net8.0-maccatalyst.
Druga różnica — architektura renderowania przez Handlers zamiast rendererów. W Xamarin.Forms każdy element (Button, Label) miał swoją klasę Renderer, która tworzyła natywną kontrolkę. Do personalizacji wymagany był Custom Renderer. W MAUI Handler to lekki obiekt, który mapuje abstrakcyjny element na natywną kontrolkę i obsługuje Property Mappers do aktualizacji właściwości bez odtwarzania kontrolki.
Trzecia różnica — jeden kontener DI Microsoft.Extensions.DependencyInjection. Xamarin.Forms używał DependencyService do rejestracji implementacji platformowych. MAUI wbudowuje DI w rdzeń frameworka: usługi rejestruje się w MauiAppBuilder, kontrolery otrzymują zależności przez konstruktor. Upraszcza to testowanie i jest zgodne z nowoczesnymi praktykami .NET.
Architektura .NET MAUI opiera się na modelu wielowarstwowym. Dolna warstwa — .NET BCL i Mono Runtime (Android) / CoreCLR (Windows) / NativeAOT (iOS). Środkowa warstwa — Microsoft.Maui.dll z rdzeniem frameworka: Handlers, Layout, Graphics, Controls. Górna warstwa — aplikacja dewelopera ze stronami XAML, ViewModel i usługami.
Single Project — to kluczowa cecha architektoniczna .NET MAUI. Wszystkie pliki są podzielone na trzy kategorie: kod wspólny (Shared), kod platformowy (Platforms) i zasoby (Resources). Multi-targeting w .csproj określa, dla których platform budowana jest aplikacja. Każda platforma kompiluje tylko swój folder Platforms i kod wspólny.
Kod platformowy znajduje się w folderach warunkowych. Platforms/Android zawiera MainActivity.cs, MainApplication.cs i AndroidManifest.xml. Platforms/iOS — AppDelegate.cs, Info.plist i Entitlements.plist. Platforms/Windows — Package.appxmanifest i App.xaml. Do kompilacji warunkowej w kodzie używa się dyrektyw #if ANDROID, #if IOS, #if WINDOWS, #if MACCATALYST.
XAML — deklaratywny język znaczników, odziedziczony po Xamarin.Forms i WPF. W .NET MAUI XAML jest używany do opisywania stron (ContentPage), układów (VerticalStackLayout, Grid, FlexLayout), elementów (Label, Entry, Button, Image) i kontrolek (CollectionView, CarouselView). XAML jest kompilowany do formatu BAML na etapie budowania.
Wzorzec MVVM jest implementowany przez CommunityToolkit.Mvvm — bibliotekę Microsoft z otwartym kodem. Atrybut [ObservableProperty] generuje właściwości INotifyPropertyChanged, [RelayCommand] tworzy polecenia z metod. Source Generator CommunityToolkit.Mvvm 8.2 transformuje partial class ViewModel, generując ObservableObject bez Reflection. Przyspiesza to Binding o 30% w porównaniu z ręczną implementacją.
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 = "Naciśnij mnie",
BackgroundColor = Colors.Blue,
TextColor = Colors.White,
Command = new Command(async () =>
await DisplayAlert("Witaj", "Świecie", "OK"))
}
}
};
}
}
.NET MAUI obsługuje 5 platform: iOS 15.0+, Android 5.0 (API 21)+, Windows 10 1809+, macOS 12.0+ (MacCatalyst) i Tizen 6.5+. Każda platforma używa własnego zestawu kontrolek i API. iOS używa UIKit przez Mac Catalyst, Android — AndroidX przez Xamarin.Android, Windows — WinUI 3, macOS — AppKit przez Mac Catalyst.
Na iOS i Android MAUI używa tych samych mechanizmów renderowania co Xamarin.Forms — natywnych kontrolek UI. Jednak Handlers zapewniają bardziej elastyczną personalizację. Do platformowej konfiguracji Button na iOS używa się OnPlatform<Button> z PlatformConfiguration.iOS. Dla Windows MAUI używa WinUI 3 — nowoczesnego frameworka UI od Microsoft z obsługą Fluent Design System.
macOS obsługa dodana przez Mac Catalyst — technologię Apple, która uruchamia aplikacje UIKit na Macu. Pozwala to na ponowne wykorzystanie 100% kodu iOS MAUI dla wersji aplikacji na macOS. Dla specyficznych funkcji Mac (Menu Bar, Touch Bar) MAUI udostępnia API platformowe przez Mac Catalyst i opakowania NSView.
Tizen — platforma Samsung dla Smart TV, smartfonów i smartwatchy. Wsparcie Tizen w .NET MAUI jest zrealizowane przez Samsung Tizen .NET. Aplikacje MAUI są kompilowane dla Tizen przez bindowania Samsung TizenFX. Jednak Tizen nie jest priorytetową platformą Microsoft — aktualizacje dla niej wychodzą z opóźnieniem 1–2 miesięcy.
| Platforma | Minimalna wersja | Framework UI | Status |
|---|---|---|---|
| iOS | iOS 15.0 | UIKit (Mac Catalyst) | Stabilny |
| Android | API 21 (5.0) | AndroidX / Material 3 | Stabilny |
| Windows | Win 10 1809 | WinUI 3 / Fluent Design | Stabilny |
| macOS | macOS 12.0 | AppKit (Mac Catalyst) | Stabilny |
| Tizen | Tizen 6.5 | TizenFX / Samsung | Dodatkowo |
Jedna baza kodu — .NET MAUI zmniejsza ilość powielania kodu. Jeden projekt w C# i XAML jest kompilowany na 5 platform, zapewniając do 95% wspólnego kodu dla aplikacji z prostym UI. Logika biznesowa, usługi, modele danych i klienci HTTP znajdują się w kodzie wspólnym. Tylko funkcje platformowe (aparat, geolokalizacja, biometria) wymagają osobnych implementacji przez DI.
Wydajność .NET MAUI jest wyższa niż Xamarin.Forms. Handlers zmniejszają narzut na renderowanie: testy Microsoft pokazują skrócenie czasu rysowania ekranu o 20–30% w porównaniu z Xamarin.Forms 5.0. Native AOT na iOS kompiluje kod C# bezpośrednio do instrukcji ARM64, eliminując kompilację JIT i skracając czas uruchamiania o 40%.
Blazor Hybrid — unikalna możliwość .NET MAUI. BlazorWebView osadza komponenty Blazor bezpośrednio w aplikacji MAUI. Deweloperzy interfejsów webowych mogą ponownie wykorzystywać komponenty Blazor (strony Razor, JS-interop, style CSS) w aplikacji mobilnej. Blazor Hybrid działa na wszystkich 5 platformach MAUI bez zmiany kodu komponentów Blazor.
Ekologia .NET — dostęp do tysięcy pakietów NuGet: Entity Framework Core do pracy z bazami danych, Serilog do logowania, Polly do ponownych żądań HTTP, FluentValidation do walidacji. CommunityToolkit.Maui dostarcza gotowe elementy UI: Popup, Toast, Snackbar, SemanticScreenReader dla dostępności. .NET MAUI integruje się z Azure, SignalR i Microsoft Graph SDK.
Narzędzia programistyczne — Visual Studio 2022 i Rider od JetBrains. XAML Hot Reload aktualizuje UI bez restartowania aplikacji w 1–2 sekundy. C# Hot Reload (od .NET 6+) rekompiluje zmianę metody bez restartowania procesu. Visual Studio Debugger, Profiler i IntelliCode uzupełniają zestaw narzędzi do diagnostyki wydajności i jakości kodu.
Często zadawane pytania
.NET MAUI — to wieloplatformowy framework Microsoft do tworzenia natywnych aplikacji w C# i XAML pod iOS, Android, Windows, macOS i Tizen. Jest następcą Xamarin.Forms, wbudowany w .NET 6+ i używa jednego projektu (Single Project) zamiast oddzielnych projektów dla każdej platformy.
.NET MAUI używa jednego projektu, Handlers zamiast rendererów, wbudowanego kontenera DI, Native AOT dla iOS i Blazor Hybrid. Xamarin.Forms wymaga oddzielnych projektów dla każdej platformy, używa Custom Renderer do personalizacji UI, DependencyService dla DI i nie obsługuje Blazor. .NET MAUI — część .NET, Xamarin.Forms — osobny SDK.
Tak, .NET MAUI obsługuje macOS przez Mac Catalyst (minimalna wersja macOS 12.0). Aplikacje iOS na MAUI automatycznie kompilują się na Mac bez zmian w kodzie. Dla natywnych funkcji Mac (Menu Bar, Dock, Touch ID) używane są wywołania platformowe przez Mac Catalyst i opakowania NSView w folderze Platforms/MacCatalyst.
Nie, .NET MAUI jest niekompatybilny z pakietami Dart/Flutter. MAUI używa ekosystemu .NET i pakietów NuGet. Dla funkcji platformowych (aparat, Bluetooth, biometria) używane są natywne biblioteki przez Android Bindings (Kotlin/Java) i iOS Bindings (Objective-C/Swift). CommunityToolkit.Maui dostarcza gotowe opakowania dla popularnych scenariuszy.
Różnica w wydajności jest minimalna. .NET MAUI z Handlers i Native AOT na iOS osiąga 95–98% wydajności natywnej aplikacji SwiftUI. Na Androidzie różnica z aplikacją Kotlin wynosi 3–7% w testach renderowania UI (Microsoft Benchmarks, 2024). Dla większości aplikacji biznesowych różnica jest niezauważalna dla użytkownika.
Podsumowanie
Opracujemy aplikację mobilną pod klucz
IT Sectr tworzy aplikacje na iOS i Androida dla startupów i firm od 2017 roku. Doradzimy Ci i zaproponujemy najlepsze rozwiązanie.
Przeczytaj również