Che cos'è .NET MAUI?

.NET Multi-Platform App UI (.NET MAUI) è un framework multipiattaforma per la creazione di app native per dispositivi mobili e desktop con C# e XAML.

Usando .NET MAUI, è possibile sviluppare app che possono essere eseguite in Android, iOS, macOS e Windows da una singola codebase condivisa.

.NET MAUI supported platforms.

.NET MAUI è open source ed è l'evoluzione di Xamarin.Forms, estesa da scenari mobili a desktop, con controlli dell'interfaccia utente ricompilati da zero per prestazioni ed estendibilità. Se in precedenza si è usato Xamarin.Forms per creare interfacce utente multipiattaforma, si noteranno molte analogie con .NET MAUI. Esistono tuttavia alcune differenze. Con .NET MAUI è possibile creare app multi-piattaforma usando un singolo progetto, ma è possibile aggiungere codice sorgente e risorse specifici della piattaforma all'occorrenza. Uno degli obiettivi principali di .NET MAUI è consentire all'utente di implementare quanta più logica dell'app e quanto più layout dell'interfaccia utente possibile in un'unica codebase.

Chi è .NET MAUI è per

.NET MAUI è destinato agli sviluppatori che vogliono:

  • Scrivere app multipiattaforma in XAML e C# da un'unica codebase condivisa in Visual Studio.
  • Condividere il layout e la progettazione dell'interfaccia utente tra le piattaforme.
  • Condividere codice, test e logica di business tra piattaforme.

Funzionamento di .NET MAUI

.NET MAUI unifica le API Android, iOS, macOS e Windows in un'unica API che consente un'esperienza di sviluppo WORA (Write-Once Run-Anywhere), offrendo inoltre accesso avanzato a ogni aspetto di ogni piattaforma nativa.

.NET 6 o versione successiva offre una serie di framework specifici della piattaforma per la creazione di app: libreria .NET Android, .NET iOS, .NET macOS e Windows UI 3 (WinUI 3). Tutti questi framework hanno accesso alla stessa libreria di classi di base .NET ( BCL). Questa libreria astrae i dettagli della piattaforma sottostante dal codice. La libreria di classi base dipende dal runtime .NET per fornire l'ambiente di esecuzione per il codice. Per Android, iOS e macOS, l'ambiente viene implementato da Mono, un'implementazione del runtime .NET. In Windows .NET CoreCLR fornisce l'ambiente di esecuzione.

Anche se il BCL consente alle app in esecuzione su piattaforme diverse di condividere la logica di business comune, le varie piattaforme hanno diversi modi per definire l'interfaccia utente per un'app e forniscono modelli diversi per specificare come gli elementi di un'interfaccia utente comunicano e interagiscono. È possibile creare l'interfaccia utente per ogni piattaforma separatamente usando il framework specifico della piattaforma appropriato (.NET Android, .NET iOS, .NET macOS o WinUI 3), ma questo approccio richiede quindi di mantenere una codebase per ogni singola famiglia di dispositivi.

.NET MAUI offre un singolo framework per la compilazione delle interfacce utente per le app per dispositivi mobili e desktop. Il diagramma seguente mostra una visualizzazione generale dell'architettura di un'app MAUI .NET:

.NET MAUI architecture diagram.

In un'app MAUI .NET si scrive codice che interagisce principalmente con l'API MAUI .NET (1). .NET MAUI usa quindi direttamente le API della piattaforma nativa (3). Inoltre, il codice dell'app può esercitare direttamente le API della piattaforma (2), se necessario.

Le app MAUI .NET possono essere scritte su PC o Mac e compilate in pacchetti di app native:

  • Le app Android compilate con .NET MAUI vengono compilate da C# in un linguaggio intermedio (IL), che viene quindi compilato jit (JUST-in-time) in un assembly nativo all'avvio dell'app.
  • Le app iOS compilate con .NET MAUI sono completamente in anticipo (AOT) compilate da C# in codice assembly ARM nativo.
  • Le app macOS create con .NET MAUI usano Mac Catalyst, una soluzione di Apple che porta l'app iOS compilata con UIKit sul desktop e la aumenta con API AppKit e piattaforma aggiuntive in base alle esigenze.
  • Le app di Windows create con .NET MAUI usano la libreria windows UI 3 (WinUI 3) per creare app native destinate al desktop di Windows. Per altre informazioni su WinUI 3, vedere Libreria dell'interfaccia utente di Windows.

Nota

La creazione di app per iOS e macOS richiede un Mac.

Elementi forniti da .NET MAUI

.NET MAUI offre una raccolta di controlli che possono essere usati per visualizzare dati, avviare azioni, indicare attività, visualizzare raccolte, selezionare dati e altro ancora. Oltre a una raccolta di controlli, .NET MAUI fornisce anche:

  • Un motore di layout elaborato per la progettazione di pagine.
  • Più tipi di pagina per la creazione di tipi di spostamento complessi, come i drawer.
  • Supporto per data-binding, per modelli di sviluppo più eleganti e gestibili.
  • Possibilità di personalizzare i gestori per migliorare il modo in cui vengono presentati gli elementi dell'interfaccia utente.
  • API multipiattaforma per l'accesso alle funzionalità native dei dispositivi. Queste API consentono alle app di accedere alle funzionalità del dispositivo, ad esempio il GPS, l'accelerometro e gli stati della batteria e della rete. Per altre informazioni, vedere API multipiattaforma per le funzionalità dei dispositivi.
  • Funzionalità grafiche multipiattaforma, che fornisce un'area di disegno che supporta forme e immagini di disegno, operazioni di composizione e trasformazioni di oggetti grafici.
  • Un singolo sistema di progetto che usa più destinazioni per Android, iOS, macOS e Windows. Per altre informazioni, vedere Progetto singolo .NET MAUI.
  • Ricaricamento rapido di .NET, in modo da poter modificare sia il codice XAML che il codice sorgente gestito mentre l'app è in esecuzione, quindi osservare il risultato delle modifiche senza ricompilare l'app. Per altre informazioni, vedere Ricaricamento rapido di .NET.

API multipiattaforma per le funzionalità dei dispositivi

.NET MAUI offre API multipiattaforma per le funzionalità native dei dispositivi. Esempi di funzionalità fornite da .NET MAUI per l'accesso alle funzionalità del dispositivo includono:

  • Accesso ai sensori, ad esempio l'accelerometro, la bussola e il giroscopio sui dispositivi.
  • Possibilità di controllare lo stato di connettività di rete del dispositivo e rilevare le modifiche.
  • Fornire informazioni sul dispositivo in cui è in esecuzione l'app.
  • Copiare e incollare testo negli Appunti di sistema, tra le app.
  • Selezionare uno o più file dal dispositivo.
  • Archiviare i dati in modo sicuro come coppie chiave/valore.
  • Utilizzare i motori predefiniti di sintesi vocale per leggere il testo dal dispositivo.
  • Avviare flussi di autenticazione basati su browser in ascolto di un callback a un URL registrato dell'app specifico.

Progetto singolo

Il progetto singolo .NET MAUI accetta in genere le esperienze di sviluppo specifiche della piattaforma riscontrate durante lo sviluppo di app e le astrae in un singolo progetto condiviso che può essere usato come destinazione Android, iOS, macOS e Windows.

Il singolo progetto MAUI .NET offre un'esperienza di sviluppo multipiattaforma semplificata e coerente, indipendentemente dalle piattaforme di destinazione. Il progetto singolo .NET MAUI offre le funzionalità seguenti:

  • Un singolo progetto condiviso che può essere destinati a Android, iOS, macOS e Windows.
  • Selezione semplificata della destinazione di debug per l'esecuzione delle app MAUI .NET.
  • File di risorse condivisi all'interno del singolo progetto.
  • Un singolo manifesto dell'app che specifica il titolo, l'ID e la versione dell'app.
  • Accesso alle API e agli strumenti specifici della piattaforma quando necessario.
  • Un singolo punto di ingresso dell'app multipiattaforma.

Il progetto singolo .NET MAUI è abilitato tramite multitargeting e l'uso di progetti in stile SDK. Per altre informazioni sul progetto singolo MAUI .NET, vedere Progetto singolo .NET MAUI.

Ricaricamento rapido

.NET MAUI include il supporto per il ricaricamento rapido di .NET, che consente di modificare il codice sorgente gestito mentre l'app è in esecuzione, senza la necessità di sospendere o raggiungere manualmente un punto di interruzione. È quindi possibile applicare le modifiche al codice all'app in esecuzione senza ricompilare.

.NET MAUI include anche il supporto per il ricaricamento rapido XAML, che consente di salvare i file XAML e visualizzare le modifiche riflesse nell'app in esecuzione senza ricompilare. Inoltre, lo stato di spostamento e i dati verranno mantenuti, consentendo di scorrere rapidamente l'interfaccia utente senza perdere la posizione nell'app.