.NET MAUI — је вишеплатформски фрејмворк компаније Мицрософт за креирање изворних апликација у 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. Мицрософт активно развија MAUI у оквиру .NET 9.
Најава .NET MAUI догодила се на Microsoft Build 2020 као део стратегије унификације .NET-а. Мицрософт је објединио .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 — библиотеке отвореног кода од Мицрософта. Атрибут [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 фрејмворк од Мицрософта са подршком за 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 није приоритетна платформа за Мицрософт — ажурирања за њу излазе са закашњењем од 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 смањују overhead рендеровања: 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 — је вишеплатформски фрејмворк компаније Мицрософт за креирање изворних апликација у 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. године. Саветоваћемо вас и предложити најбоље решење.
Прочитајте такође