.NET MAUI — 2022-ci ildə .NET 6 ilə birlikdə buraxılmış, C# və XAML ilə yerli tətbiqlər yaratmaq üçün Microsoft-un çarpaz platforma freymvorkudur. Microsoft .NET MAUI Documentation, 2024-a görə, MAUI iOS, Android, Windows, macOS və Tizen-i dəstəkləyir, onları ümumi kod bazası olan vahid layihədə birləşdirir. Freymvork Xamarin.Forms-un birbaşa varisidir.
Əsas məqamlar
.NET MAUI (Multi-platform App UI) — .NET 6+ üçün sıfırdan yenidən işlənmiş Xamarin.Forms təkamülüdür. Hər platforma üçün ayrı layihələr tələb edən Xamarin.Forms-dan fərqli olaraq, MAUI ümumi .csproj faylı və Platforms/iOS, Platforms/Android, Platforms/Windows və Platforms/MacCatalyst platforma qovluqları ilə vahid strukturdan istifadə edir. MAUI-nin ilk stabil buraxılışı 2022-ci ilin may ayında oldu.
.NET MAUI-nin sələfindən əsas fərqi — .NET 8 BCL (Base Class Library) ilə tam inteqrasiyadır. Tərtibatçılar əlavə SDK olmadan birbaşa System.Text.Json, System.Net.Http, System.Linq, System.IO və digər API-lərə çıxış əldə edirlər. Xamarin.Forms ümumi məntiq üçün .NET Standard 2.0 istifadə edirdi ki, bu da .NET platformasının yeni imkanlarına çıxışı məhdudlaşdırırdı.
Microsoft Build 2024 məlumatlarına görə, .NET MAUI App Store və Google Play-də 40 000+ tətbiqdə istifadə olunur. Tanınmış layihələr arasında — UPS Mobile, The Weather Channel və Siemens Teamcenter var. Microsoft .NET 9 çərçivəsində MAUI-ni fəal şəkildə inkişaf etdirir.
.NET MAUI-nin elanı Microsoft Build 2020-də .NET unifikasiya strategiyasının bir hissəsi kimi oldu. Microsoft .NET Core, Mono və .NET Framework-ü vahid .NET 5+ platformasında birləşdirdi. Xamarin.Forms MAUI üçün əsas oldu, lakin kod bazası tamamilə yenidən yazıldı: köhnəlmiş API-lər silindi, rendererlər Handler-lərlə əvəz olundu, DependencyService DI konteyneri ilə əvəz olundu.
.NET MAUI 8 (noyabr 2023) Native AOT dəstəyi, təkmilləşdirilmiş CollectionView performansı, Blazor Hybrid (Blazor komponentlərinin MAUI tətbiqinə yerləşdirilməsi) və yeni şrift xəritələməsi əlavə etdi. .NET MAUI 9 (2024) C# 12 dəstəyi, WinUI 3 və macOS Sonoma ilə təkmilləşdirilmiş inteqrasiya, həmçinin bütün platformalar üçün yeni Drag & Drop API daxildir.
Birinci fərq — vahid tətbiq. Xamarin.Forms-da iOS və Android üçün bir həll daxilində iki ayrı layihə lazım idi. .NET MAUI-də platforma qovluqları olan bir layihə. Bu, kod naviqasiyasını, asılılıqların idarə edilməsini və CI/CD boru kəmərlərini sadələşdirir. .csproj faylı TargetFrameworks ilə SDK-style formatından istifadə edir: net8.0-android, net8.0-ios, net8.0-maccatalyst.
İkinci fərq — render arxitekturası rendererlər əvəzinə Handlers vasitəsilə. Xamarin.Forms-da hər bir element (Button, Label) yerli nəzarəti yaradan öz Renderer sinfinə malik idi. Fərdiləşdirmə üçün Custom Renderer tələb olunurdu. MAUI-də Handler — abstrakt elementi yerli nəzarətə xəritələyən və nəzarəti yenidən yaratmadan xassələri yeniləmək üçün Property Mappers-ı dəstəkləyən yüngül obyektdir.
Üçüncü fərq — vahid DI konteyneri Microsoft.Extensions.DependencyInjection. Xamarin.Forms platforma tətbiqlərini qeydiyyatdan keçirmək üçün DependencyService istifadə edirdi. MAUI DI-ni freymvorkun nüvəsinə yerləşdirir: xidmətlər MauiAppBuilder-da qeydiyyatdan keçirilir, nəzarətçilər asılılıqları konstruktor vasitəsilə alır. Bu, testləri sadələşdirir və müasir .NET təcrübələrinə uyğundur.
.NET MAUI arxitekturası çoxqatlı modelə əsaslanır. Alt təbəqə — .NET BCL və Mono Runtime (Android) / CoreCLR (Windows) / NativeAOT (iOS). Orta təbəqə — freymvork nüvəsi ilə Microsoft.Maui.dll: Handlers, Layout, Graphics, Controls. Üst təbəqə — XAML səhifələri, ViewModel və xidmətləri olan tərtibatçı tətbiqi.
Single Project — .NET MAUI-nin əsas arxitektura xüsusiyyətidir. Bütün fayllar üç kateqoriyaya bölünür: ümumi kod (Shared), platforma kodu (Platforms) və resurslar (Resources). .csproj-da multi-targeting tətbiqin hansı platformalar üçün qurulduğunu göstərir. Hər platforma yalnız öz Platforms qovluğunu və ümumi kodu kompilə edir.
Platforma kodu şərti qovluqlarda yerləşir. Platforms/Android MainActivity.cs, MainApplication.cs və AndroidManifest.xml ehtiva edir. Platforms/iOS — AppDelegate.cs, Info.plist və Entitlements.plist. Platforms/Windows — Package.appxmanifest və App.xaml. Kodda şərti kompilasiya üçün #if ANDROID, #if IOS, #if WINDOWS, #if MACCATALYST direktivləri istifadə olunur.
XAML — Xamarin.Forms və WPF-dən miras qalmış deklarativ işarələmə dilidir. .NET MAUI-də XAML səhifələri (ContentPage), düzənləri (VerticalStackLayout, Grid, FlexLayout), elementləri (Label, Entry, Button, Image) və nəzarətləri (CollectionView, CarouselView) təsvir etmək üçün istifadə olunur. XAML qurma mərhələsində BAML formatına kompilə olunur.
MVVM nümunəsi CommunityToolkit.Mvvm — Microsoft-un açıq mənbəli kitabxanası vasitəsilə həyata keçirilir. [ObservableProperty] atributu INotifyPropertyChanged xassələrini yaradır, [RelayCommand] metodlardan əmrlər yaradır. Source Generator CommunityToolkit.Mvvm 8.2 partial class ViewModel-i transformasiya edərək, Reflection olmadan ObservableObject yaradır. Bu, əl ilə tətbiq ilə müqayisədə Binding-i 30% sürətləndirir.
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 = "Məni bas",
BackgroundColor = Colors.Blue,
TextColor = Colors.White,
Command = new Command(async () =>
await DisplayAlert("Salam", "Dünya", "OK"))
}
}
};
}
}
.NET MAUI 5 platformanı dəstəkləyir: iOS 15.0+, Android 5.0 (API 21)+, Windows 10 1809+, macOS 12.0+ (MacCatalyst) və Tizen 6.5+. Hər platforma öz nəzarət və API dəstindən istifadə edir. iOS Mac Catalyst vasitəsilə UIKit, Android — Xamarin.Android vasitəsilə AndroidX, Windows — WinUI 3, macOS — Mac Catalyst vasitəsilə AppKit istifadə edir.
iOS və Android-də MAUI Xamarin.Forms ilə eyni render mexanizmlərindən — yerli UI nəzarətlərindən istifadə edir. Lakin Handlers daha çevik fərdiləşdirmə təmin edir. iOS-da Button-un platforma konfiqurasiyası üçün PlatformConfiguration.iOS ilə OnPlatform<Button> istifadə olunur. Windows üçün MAUI Fluent Design System dəstəyi ilə Microsoft-un müasir UI freymvorku olan WinUI 3-dən istifadə edir.
macOS dəstəyi Mac Catalyst — Apple-ın UIKit tətbiqlərini Mac-da işlədən texnologiyası vasitəsilə əlavə edilmişdir. Bu, macOS versiyası üçün MAUI iOS kodunun 100% təkrar istifadəsinə imkan verir. Xüsusi Mac funksiyaları (Menu Bar, Touch Bar) üçün MAUI Mac Catalyst və NSView sarğıları vasitəsilə platforma API-ləri təmin edir.
Tizen — Samsung-un Smart TV, smartfon və ağıllı saatlar üçün platformasıdır. .NET MAUI-də Tizen dəstəyi Samsung Tizen .NET vasitəsilə həyata keçirilir. MAUI tətbiqləri Samsung TizenFX birləşmələri vasitəsilə Tizen üçün kompilə olunur. Lakin Tizen Microsoft-un prioritet platforması deyil — yeniləmələr 1–2 ay gecikmə ilə çıxır.
| Platforma | Minimal versiya | UI freymvork | 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 | Əlavə |
Vahid kod bazası — .NET MAUI kod təkrarlanmasının həcmini azaldır. C# və XAML-da bir layihə 5 platforma üçün kompilə olunur, sadə UI olan tətbiqlər üçün 95% ümumi kod təmin edir. Biznes məntiqi, xidmətlər, data modelləri və HTTP müştəriləri ümumi kodda yerləşir. Yalnız platforma xüsusiyyətləri (kamera, geolokasiya, biometriya) DI vasitəsilə ayrı tətbiqlər tələb edir.
Performans .NET MAUI Xamarin.Forms-dan daha yüksəkdir. Handlers render yükünü azaldır: Microsoft testləri Xamarin.Forms 5.0 ilə müqayisədə ekran çəkmə vaxtının 20–30% azaldığını göstərir. iOS-da Native AOT C# kodunu birbaşa ARM64 təlimatlarına kompilə edir, JIT kompiləni aradan qaldırır və başlanğıc vaxtını 40% azaldır.
Blazor Hybrid — .NET MAUI-nin unikal imkanıdır. BlazorWebView Blazor komponentlərini birbaşa MAUI tətbiqinə yerləşdirir. Veb interfeys tərtibatçıları Blazor komponentlərini (Razor səhifələri, JS-interop, CSS stilləri) mobil tətbiqdə təkrar istifadə edə bilərlər. Blazor Hybrid Blazor komponentlərinin kodunu dəyişmədən bütün 5 MAUI platformasında işləyir.
.NET ekosistemi — minlərlə NuGet paketinə çıxış: verilənlər bazaları ilə iş üçün Entity Framework Core, gündəlik üçün Serilog, təkrar HTTP sorğuları üçün Polly, validasiya üçün FluentValidation. CommunityToolkit.Maui hazır UI elementləri təqdim edir: Popup, Toast, Snackbar, əlçatanlıq üçün SemanticScreenReader. .NET MAUI Azure, SignalR və Microsoft Graph SDK ilə inteqrasiya olunur.
Tərtibat alətləri — Visual Studio 2022 və JetBrains-dən Rider. XAML Hot Reload UI-ni tətbiqi yenidən başlatmadan 1–2 saniyəyə yeniləyir. C# Hot Reload (.NET 6+-dan) metodu prosesi yenidən başlatmadan yenidən kompilə edir. Visual Studio Debugger, Profiler və IntelliCode performans və kod keyfiyyəti diaqnostikası üçün alətlər dəstini tamamlayır.
Tez-tez verilən suallar
.NET MAUI — iOS, Android, Windows, macOS və Tizen üçün C# və XAML ilə yerli tətbiqlər yaratmaq üçün Microsoft-un çarpaz platforma freymvorkudur. O, Xamarin.Forms-un varisidir, .NET 6+-ya quraşdırılmışdır və hər platforma üçün ayrı layihələr əvəzinə vahid layihə (Single Project) istifadə edir.
.NET MAUI vahid layihə, rendererlər əvəzinə Handlers, quraşdırılmış DI konteyneri, iOS üçün Native AOT və Blazor Hybrid istifadə edir. Xamarin.Forms hər platforma üçün ayrı layihələr tələb edir, UI fərdiləşdirməsi üçün Custom Renderer, DI üçün DependencyService istifadə edir və Blazor-ı dəstəkləmir. .NET MAUI .NET-in hissəsidir, Xamarin.Forms isə ayrı SDK-dır.
Bəli, .NET MAUI Mac Catalyst vasitəsilə macOS-u dəstəkləyir (minimal versiya macOS 12.0). MAUI-də iOS tətbiqləri kod dəyişikliyi olmadan avtomatik olaraq Mac üçün kompilə olunur. Yerli Mac funksiyaları (Menu Bar, Dock, Touch ID) üçün Platforms/MacCatalyst qovluğunda Mac Catalyst və NSView sarğıları vasitəsilə platforma çağırışları istifadə olunur.
Xeyr, .NET MAUI Dart/Flutter paketləri ilə uyğun deyil. MAUI .NET ekosistemindən və NuGet paketlərindən istifadə edir. Platforma xüsusiyyətləri (kamera, Bluetooth, biometriya) üçün Android Bindings (Kotlin/Java) və iOS Bindings (Objective-C/Swift) vasitəsilə yerli kitabxanalar istifadə olunur. CommunityToolkit.Maui məşhur ssenarilər üçün hazır sarğılar təqdim edir.
Performans fərqi minimaldır. .NET MAUI Handlers və iOS-da Native AOT ilə yerli SwiftUI tətbiqinin performansının 95–98%-nə çatır. Android-də Kotlin tətbiqi ilə fərq UI render testlərində 3–7% təşkil edir (Microsoft Benchmarks, 2024). Əksər biznes tətbiqləri üçün fərq istifadəçi üçün nəzərə çarpmır.
Nəticə
Açar təslim mobil tətbiq hazırlayacağıq
IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.
Həm də oxuyun