.NET MAUI — cos’è, architettura e sviluppo multipiattaforma

Autore: IT Sectr Pubblicato: 2026-05-01 Tempo di lettura: 8 min

.NET MAUI è un framework multipiattaforma Microsoft per creare applicazioni native in C# e XAML, rilasciato nel 2022 insieme a .NET 6. Secondo la Microsoft .NET MAUI Documentation, 2024, MAUI supporta iOS, Android, Windows, macOS e Tizen, unificandoli in un unico progetto con una base di codice condivisa. Il framework è il successore diretto di Xamarin.Forms.

Punti chiave

  • .NET MAUI — successore di Xamarin.Forms, integrato in .NET 6+ senza SDK separato
  • Un Single Project unificato sostituisce tre progetti di piattaforma separati
  • XAML e C# vengono utilizzati per la costruzione dichiarativa dell’interfaccia utente e la logica di business
  • Gli Handlers hanno sostituito i vecchi renderer di Xamarin.Forms per l’astrazione di piattaforma
  • Supporto per 5 piattaforme: iOS, Android, Windows, macOS, Tizen

Cos’è .NET MAUI

.NET MAUI (Multi-platform App UI) è un’evoluzione di Xamarin.Forms, ricostruita da zero per .NET 6+. A differenza di Xamarin.Forms, che richiedeva progetti separati per ogni piattaforma, MAUI utilizza una struttura unica con un file .csproj condiviso e cartelle di piattaforma Platforms/iOS, Platforms/Android, Platforms/Windows e Platforms/MacCatalyst. La prima versione stabile di MAUI è stata rilasciata a maggio 2022.

La differenza principale tra .NET MAUI e il suo predecessore è l’integrazione completa con .NET 8 BCL (Base Class Library). Gli sviluppatori hanno accesso diretto a System.Text.Json, System.Net.Http, System.Linq, System.IO e altre API senza SDK aggiuntivo. Xamarin.Forms utilizzava .NET Standard 2.0 per la logica condivisa, limitando l’accesso alle nuove funzionalità della piattaforma .NET.

Secondo Microsoft Build 2024, .NET MAUI viene utilizzato in oltre 40.000 applicazioni nell’App Store e Google Play. Tra i progetti notevoli ci sono UPS Mobile, The Weather Channel e Siemens Teamcenter. Microsoft sta sviluppando attivamente MAUI come parte di .NET 9, previsto per novembre 2024.

Storia e origine di .NET MAUI

L’annuncio di .NET MAUI è stato fatto al Microsoft Build 2020 come parte della strategia di unificazione di .NET. Microsoft ha fuso .NET Core, Mono e .NET Framework in un’unica piattaforma .NET 5+. Xamarin.Forms è diventato la base per MAUI, ma la base di codice è stata completamente riscritta: le API obsolete sono state rimosse, i renderer sono stati sostituiti con Handlers, DependencyService è stato sostituito con un contenitore DI.

.NET MAUI 8 (novembre 2023) ha aggiunto il supporto per Native AOT, prestazioni migliorate di CollectionView, Blazor Hybrid (incorporamento di componenti Blazor in un’applicazione MAUI) e nuovo mapping dei caratteri. .NET MAUI 9 (2024) include il supporto per C# 12, l’integrazione migliorata con WinUI 3 e macOS Sonoma e una nuova API di trascinamento della selezione per tutte le piattaforme.

Differenza tra .NET MAUI e Xamarin.Forms

La prima differenza è un’applicazione unica. In Xamarin.Forms, iOS e Android richiedevano due progetti separati in una soluzione. In .NET MAUI, un singolo progetto con cartelle di piattaforma. Ciò semplifica la navigazione del codice, la gestione delle dipendenze e le pipeline CI/CD. Il file .csproj utilizza il formato SDK-style con TargetFrameworks: net8.0-android, net8.0-ios, net8.0-maccatalyst.

La seconda differenza è l’architettura di rendering che utilizza Handlers invece di renderer. In Xamarin.Forms, ogni elemento (Button, Label) aveva la propria classe Renderer che creava un controllo nativo. La personalizzazione richiedeva un Custom Renderer. In MAUI, un Handler è un oggetto leggero che mappa un elemento astratto a un controllo nativo e supporta Property Mappers per aggiornare le proprietà senza ricreare il controllo.

La terza differenza è un contenitore DI unificato Microsoft.Extensions.DependencyInjection. Xamarin.Forms utilizzava DependencyService per registrare le implementazioni di piattaforma. MAUI incorpora DI nel cuore del framework: i servizi vengono registrati in MauiAppBuilder, i controller ricevono le dipendenze tramite il costruttore. Ciò semplifica i test e segue le pratiche moderne di .NET.

Architettura di .NET MAUI

L’architettura di .NET MAUI si basa su un modello a più livelli. Il livello inferiore è .NET BCL e Mono Runtime (Android) / CoreCLR (Windows) / NativeAOT (iOS). Il livello intermedio è Microsoft.Maui.dll con il cuore del framework: Handlers, Layout, Graphics, Controls. Il livello superiore è l’applicazione dello sviluppatore con pagine XAML, ViewModel e servizi.

Single Project e Multi-Targeting

Single Project è una caratteristica architettonica chiave di .NET MAUI. Tutti i file sono divisi in tre categorie: codice condiviso (Shared), codice di piattaforma (Platforms) e risorse (Resources). Il multi-targeting in .csproj specifica per quali piattaforme viene compilata l’applicazione. Ogni piattaforma compila solo la propria cartella Platforms e il codice condiviso.

Il codice di piattaforma viene inserito in cartelle condizionali. Platforms/Android contiene MainActivity.cs, MainApplication.cs e AndroidManifest.xml. Platforms/iOS — AppDelegate.cs, Info.plist e Entitlements.plist. Platforms/Windows — Package.appxmanifest e App.xaml. Per la compilazione condizionale, il codice utilizza le direttive #if ANDROID, #if IOS, #if WINDOWS, #if MACCATALYST.

XAML e MVVM in .NET MAUI

XAML è un linguaggio di markup dichiarativo ereditato da Xamarin.Forms e WPF. In .NET MAUI, XAML viene utilizzato per descrivere pagine (ContentPage), layout (VerticalStackLayout, Grid, FlexLayout), elementi (Label, Entry, Button, Image) e controlli (CollectionView, CarouselView). XAML viene compilato in formato BAML al momento della compilazione.

Il pattern MVVM viene implementato tramite CommunityToolkit.Mvvm — una libreria open-source di Microsoft. L’attributo [ObservableProperty] genera proprietà INotifyPropertyChanged, [RelayCommand] crea comandi da metodi. CommunityToolkit.Mvvm 8.2 Source Generator trasforma la classe parziale ViewModel, generando ObservableObject senza Reflection. Ciò accelera il Binding del 30% rispetto all’implementazione manuale.

Esempio di applicazione .NET MAUI

csharp
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 = "Cliccami",
                    BackgroundColor = Colors.Blue,
                    TextColor = Colors.White,
                    Command = new Command(async () =>
                        await DisplayAlert("Ciao", "Mondo", "OK"))
                }
            }
        };
    }
}

Piattaforme e supporto

.NET MAUI supporta 5 piattaforme: iOS 15.0+, Android 5.0 (API 21)+, Windows 10 1809+, macOS 12.0+ (MacCatalyst) e Tizen 6.5+. Ogni piattaforma utilizza il proprio insieme di controlli e API. iOS utilizza UIKit tramite Mac Catalyst, Android — AndroidX tramite Xamarin.Android, Windows — WinUI 3, macOS — AppKit tramite Mac Catalyst.

Su iOS e Android, MAUI utilizza gli stessi meccanismi di rendering di Xamarin.Forms — controlli nativi dell’interfaccia utente. Tuttavia, gli Handlers forniscono una personalizzazione più flessibile. Per la configurazione di Button specifica della piattaforma su iOS, viene utilizzato OnPlatform<Button> con PlatformConfiguration.iOS. Per Windows, MAUI utilizza WinUI 3 — un moderno framework interfaccia utente di Microsoft con supporto per Fluent Design System.

Il supporto per macOS è stato aggiunto tramite Mac Catalyst — la tecnologia di Apple che esegue applicazioni UIKit su Mac. Ciò consente di riutilizzare il 100% del codice iOS di MAUI per la versione macOS dell’applicazione. Per funzioni Mac specifiche (Menu Bar, Touch Bar), MAUI fornisce API di piattaforma tramite Mac Catalyst e wrapper NSView.

Tizen è la piattaforma Samsung per Smart TV, smartphone e smart watch. Il supporto Tizen in .NET MAUI è implementato tramite Samsung Tizen .NET. Le applicazioni MAUI vengono compilate per Tizen tramite i binding Samsung TizenFX. Tuttavia, Tizen non è una piattaforma prioritaria per Microsoft — gli aggiornamenti per essa vengono rilasciati con un ritardo di 1–2 mesi.

PiattaformaVersione minimaFramework UIStato
iOSiOS 15.0UIKit (Mac Catalyst)Stabile
AndroidAPI 21 (5.0)AndroidX / Material 3Stabile
WindowsWin 10 1809WinUI 3 / Fluent DesignStabile
macOSmacOS 12.0AppKit (Mac Catalyst)Stabile
TizenTizen 6.5TizenFX / SamsungAggiuntivo

Vantaggi di .NET MAUI

Base di codice unificata — .NET MAUI riduce la duplicazione del codice. Un singolo progetto in C# e XAML compila per 5 piattaforme, fornendo fino al 95% di codice condiviso per applicazioni con interfaccia utente semplice. La logica di business, i servizi, i modelli di dati e i client HTTP si trovano nel codice condiviso. Solo le funzionalità specifiche della piattaforma (fotocamera, geolocalizzazione, biometria) richiedono implementazioni separate tramite DI.

Le prestazioni di .NET MAUI sono superiori a quelle di Xamarin.Forms. Gli Handlers riducono l’overhead di rendering: i test Microsoft mostrano una riduzione del 20–30% del tempo di rendering dello schermo rispetto a Xamarin.Forms 5.0. Native AOT su iOS compila il codice C# direttamente in istruzioni ARM64, eliminando la compilazione JIT e riducendo il tempo di avvio del 40%.

Blazor Hybrid è una capacità unica di .NET MAUI. BlazorWebView incorpora componenti Blazor direttamente in un’applicazione MAUI. Gli sviluppatori di interfacce web possono riutilizzare componenti Blazor (pagine Razor, interop JS, stili CSS) nell’applicazione mobile. Blazor Hybrid funziona su tutte e 5 le piattaforme MAUI senza modificare il codice dei componenti Blazor.

Ecosistema .NET — accesso a migliaia di pacchetti NuGet: Entity Framework Core per operazioni sui database, Serilog per la registrazione, Polly per tentativi di richieste HTTP, FluentValidation per la validazione. CommunityToolkit.Maui fornisce elementi di interfaccia pronti all’uso: Popup, Toast, Snackbar, SemanticScreenReader per l’accessibilità. .NET MAUI si integra con Azure, SignalR e Microsoft Graph SDK.

Strumenti di sviluppo — Visual Studio 2022 e Rider di JetBrains. XAML Hot Reload aggiorna l’interfaccia utente senza riavviare l’applicazione in 1–2 secondi. C# Hot Reload (da .NET 6+) ricompila una modifica del metodo senza riavviare il processo. Visual Studio Debugger, Profiler e IntelliCode completano il kit di strumenti per la diagnostica delle prestazioni e la qualità del codice.

Domande frequenti

Cos’è .NET MAUI?

.NET MAUI è un framework multipiattaforma Microsoft per creare applicazioni native in C# e XAML per iOS, Android, Windows, macOS e Tizen. È il successore di Xamarin.Forms, integrato in .NET 6+ e utilizza un unico progetto (Single Project) invece di progetti separati per ogni piattaforma.

In cosa .NET MAUI differisce da Xamarin.Forms?

.NET MAUI utilizza un unico progetto, Handlers invece di renderer, un contenitore DI integrato, Native AOT per iOS e Blazor Hybrid. Xamarin.Forms richiede progetti separati per ogni piattaforma, utilizza Custom Renderer per la personalizzazione dell’interfaccia utente, DependencyService per DI e non supporta Blazor. .NET MAUI fa parte di .NET, Xamarin.Forms è un SDK separato.

.NET MAUI supporta macOS?

Sì, .NET MAUI supporta macOS tramite Mac Catalyst (versione minima macOS 12.0). Le applicazioni iOS su MAUI vengono automaticamente compilate per Mac senza modifiche al codice. Per le funzioni native di Mac (Menu Bar, Dock, Touch ID), vengono utilizzate chiamate di piattaforma tramite Mac Catalyst e wrapper NSView nella cartella Platforms/MacCatalyst.

È possibile utilizzare pacchetti Flutter in .NET MAUI?

No, .NET MAUI non è compatibile con pacchetti Dart/Flutter. MAUI utilizza l’ecosistema .NET e i pacchetti NuGet. Per le funzionalità specifiche della piattaforma (fotocamera, Bluetooth, biometria), vengono utilizzate librerie native tramite Android Bindings (Kotlin/Java) e iOS Bindings (Objective-C/Swift). CommunityToolkit.Maui fornisce wrapper pronti per scenari comuni.

.NET MAUI è più lento di un’applicazione nativa?

La differenza nelle prestazioni è minima. .NET MAUI con Handlers e Native AOT su iOS raggiunge il 95–98% delle prestazioni di un’applicazione nativa SwiftUI. Su Android, la differenza con un’applicazione Kotlin è del 3–7% nei test di rendering dell’interfaccia utente (Microsoft Benchmarks, 2024). Per la maggior parte delle applicazioni aziendali, la differenza è impercettibile per l’utente.

Riepilogo

  • .NET MAUI — framework multipiattaforma Microsoft in C# e XAML, successore di Xamarin.Forms
  • Single Project con multi-targeting sostituisce 3 progetti separati con una configurazione
  • Gli Handlers forniscono un rendering più veloce dei renderer di Xamarin.Forms
  • Blazor Hybrid consente di incorporare componenti web direttamente in un’applicazione mobile
  • 5 piattaforme — iOS 15+, Android 5.0+, Windows 10, macOS 12+, Tizen 6.5+
  • Native AOT su iOS riduce il tempo di avvio del 40% e la dimensione del binario
  • Scegli .NET MAUI per progetti .NET che richiedono capacità multipiattaforma e accesso alle API native

Svilupperemo un'applicazione mobile chiavi in mano

IT Sectr crea applicazioni iOS e Android per startup e aziende dal 2017. Ti consulteremo e ti proporremo la soluzione migliore.

Discuti il progetto

Leggi anche