.NET MAUI — е междуплатформена рамка на Microsoft за създаване на нативни приложения на C# и XAML, пусната през 2022 г. заедно с .NET 6. Според Microsoft .NET MAUI Documentation, 2024, MAUI поддържа iOS, Android, Windows, macOS и Tizen, обединявайки ги в един проект с обща кодова база. Рамката е пряк наследник на Xamarin.Forms.
Основни точки
.NET MAUI (Multi-platform App UI) — е еволюцията на Xamarin.Forms, преработена от нулата за .NET 6+. За разлика от Xamarin.Forms, който изискваше отделни проекти за всяка платформа, MAUI използва единна структура с общ .csproj файл и платформени папки Platforms/iOS, Platforms/Android, Platforms/Windows и Platforms/MacCatalyst. Първото стабилно издание на MAUI беше през май 2022 г.
Ключовата разлика на .NET MAUI от предшественика — пълна интеграция с .NET 8 BCL (Base Class Library). Разработчиците имат директен достъп до System.Text.Json, System.Net.Http, System.Linq, System.IO и други API без допълнителен SDK. Xamarin.Forms използваше .NET Standard 2.0 за обща логика, което ограничаваше достъпа до новите възможности на .NET платформата.
Според Microsoft Build 2024, .NET MAUI се използва в 40 000+ приложения в App Store и Google Play. Сред известните проекти са UPS Mobile, The Weather Channel и Siemens Teamcenter. Microsoft активно развива MAUI в рамките на .NET 9.
Обявяването на .NET MAUI се състоя на Microsoft Build 2020 като част от стратегията за обединение на .NET. Microsoft обедини .NET Core, Mono и .NET Framework в единна .NET 5+ платформа. Xamarin.Forms стана основа за MAUI, но кодовата база беше напълно пренаписана: остарелите API бяха премахнати, рендерите заменени с Handlers, DependencyService заменен с DI контейнер.
Версия .NET MAUI 8 (ноември 2023) добави поддръжка за Native AOT, подобрена производителност на CollectionView, Blazor Hybrid (вграждане на Blazor компоненти в MAUI приложение) и ново картографиране на шрифтове. .NET MAUI 9 (2024) включва поддръжка на C# 12, подобрена интеграция с WinUI 3 и macOS Sonoma, както и нов Drag & Drop API за всички платформи.
Първата разлика — единно приложение. В Xamarin.Forms за iOS и Android бяха необходими два отделни проекта в едно решение. В .NET MAUI един проект с платформени папки. Това опростява навигацията в кода, управлението на зависимости и CI/CD тръбопроводите. .csproj файлът използва SDK-style формат с TargetFrameworks: net8.0-android, net8.0-ios, net8.0-maccatalyst.
Втората разлика — архитектура на рендиране чрез Handlers вместо рендери. В Xamarin.Forms всеки елемент (Button, Label) имаше свой собствен Renderer клас, който създаваше нативен контрол. За персонализиране беше необходим Custom Renderer. В MAUI Handler е лек обект, който картографира абстрактен елемент към нативен контрол и поддържа Property Mappers за актуализиране на свойства без пресъздаване на контрола.
Третата разлика — единен DI контейнер Microsoft.Extensions.DependencyInjection. Xamarin.Forms използваше DependencyService за регистриране на платформени имплементации. MAUI вгражда DI в ядрото на рамката: услугите се регистрират в MauiAppBuilder, контролерите получават зависимости чрез конструктор. Това опростява тестването и следва съвременните .NET практики.
Архитектурата на .NET MAUI се основава на многослоен модел. Долен слой — .NET BCL и Mono Runtime (Android) / CoreCLR (Windows) / NativeAOT (iOS). Среден слой — Microsoft.Maui.dll с ядрото на рамката: Handlers, Layout, Graphics, Controls. Горен слой — приложението на разработчика с XAML страници, ViewModel и услуги.
Single Project — е ключова архитектурна характеристика на .NET MAUI. Всички файлове са разделени в три категории: общ код (Shared), платформен код (Platforms) и ресурси (Resources). Multi-targeting в .csproj указва за кои платформи се изгражда приложението. Всяка платформа компилира само своята Platforms папка и общия код.
Платформеният код се намира в условни папки. Platforms/Android съдържа MainActivity.cs, MainApplication.cs и AndroidManifest.xml. Platforms/iOS — AppDelegate.cs, Info.plist и Entitlements.plist. Platforms/Windows — Package.appxmanifest и App.xaml. За условна компилация в кода се използват директивите #if ANDROID, #if IOS, #if WINDOWS, #if MACCATALYST.
XAML — декларативен език за маркиране, наследен от Xamarin.Forms и WPF. В .NET MAUI XAML се използва за описване на страници (ContentPage), оформления (VerticalStackLayout, Grid, FlexLayout), елементи (Label, Entry, Button, Image) и контроли (CollectionView, CarouselView). XAML се компилира в BAML формат на етапа на изграждане.
MVVM моделът се имплементира чрез CommunityToolkit.Mvvm — библиотека с отворен код от Microsoft. Атрибутът [ObservableProperty] генерира INotifyPropertyChanged свойства, [RelayCommand] създава команди от методи. Source Generator CommunityToolkit.Mvvm 8.2 трансформира частичния клас ViewModel, генерирайки ObservableObject без Reflection. Това ускорява Binding с 30% в сравнение с ръчна имплементация.
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 = "Натисни ме",
BackgroundColor = Colors.Blue,
TextColor = Colors.White,
Command = new Command(async () =>
await DisplayAlert("Здравей", "Свят", "OK"))
}
}
};
}
}
.NET MAUI поддържа 5 платформи: iOS 15.0+, Android 5.0 (API 21)+, Windows 10 1809+, macOS 12.0+ (MacCatalyst) и Tizen 6.5+. Всяка платформа използва свой набор от контроли и API. iOS използва UIKit чрез Mac Catalyst, Android — AndroidX чрез Xamarin.Android, Windows — WinUI 3, macOS — AppKit чрез Mac Catalyst.
На iOS и Android MAUI използва същите механизми за рендиране като Xamarin.Forms — нативни UI контроли. Въпреки това Handlers осигуряват по-гъвкаво персонализиране. За платформена конфигурация на Button на iOS се използва OnPlatform<Button> с PlatformConfiguration.iOS. За Windows MAUI използва WinUI 3 — модерна UI рамка от Microsoft с поддръжка на Fluent Design System.
Поддръжката за macOS е добавена чрез Mac Catalyst — технология на Apple, която стартира UIKit приложения на Mac. Това позволява 100% повторно използване на iOS MAUI код за macOS версията на приложението. За специфични Mac функции (Menu Bar, Touch Bar) MAUI предоставя платформени API чрез Mac Catalyst и NSView обвивки.
Tizen — платформа на Samsung за Smart TV, смартфони и умни часовници. Поддръжката на Tizen в .NET MAUI е имплементирана чрез Samsung Tizen .NET. MAUI приложенията се компилират за Tizen чрез Samsung TizenFX обвързвания. Въпреки това Tizen не е приоритетна платформа за Microsoft — актуализациите за нея излизат със закъснение от 1–2 месеца.
| Платформа | Минимална версия | UI рамка | Статус |
|---|---|---|---|
| iOS | iOS 15.0 | UIKit (Mac Catalyst) | Стабилен |
| Android | API 21 (5.0) | AndroidX / Material 3 | Стабилен |
| Windows | Win 10 1809 | WinUI 3 / Fluent Design | Стабилен |
| macOS | macOS 12.0 | AppKit (Mac Catalyst) | Стабилен |
| Tizen | Tizen 6.5 | TizenFX / Samsung | Допълнителен |
Единна кодова база — .NET MAUI намалява количеството дублиране на код. Един проект на C# и XAML се компилира за 5 платформи, осигурявайки до 95% общ код за приложения с прост UI. Бизнес логиката, услугите, моделите данни и HTTP клиентите са в общия код. Само платформени функции (камера, геолокация, биометрия) изискват отделни имплементации чрез DI.
Производителността на .NET MAUI е по-висока от Xamarin.Forms. Handlers намаляват режийните разходи за рендиране: тестовете на Microsoft показват намаление на времето за рендиране на екрана с 20–30% в сравнение с Xamarin.Forms 5.0. Native AOT на iOS компилира C# код директно в ARM64 инструкции, елиминирайки JIT компилацията и намалявайки времето за стартиране с 40%.
Blazor Hybrid — уникална възможност на .NET MAUI. BlazorWebView вгражда Blazor компоненти директно в MAUI приложението. Разработчиците на уеб интерфейси могат да използват повторно Blazor компоненти (Razor страници, JS-интероп, CSS стилове) в мобилното приложение. Blazor Hybrid работи на всички 5 MAUI платформи без промяна на кода на Blazor компонентите.
.NET екосистема — достъп до хиляди NuGet пакети: Entity Framework Core за работа с бази данни, Serilog за регистриране, Polly за повтарящи се HTTP заявки, FluentValidation за валидация. CommunityToolkit.Maui предоставя готови UI елементи: Popup, Toast, Snackbar, SemanticScreenReader за достъпност. .NET MAUI се интегрира с Azure, SignalR и Microsoft Graph SDK.
Инструменти за разработка — Visual Studio 2022 и Rider от JetBrains. XAML Hot Reload актуализира UI без рестартиране на приложението за 1–2 секунди. C# Hot Reload (от .NET 6+) прекомпилира промяната на метод без рестартиране на процеса. Visual Studio Debugger, Profiler и IntelliCode допълват набора от инструменти за диагностика на производителността и качеството на кода.
Често задавани въпроси
.NET MAUI — е междуплатформена рамка на Microsoft за създаване на нативни приложения на C# и XAML за iOS, Android, Windows, macOS и Tizen. Тя е наследник на Xamarin.Forms, вградена в .NET 6+ и използва единен проект (Single Project) вместо отделни проекти за всяка платформа.
.NET MAUI използва единен проект, Handlers вместо рендери, вграден DI контейнер, Native AOT за iOS и Blazor Hybrid. Xamarin.Forms изисква отделни проекти за всяка платформа, използва Custom Renderer за персонализиране на UI, DependencyService за DI и не поддържа Blazor. .NET MAUI е част от .NET, Xamarin.Forms е отделен SDK.
Да, .NET MAUI поддържа macOS чрез Mac Catalyst (минимална версия macOS 12.0). iOS приложенията на MAUI автоматично се компилират за Mac без промени в кода. За нативни Mac функции (Menu Bar, Dock, Touch ID) се използват платформени извиквания чрез Mac Catalyst и NSView обвивки в папка Platforms/MacCatalyst.
Не, .NET MAUI е несъвместим с Dart/Flutter пакети. MAUI използва .NET екосистема и NuGet пакети. За платформени функции (камера, Bluetooth, биометрия) се използват нативни библиотеки чрез Android Bindings (Kotlin/Java) и iOS Bindings (Objective-C/Swift). CommunityToolkit.Maui предоставя готови обвивки за популярни сценарии.
Разликата в производителността е минимална. .NET MAUI с Handlers и Native AOT на iOS достига 95–98% от производителността на нативно SwiftUI приложение. На Android разликата с Kotlin приложение е 3–7% в тестовете за UI рендиране (Microsoft Benchmarks, 2024). За повечето бизнес приложения разликата е незабележима за потребителя.
Заключение
Ще разработим мобилно приложение под ключ
IT Sectr създава iOS и Android приложения за стартъпи и бизнеси от 2017 г. Ще ви консултираме и ще предложим най-доброто решение.
Прочетете също