.NET MAUI là một framework đa nền tảng của Microsoft để tạo các ứng dụng gốc bằng C# và XAML, được phát hành vào năm 2022 cùng với .NET 6. Theo Microsoft .NET MAUI Documentation, 2024, MAUI hỗ trợ iOS, Android, Windows, macOS và Tizen, kết hợp chúng thành một dự án duy nhất với cơ sở mã chung. Framework này là sản phẩm kế thừa trực tiếp của Xamarin.Forms.
Các điểm chính
.NET MAUI (Multi-platform App UI) là sự phát triển của Xamarin.Forms, được xây dựng lại từ đầu cho .NET 6+. Không giống Xamarin.Forms, yêu cầu các dự án riêng biệt cho mỗi nền tảng, MAUI sử dụng một cấu trúc duy nhất với tệp .csproj dùng chung và các thư mục nền tảng Platforms/iOS, Platforms/Android, Platforms/Windows và Platforms/MacCatalyst. Bản phát hành ổn định đầu tiên của MAUI là vào tháng 5 năm 2022.
Sự khác biệt chính giữa .NET MAUI và sản phẩm tiền nhiệm là tích hợp đầy đủ với .NET 8 BCL (Thư viện lớp cơ sở). Các nhà phát triển có quyền truy cập trực tiếp vào System.Text.Json, System.Net.Http, System.Linq, System.IO và các API khác mà không cần SDK bổ sung. Xamarin.Forms sử dụng .NET Standard 2.0 cho logic dùng chung, điều này hạn chế quyền truy cập vào các khả năng nền tảng .NET mới.
Theo Microsoft Build 2024, .NET MAUI được sử dụng trong hơn 40.000 ứng dụng trên App Store và Google Play. Các dự án đáng chú ý bao gồm UPS Mobile, The Weather Channel và Siemens Teamcenter. Microsoft đang tích cực phát triển MAUI như một phần của .NET 9, dự kiến vào tháng 11 năm 2024.
Thông báo về .NET MAUI được đưa ra tại Microsoft Build 2020 như một phần của chiến lược hợp nhất .NET. Microsoft đã hợp nhất .NET Core, Mono và .NET Framework thành một nền tảng .NET 5+ duy nhất. Xamarin.Forms trở thành nền tảng cho MAUI, nhưng cơ sở mã đã được viết lại hoàn toàn: các API cũ đã bị xóa, trình kết xuất được thay thế bằng Handlers, DependencyService được thay thế bằng bộ chứa DI.
.NET MAUI 8 (tháng 11 năm 2023) đã thêm hỗ trợ Native AOT, hiệu suất CollectionView được cải thiện, Blazor Hybrid (nhúng các thành phần Blazor vào ứng dụng MAUI) và ánh xạ phông chữ mới. .NET MAUI 9 (2024) bao gồm hỗ trợ C# 12, tích hợp cải thiện với WinUI 3 và macOS Sonoma, và API Kéo và Thả mới cho tất cả các nền tảng.
Sự khác biệt đầu tiên là ứng dụng duy nhất. Trong Xamarin.Forms, iOS và Android yêu cầu hai dự án riêng biệt trong một giải pháp. Trong .NET MAUI, một dự án với các thư mục nền tảng. Điều này đơn giản hóa việc điều hướng mã, quản lý phụ thuộc và đường ống CI/CD. Tệp .csproj sử dụng định dạng SDK-style với TargetFrameworks: net8.0-android, net8.0-ios, net8.0-maccatalyst.
Sự khác biệt thứ hai là kiến trúc kết xuất sử dụng Handlers thay vì trình kết xuất. Trong Xamarin.Forms, mỗi phần tử (Button, Label) có lớp Renderer riêng tạo ra một điều khiển gốc. Việc tùy chỉnh yêu cầu Custom Renderer. Trong MAUI, Handler là một đối tượng nhẹ ánh xạ một phần tử trừu tượng thành điều khiển gốc và hỗ trợ Property Mappers để cập nhật thuộc tính mà không cần tạo lại điều khiển.
Sự khác biệt thứ ba là bộ chứa DI thống nhất Microsoft.Extensions.DependencyInjection. Xamarin.Forms sử dụng DependencyService để đăng ký các triển khai nền tảng. MAUI nhúng DI vào lõi framework: các dịch vụ được đăng ký trong MauiAppBuilder, các bộ điều khiển nhận các phụ thuộc thông qua hàm tạo. Điều này đơn giản hóa việc kiểm thử và tuân theo các thực hành .NET hiện đại.
Kiến trúc .NET MAUI dựa trên mô hình nhiều lớp. Lớp dưới cùng là .NET BCL và Mono Runtime (Android) / CoreCLR (Windows) / NativeAOT (iOS). Lớp giữa là Microsoft.Maui.dll với lõi framework: Handlers, Layout, Graphics, Controls. Lớp trên cùng là ứng dụng của nhà phát triển với các trang XAML, ViewModel và các dịch vụ.
Single Project là một tính năng kiến trúc chính của .NET MAUI. Tất cả các tệp được chia thành ba loại: mã dùng chung (Shared), mã nền tảng (Platforms) và tài nguyên (Resources). Multi-targeting trong .csproj chỉ định ứng dụng được xây dựng cho những nền tảng nào. Mỗi nền tảng chỉ biên dịch thư mục Platforms của riêng nó và mã dùng chung.
Mã nền tảng được đặt trong các thư mục có điều kiện. Platforms/Android chứa MainActivity.cs, MainApplication.cs và AndroidManifest.xml. Platforms/iOS — AppDelegate.cs, Info.plist và Entitlements.plist. Platforms/Windows — Package.appxmanifest và App.xaml. Để biên dịch có điều kiện, mã sử dụng các chỉ thị #if ANDROID, #if IOS, #if WINDOWS, #if MACCATALYST.
XAML là ngôn ngữ đánh dấu khai báo kế thừa từ Xamarin.Forms và WPF. Trong .NET MAUI, XAML được sử dụng để mô tả các trang (ContentPage), bố cục (VerticalStackLayout, Grid, FlexLayout), phần tử (Label, Entry, Button, Image) và điều khiển (CollectionView, CarouselView). XAML được biên dịch thành định dạng BAML tại thời điểm xây dựng.
Mô hình MVVM được triển khai thông qua CommunityToolkit.Mvvm — một thư viện mã nguồn mở từ Microsoft. Thuộc tính [ObservableProperty] tạo ra các thuộc tính INotifyPropertyChanged, [RelayCommand] tạo các lệnh từ các phương thức. CommunityToolkit.Mvvm 8.2 Source Generator chuyển đổi lớp một phần ViewModel, tạo ObservableObject mà không cần Reflection. Điều này tăng tốc Binding lên 30% so với triển khai thủ công.
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 = "Bấm vào tôi",
BackgroundColor = Colors.Blue,
TextColor = Colors.White,
Command = new Command(async () =>
await DisplayAlert("Xin chào", "Thế giới", "OK"))
}
}
};
}
}
.NET MAUI hỗ trợ 5 nền tảng: iOS 15.0+, Android 5.0 (API 21)+, Windows 10 1809+, macOS 12.0+ (MacCatalyst) và Tizen 6.5+. Mỗi nền tảng sử dụng bộ điều khiển và API riêng. iOS sử dụng UIKit qua Mac Catalyst, Android — AndroidX qua Xamarin.Android, Windows — WinUI 3, macOS — AppKit qua Mac Catalyst.
Trên iOS và Android, MAUI sử dụng cùng cơ chế kết xuất như Xamarin.Forms — các điều khiển UI gốc. Tuy nhiên, Handlers cung cấp khả năng tùy chỉnh linh hoạt hơn. Để cấu hình Button dành riêng cho nền tảng trên iOS, OnPlatform<Button> với PlatformConfiguration.iOS được sử dụng. Đối với Windows, MAUI sử dụng WinUI 3 — một framework UI hiện đại từ Microsoft với hỗ trợ Fluent Design System.
Hỗ trợ macOS đã được thêm vào qua Mac Catalyst — công nghệ của Apple chạy các ứng dụng UIKit trên Mac. Điều này cho phép tái sử dụng 100% mã iOS của MAUI cho phiên bản macOS của ứng dụng. Đối với các tính năng Mac cụ thể (Menu Bar, Touch Bar), MAUI cung cấp API nền tảng thông qua Mac Catalyst và trình bao bọc NSView.
Tizen là nền tảng của Samsung cho Smart TV, điện thoại thông minh và đồng hồ thông minh. Hỗ trợ Tizen trong .NET MAUI được triển khai thông qua Samsung Tizen .NET. Các ứng dụng MAUI được biên dịch cho Tizen thông qua các ràng buộc Samsung TizenFX. Tuy nhiên, Tizen không phải là nền tảng ưu tiên của Microsoft — các bản cập nhật cho nó được phát hành với độ trễ 1–2 tháng.
| Nền tảng | Phiên bản tối thiểu | Framework UI | Trạng thái |
|---|---|---|---|
| iOS | iOS 15.0 | UIKit (Mac Catalyst) | Ổn định |
| Android | API 21 (5.0) | AndroidX / Material 3 | Ổn định |
| Windows | Win 10 1809 | WinUI 3 / Fluent Design | Ổn định |
| macOS | macOS 12.0 | AppKit (Mac Catalyst) | Ổn định |
| Tizen | Tizen 6.5 | TizenFX / Samsung | Bổ sung |
Cơ sở mã thống nhất — .NET MAUI giảm trùng lặp mã. Một dự án bằng C# và XAML biên dịch cho 5 nền tảng, cung cấp tới 95% mã dùng chung cho các ứng dụng có UI đơn giản. Logic nghiệp vụ, dịch vụ, mô hình dữ liệu và HTTP client nằm trong mã dùng chung. Chỉ các tính năng dành riêng cho nền tảng (máy ảnh, định vị địa lý, sinh trắc học) yêu cầu triển khai riêng thông qua DI.
Hiệu suất của .NET MAUI cao hơn Xamarin.Forms. Handlers giảm chi phí kết xuất: các thử nghiệm của Microsoft cho thấy thời gian kết xuất màn hình giảm 20–30% so với Xamarin.Forms 5.0. Native AOT trên iOS biên dịch mã C# trực tiếp thành lệnh ARM64, loại bỏ biên dịch JIT và giảm thời gian khởi động xuống 40%.
Blazor Hybrid là một khả năng độc đáo của .NET MAUI. BlazorWebView nhúng các thành phần Blazor trực tiếp vào ứng dụng MAUI. Các nhà phát triển giao diện web có thể tái sử dụng các thành phần Blazor (trang Razor, tương tác JS, kiểu CSS) trong ứng dụng di động. Blazor Hybrid hoạt động trên tất cả 5 nền tảng MAUI mà không cần thay đổi mã thành phần Blazor.
Hệ sinh thái .NET — truy cập hàng ngàn gói NuGet: Entity Framework Core cho các thao tác cơ sở dữ liệu, Serilog cho ghi nhật ký, Polly cho các yêu cầu HTTP lặp lại, FluentValidation cho xác thực. CommunityToolkit.Maui cung cấp các phần tử UI có sẵn: Popup, Toast, Snackbar, SemanticScreenReader cho khả năng tiếp cận. .NET MAUI tích hợp với Azure, SignalR và Microsoft Graph SDK.
Công cụ phát triển — Visual Studio 2022 và Rider của JetBrains. XAML Hot Reload cập nhật UI mà không cần khởi động lại ứng dụng trong 1–2 giây. C# Hot Reload (từ .NET 6+) biên dịch lại thay đổi phương thức mà không cần khởi động lại tiến trình. Visual Studio Debugger, Profiler và IntelliCode bổ sung bộ công cụ chẩn đoán hiệu suất và chất lượng mã.
Câu hỏi thường gặp
.NET MAUI là một framework đa nền tảng của Microsoft để tạo các ứng dụng gốc bằng C# và XAML cho iOS, Android, Windows, macOS và Tizen. Nó là sản phẩm kế thừa của Xamarin.Forms, được tích hợp vào .NET 6+ và sử dụng một dự án duy nhất (Single Project) thay vì các dự án riêng biệt cho mỗi nền tảng.
.NET MAUI sử dụng một dự án duy nhất, Handlers thay vì trình kết xuất, bộ chứa DI tích hợp sẵn, Native AOT cho iOS và Blazor Hybrid. Xamarin.Forms yêu cầu các dự án riêng biệt cho mỗi nền tảng, sử dụng Custom Renderer để tùy chỉnh UI, DependencyService cho DI và không hỗ trợ Blazor. .NET MAUI là một phần của .NET, Xamarin.Forms là một SDK riêng.
Có, .NET MAUI hỗ trợ macOS thông qua Mac Catalyst (phiên bản tối thiểu macOS 12.0). Các ứng dụng iOS trên MAUI được tự động biên dịch cho Mac mà không cần thay đổi mã. Đối với các tính năng Mac gốc (Menu Bar, Dock, Touch ID), các lệnh gọi nền tảng thông qua Mac Catalyst và trình bao bọc NSView trong thư mục Platforms/MacCatalyst được sử dụng.
Không, .NET MAUI không tương thích với các gói Dart/Flutter. MAUI sử dụng hệ sinh thái .NET và các gói NuGet. Đối với các tính năng dành riêng cho nền tảng (máy ảnh, Bluetooth, sinh trắc học), các thư viện gốc thông qua Android Bindings (Kotlin/Java) và iOS Bindings (Objective-C/Swift) được sử dụng. CommunityToolkit.Maui cung cấp các trình bao bọc có sẵn cho các tình huống phổ biến.
Sự khác biệt về hiệu suất là rất nhỏ. .NET MAUI với Handlers và Native AOT trên iOS đạt được 95–98% hiệu suất của ứng dụng SwiftUI gốc. Trên Android, sự khác biệt với ứng dụng Kotlin là 3–7% trong các thử nghiệm kết xuất UI (Microsoft Benchmarks, 2024). Đối với hầu hết các ứng dụng doanh nghiệp, sự khác biệt là không đáng kể đối với người dùng.
Tổng kết
Chúng tôi sẽ phát triển ứng dụng di động chìa khóa trao tay
IT Sectr tạo các ứng dụng iOS và Android cho các công ty khởi nghiệp và doanh nghiệp từ năm 2017. Chúng tôi sẽ tư vấn và đề xuất giải pháp tốt nhất cho bạn.
Đọc thêm