Panoramica della creazione di applicazioni multipiattaforma
Questa guida presenta prima di tutto la piattaforma Xamarin. Verrà illustrato come progettare un'applicazione multipiattaforma per ottimizzare il riutilizzo del codice. Infine, come offrire un'esperienza nativa di alta qualità nelle piattaforme per dispositivi mobili iOS e Android.
L'approccio usato in questo documento può essere usato sia per le app di produttività che per le app di gioco, ma l'attenzione riguarda la produttività e l'utilità (applicazioni non di gioco). Vedi Visual Studio Tools per Unity per indicazioni sullo sviluppo di giochi multipiattaforma.
La frase "write-once, run everywhere" viene spesso usata per esaltare le virtù di una singola codebase che viene eseguita senza modifiche su più piattaforme. Sebbene abbia il vantaggio di riutilizzare il codice, questo approccio presenta svantaggi. Due svantaggi comuni sono le applicazioni con un set di funzionalità con denominatore comune più basso e un'interfaccia utente di aspetto generico che non si adatta perfettamente a nessuna delle piattaforme di destinazione.
Xamarin non è solo una piattaforma "write-once, run everywhere", perché uno dei suoi punti di forza è la possibilità di implementare interfacce utente native in modo specifico per ogni piattaforma. Tuttavia, con la progettazione ponderata è ancora possibile condividere la maggior parte del codice dell'interfaccia non utente e ottenere il meglio di entrambi i mondi. Scrivere l'archiviazione dei dati e il codice della logica di business una sola volta e presentare interfacce utente native in ogni piattaforma. Questo documento illustra un approccio architetturale generale per raggiungere questo obiettivo.
Ecco un riepilogo dei punti chiave per la creazione di app multipiattaforma Xamarin:
- Usare C# - Scrivere le app in C#. Il codice esistente scritto in C# può essere convertito in iOS e Android usando facilmente Xamarin e usato nelle app di Windows.
- Usare modelli di progettazione MVC o MVVM: sviluppare l'interfaccia utente dell'applicazione usando il modello/visualizzazione/controller. Progettare l'applicazione usando un approccio Model/View/Controller o un approccio Model/View/ViewModel in cui esiste una netta separazione tra il "Modello" e il resto. Determinare quali parti dell'applicazione useranno elementi dell'interfaccia utente nativa di ogni piattaforma (iOS, Android, Windows, Mac) e usarla come linea guida per suddividere l'applicazione in due componenti: "Core" e "User-Interface".
- Creare interfacce utente native: ogni applicazione specifica del sistema operativo offre un livello di interfaccia utente diverso (implementato in C# con l'assistenza degli strumenti di progettazione dell'interfaccia utente nativi):
- In iOS usare le API UIKit per creare applicazioni native usando Storyboard per il livello presentazione, creato in Xcode.
- In Android usare Android.Views per creare applicazioni native, sfruttando la finestra di progettazione dell'interfaccia utente di Xamarin.
- In Windows si userà XAML per il livello presentazione, creato nella finestra di progettazione dell'interfaccia utente di Visual Studio o Blend.
- In Mac si useranno storyboard per il livello di presentazione, creato in Xcode.
I progetti Xamarin.Forms sono supportati in tutte le piattaforme e consentono di creare interfacce utente che possono essere condivise tra piattaforme usando XAML Xamarin.Forms.
La quantità di riutilizzo del codice dipende in gran parte dalla quantità di codice mantenuta nel core condiviso e dalla quantità di codice specifica dell'interfaccia utente. Il codice principale è qualsiasi elemento che non interagisce direttamente con l'utente, ma fornisce servizi per parti dell'applicazione che raccoglieranno e visualizzeranno queste informazioni.
Per aumentare la quantità di riutilizzo del codice, è possibile adottare componenti multipiattaforma che forniscono servizi comuni in tutti questi sistemi, ad esempio:
- SQLite-net per l'archiviazione SQL locale,
- Plug-in Xamarin per l'accesso a funzionalità specifiche del dispositivo, tra cui fotocamera, contatti e georilevazione,
- Pacchetti NuGet compatibili con progetti Xamarin, ad esempio Json.NET,
- Uso delle funzionalità di .NET Framework per reti, servizi Web, I/O e altro ancora.
Alcuni di questi componenti vengono implementati nel case study tasky .
Separare il codice riutilizzabile in una libreria principale
Seguendo il principio di separazione delle responsabilità tramite il layering dell'architettura dell'applicazione e quindi lo spostamento delle funzionalità di base indipendenti dalla piattaforma in una libreria principale riutilizzabile, è possibile ottimizzare la condivisione del codice tra piattaforme, come illustrato nella figura seguente:
Case study
C'è un case study che accompagna questo documento - Tasky Pro. Ogni case study illustra l'implementazione dei concetti descritti in questo documento in un esempio reale. Il codice è open source e disponibile in github.