.NET MAUI — یک فریمورک چندسکویی مایکروسافت برای ایجاد برنامههای بومی با C# و XAML است که در سال ۲۰۲۲ همراه با .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 در می ۲۰۲۲ انجام شد.
تفاوت کلیدی .NET MAUI با predecessor — یکپارچگی کامل با .NET 8 BCL (Base Class Library) است. توسعهدهندگان مستقیماً بدون SDK اضافی به System.Text.Json، System.Net.Http، System.Linq، System.IO و سایر APIها دسترسی دارند. Xamarin.Forms از .NET Standard 2.0 برای منطق مشترک استفاده میکرد که دسترسی به قابلیتهای جدید سکوی .NET را محدود میکرد.
به گفته Microsoft Build 2024، .NET MAUI در ۴۰٬۰۰۰+ برنامه در 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های قدیمی حذف شدند، رندررها با Handlerها جایگزین شدند، DependencyService با کانتینر DI جایگزین شد.
نسخه .NET MAUI 8 (نوامبر ۲۰۲۳) پشتیبانی از Native AOT، عملکرد بهبود یافته CollectionView، Blazor Hybrid (جاسازی کامپوننتهای Blazor در برنامه MAUI) و نگاشت جدید فونتها را اضافه کرد. .NET MAUI 9 (۲۰۲۴) شامل پشتیبانی از C# 12، یکپارچگی بهبود یافته با WinUI 3 و macOS Sonoma، و همچنین API جدید Drag & Drop برای همه سکوها است.
تفاوت اول — برنامه واحد. در 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 را در مقایسه با پیادهسازی دستی ۳۰٪ سریعتر میکند.
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 از ۵ سکو پشتیبانی میکند: 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 — فناوری اپل که برنامههای UIKit را روی Mac اجرا میکند، اضافه شده است. این امکان استفاده مجدد ۱۰۰٪ از کد iOS MAUI برای نسخه macOS برنامه را فراهم میکند. برای توابع خاص Mac (Menu Bar، Touch Bar) MAUI APIهای سکویی را از طریق Mac Catalyst و wrapperهای NSView ارائه میدهد.
Tizen — سکوی سامسونگ برای Smart TV، گوشیهای هوشمند و ساعتهای هوشمند. پشتیبانی از Tizen در .NET MAUI از طریق Samsung Tizen .NET پیادهسازی شده است. برنامههای MAUI از طریق bindingهای Samsung TizenFX برای Tizen کامپایل میشوند. با این حال Tizen سکوی اولویتدار مایکروسافت نیست — بهروزرسانیها برای آن با تأخیر ۱–۲ ماهه منتشر میشوند.
| سکو | حداقل نسخه | فریمورک 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 برای ۵ سکو کامپایل میشود و برای برنامههای با UI ساده تا ۹۵٪ کد مشترک فراهم میکند. منطق کسبوکار، سرویسها، مدلهای داده و کلاینتهای HTTP در کد مشترک قرار دارند. فقط ویژگیهای سکویی (دوربین، مکانیابی، بیومتریک) از طریق DI نیاز به پیادهسازی جداگانه دارند.
عملکرد .NET MAUI بالاتر از Xamarin.Forms است. Handlers سربار رندر را کاهش میدهند: تستهای مایکروسافت کاهش زمان ترسیم صفحه را ۲۰–۳۰٪ در مقایسه با Xamarin.Forms 5.0 نشان میدهند. Native AOT در iOS کد C# را مستقیماً به دستورالعملهای ARM64 کامپایل میکند و کامپایل JIT را حذف کرده و زمان راهاندازی را ۴۰٪ کاهش میدهد.
Blazor Hybrid — قابلیت منحصربهفرد .NET MAUI. BlazorWebView کامپوننتهای Blazor را مستقیماً در برنامه MAUI جاسازی میکند. توسعهدهندگان رابطهای وب میتوانند از کامپوننتهای Blazor (صفحات Razor، JS-interop، استایلهای CSS) در برنامه موبایل استفاده مجدد کنند. Blazor Hybrid بدون تغییر کد کامپوننتهای Blazor روی هر ۵ سکوی MAUI کار میکند.
اکوسیستم .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 را بدون راهاندازی مجدد برنامه در ۱–۲ ثانیه بهروزرسانی میکند. 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 و wrapperهای NSView در پوشه Platforms/MacCatalyst استفاده میشود.
خیر، .NET MAUI با بستههای Dart/Flutter ناسازگار است. MAUI از اکوسیستم .NET و بستههای NuGet استفاده میکند. برای ویژگیهای سکویی (دوربین، Bluetooth، بیومتریک) از کتابخانههای بومی از طریق Android Bindings (Kotlin/Java) و iOS Bindings (Objective-C/Swift) استفاده میشود. CommunityToolkit.Maui wrapperهای آمادهای برای سناریوهای رایج ارائه میدهد.
تفاوت عملکرد حداقل است. .NET MAUI با Handlers و Native AOT در iOS به ۹۵–۹۸٪ عملکرد برنامه بومی SwiftUI میرسد. در Android تفاوت با برنامه Kotlin در تستهای رندر UI ۳–۷٪ است (Microsoft Benchmarks, 2024). برای اکثر برنامههای تجاری این تفاوت برای کاربر قابل توجه نیست.
خلاصه
ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد
IT Sectr از سال 2017 برنامههای iOS و Android را برای استارتاپها و کسبوکارها ایجاد میکند. ما به شما مشاوره میدهیم و بهترین راهحل را پیشنهاد خواهیم کرد.
همچنین بخوانید