.NET MAUI — είναι ένα διαπλατφορμικό πλαίσιο της Microsoft για τη δημιουργία native εφαρμογών σε 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 αφαιρέθηκαν, οι renderers αντικαταστάθηκαν από 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 αντί για renderers. Στο Xamarin.Forms κάθε στοιχείο (Button, Label) είχε τη δική του κλάση Renderer που δημιουργούσε ένα native στοιχείο ελέγχου. Για προσαρμογή απαιτούνταν Custom Renderer. Στο MAUI το Handler είναι ένα ελαφρύ αντικείμενο που αντιστοιχίζει ένα αφηρημένο στοιχείο σε native στοιχείο ελέγχου και υποστηρίζει 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 μετασχηματίζει την partial class 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 — native στοιχεία ελέγχου 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, smartphone και έξυπνα ρολόγια. Η υποστήριξη 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-interop, στυλ 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 για δημιουργία native εφαρμογών σε C# και XAML για iOS, Android, Windows, macOS και Tizen. Είναι ο διάδοχος του Xamarin.Forms, ενσωματωμένο στο .NET 6+ και χρησιμοποιεί ένα ενιαίο έργο (Single Project) αντί για ξεχωριστά έργα για κάθε πλατφόρμα.
.NET MAUI χρησιμοποιεί ένα ενιαίο έργο, Handlers αντί για renderers, ενσωματωμένο κοντέινερ 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 χωρίς αλλαγές κώδικα. Για native λειτουργίες Mac (Menu Bar, Dock, Touch ID) χρησιμοποιούνται κλήσεις πλατφόρμας μέσω Mac Catalyst και περιτυλίγματα NSView στο φάκελο Platforms/MacCatalyst.
Όχι, το .NET MAUI δεν είναι συμβατό με πακέτα Dart/Flutter. Το MAUI χρησιμοποιεί το οικοσύστημα .NET και πακέτα NuGet. Για λειτουργίες πλατφόρμας (κάμερα, Bluetooth, βιομετρικά) χρησιμοποιούνται native βιβλιοθήκες μέσω Android Bindings (Kotlin/Java) και iOS Bindings (Objective-C/Swift). Το CommunityToolkit.Maui παρέχει έτοιμα περιτυλίγματα για δημοφιλή σενάρια.
Η διαφορά απόδοσης είναι ελάχιστη. Το .NET MAUI με Handlers και Native AOT σε iOS φτάνει το 95–98% της απόδοσης μιας native εφαρμογής SwiftUI. Σε Android η διαφορά με εφαρμογή Kotlin είναι 3–7% σε δοκιμές απόδοσης UI (Microsoft Benchmarks, 2024). Για τις περισσότερες επιχειρηματικές εφαρμογές η διαφορά είναι απαρατήρητη για τον χρήστη.
Σύνοψη
Θα αναπτύξουμε μια εφαρμογή για κινητά έτοιμη για χρήση
Η IT Sectr δημιουργεί εφαρμογές iOS και Android για νεοφυείς επιχειρήσεις και επιχειρήσεις από το 2017. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.
Διαβάστε επίσης