Parte 1: Informazioni sulla piattaforma Xamarin Mobile
La piattaforma Xamarin è costituita da molti elementi che consentono di sviluppare applicazioni per iOS e Android:
- Linguaggio C#: consente di usare una sintassi familiare e funzionalità sofisticate, ad esempio Generics, LINQ e Parallel Task Library.
- Mono .NET Framework : fornisce un'implementazione multipiattaforma delle funzionalità estese di .NET Framework di Microsoft.
- Compilatore : a seconda della piattaforma, produce un'app nativa (ad esempio, iOS) o un'applicazione e un runtime .NET integrati (ad esempio, Android). Il compilatore esegue anche molte ottimizzazioni per la distribuzione per dispositivi mobili, ad esempio il collegamento di codice inutilizzato.
- Strumenti IDE : Visual Studio in Mac e Windows consente di creare, compilare e distribuire progetti Xamarin.
Inoltre, poiché il linguaggio sottostante è C# con .NET Framework, i progetti possono essere strutturati per condividere il codice che può essere distribuito anche in Windows Telefono.
Dietro le quinte
Anche se Xamarin consente di scrivere app in C# e condividere lo stesso codice tra più piattaforme, l'implementazione effettiva in ogni sistema è diversa.
Compilazione
L'origine C# consente di accedere a un'app nativa in modi diversi in ogni piattaforma:
- iOS : C# è in anticipo (AOT) compilato in linguaggio assembly ARM. .NET Framework è incluso, con classi inutilizzate rimosse durante il collegamento per ridurre le dimensioni dell'applicazione. Apple non consente la generazione di codice di runtime in iOS, quindi alcune funzionalità del linguaggio non sono disponibili (vedere Limitazioni di Xamarin.iOS).
- Android : C# viene compilato in IL e inserito in un pacchetto con MonoVM + JIT'ing. Le classi inutilizzate nel framework vengono rimosse durante il collegamento. L'applicazione viene eseguita side-by-side con Java/ART (runtime Android) e interagisce con i tipi nativi tramite JNI (vedere Limitazioni di Xamarin.Android).
- Windows : C# viene compilato in IL ed eseguito dal runtime predefinito e non richiede strumenti Xamarin. La progettazione di applicazioni Windows seguendo le indicazioni di Xamarin semplifica il riutilizzo del codice in iOS e Android. Il piattaforma UWP (Universal Windows Platform) include anche un'opzione .NET Native, che si comporta in modo analogo alla compilazione AOT di Xamarin.iOS.
La documentazione del linker per Xamarin.iOS e Xamarin.Android fornisce altre informazioni su questa parte del processo di compilazione.
È consigliabile evitare il runtime di 'compilazione', generando codice in modo dinamico con System.Reflection.Emit
.
Il kernel di Apple impedisce la generazione dinamica di codice nei dispositivi iOS, pertanto l'emissione di codice in tempo reale non funzionerà in Xamarin.iOS. Analogamente, le funzionalità Dynamic Language Runtime non possono essere usate con gli strumenti Xamarin.
Alcune funzionalità di reflection funzionano ,ad esempio MonoTouch.Dialog lo usa per l'API Reflection, ma non per la generazione di codice.
Accesso all'SDK della piattaforma
Xamarin rende facilmente accessibili le funzionalità fornite dall'SDK specifico della piattaforma con una sintassi C# familiare:
- iOS : Xamarin.iOS espone i framework CocoaTouch SDK di Apple come spazi dei nomi a cui è possibile fare riferimento da C#. Ad esempio, il framework UIKit che contiene tutti i controlli dell'interfaccia utente può essere incluso con un'istruzione semplice
using UIKit;
. - Android : Xamarin.Android espone Android SDK di Google come spazi dei nomi, quindi è possibile fare riferimento a qualsiasi parte dell'SDK supportato con un'istruzione using, ad esempio
using Android.Views;
per accedere ai controlli dell'interfaccia utente. - Windows : le app di Windows vengono compilate usando Visual Studio in Windows. I tipi di progetto includono Windows Form, WPF, WinRT e la piattaforma UWP (Universal Windows Platform) (UWP).
Integrazione facile per gli sviluppatori
La bellezza di Xamarin è che, nonostante le differenze, Xamarin.iOS e Xamarin.Android (abbinato agli SDK Windows di Microsoft) offrono un'esperienza perfetta per la scrittura di codice C# che può essere riutilizzato in tutte e tre le piattaforme.
La logica di business, l'utilizzo del database, l'accesso alla rete e altre funzioni comuni possono essere scritte una sola volta e riutilizzate in ogni piattaforma, fornendo una base per interfacce utente specifiche della piattaforma che sembrano ed eseguono come applicazioni native.
Disponibilità dell'IDE (Integrated Development Environment)
Lo sviluppo di Xamarin può essere eseguito in Visual Studio in Mac o Windows. L'IDE scelto sarà determinato dalle piattaforme di destinazione.
Poiché le app di Windows possono essere sviluppate solo in Windows, per la compilazione per iOS, Android e Windows richiede Visual Studio per Windows. Tuttavia, è possibile condividere progetti e file tra computer Windows e Mac, in modo che le app iOS e Android possano essere compilate in un Mac e codice condiviso in un secondo momento possono essere aggiunte a un progetto Windows.
I requisiti di sviluppo per ogni piattaforma sono descritti in modo più dettagliato nella guida ai requisiti .
iOS
Lo sviluppo di applicazioni iOS richiede un computer Mac, che esegue macOS. È anche possibile usare Visual Studio per scrivere e distribuire applicazioni iOS con Xamarin in Visual Studio. Tuttavia, un Mac è ancora necessario per scopi di compilazione e licenza.
L'IDE Xcode di Apple deve essere installato per fornire il compilatore e il simulatore per il test. Puoi testare gratuitamente i tuoi dispositivi, ma per creare applicazioni per la distribuzione (ad esempio, l'App Store) devi partecipare al Programma per sviluppatori apple ($ 99 USD all'anno). Ogni volta che invii o aggiorni un'applicazione, deve essere esaminata e approvata da Apple prima che venga resa disponibile per il download da parte dei clienti.
Il codice viene scritto con l'IDE di Visual Studio e i layout dello schermo possono essere compilati a livello di codice o modificati con Xcode in un Mac.
Per istruzioni dettagliate sulla configurazione, vedere la Guida all'installazione di Xamarin.iOS.
Android
Lo sviluppo di applicazioni Android richiede l'installazione degli SDK Java e Android. Gli SDK forniscono il compilatore, l'emulatore e altri strumenti necessari per la compilazione, la distribuzione e il test. Java, Android SDK e gli strumenti di Xamarin di Google possono essere tutti installati ed eseguiti in Windows e macOS. Sono consigliate le configurazioni seguenti:
- Windows 10 con Visual Studio 2019
- macOS Mojave (10.11+) con Visual Studio 2019 per Mac
Xamarin fornisce un programma di installazione unificato che configurerà il sistema con i prerequisiti di Java, Android e Xamarin Tools (inclusa una finestra di progettazione visiva per i layout dello schermo). Per istruzioni dettagliate, vedere la Guida all'installazione di Xamarin.Android.
È possibile compilare e testare applicazioni su un dispositivo reale senza alcuna licenza da Google, ma per distribuire l'applicazione tramite un negozio (ad esempio Google Play, Amazon o Barnes & Noble) una tassa di registrazione può essere pagata all'operatore. Google Play pubblicherà immediatamente la tua app, mentre gli altri negozi hanno un processo di approvazione simile a quello di Apple.
Windows
Le app di Windows (WinForms, WPF o UWP) vengono compilate con Visual Studio. Non usano direttamente Xamarin. Tuttavia, il codice C# può essere condiviso tra Windows, iOS e Android. Visitare Dev Center di Microsoft per informazioni sugli strumenti necessari per lo sviluppo di Windows.
Creazione dell'interfaccia utente
Un vantaggio fondamentale dell'uso di Xamarin è che l'interfaccia utente dell'applicazione usa controlli nativi in ogni piattaforma, creando app indistingubili da un'applicazione scritta rispettivamente in Objective-C o Java (per iOS e Android).
Quando si compilano schermate nell'app, è possibile disporre i controlli nel codice o creare schermate complete usando gli strumenti di progettazione disponibili per ogni piattaforma.
Creare controlli a livello di codice
Ogni piattaforma consente l'aggiunta di controlli dell'interfaccia utente a una schermata usando il codice. Questo può richiedere molto tempo perché può essere difficile visualizzare la progettazione terminata quando si codificano le coordinate dei pixel hardcoded per le posizioni e le dimensioni del controllo.
La creazione di controlli offre tuttavia vantaggi, in particolare in iOS per la creazione di visualizzazioni che ridimensionano o eseguono il rendering in modo diverso nelle dimensioni dello schermo i Telefono e iPad.
Progettazione visiva
Ogni piattaforma ha un metodo diverso per la disposizione visiva degli schermi:
- iOS : gli storyboard contengono più visualizzazioni e controlli ed è possibile accedervi in . File storyboard incluso nel progetto.
- Android : Xamarin offre una finestra di progettazione dell'interfaccia utente di trascinamento della selezione android per Visual Studio.
- Windows : Microsoft offre una finestra di progettazione dell'interfaccia utente di trascinamento della selezione in Visual Studio e Blend. I layout dello schermo vengono archiviati come . File XAML.
Questi screenshot mostrano le finestre di progettazione dello schermo visivo disponibili in ogni piattaforma:
In tutti i casi è possibile fare riferimento agli elementi creati visivamente nel codice.
Considerazioni sull'interfaccia utente
Un vantaggio fondamentale dell'uso di Xamarin per creare applicazioni multipiattaforma è che possono sfruttare i vantaggi dei toolkit nativi dell'interfaccia utente per presentare un'interfaccia familiare all'utente. L'interfaccia utente eseguirà anche la stessa velocità di qualsiasi altra applicazione nativa.
Alcune metafore dell'interfaccia utente funzionano su più piattaforme (ad esempio, tutte e tre le piattaforme usano un controllo elenco di scorrimento simile), ma per consentire all'applicazione di "sentire" correttamente l'interfaccia utente deve sfruttare i vantaggi degli elementi dell'interfaccia utente specifici della piattaforma quando appropriato. Esempi di metafore dell'interfaccia utente specifiche della piattaforma includono:
- iOS : spostamento gerarchico con pulsante Indietro leggero, schede nella parte inferiore dello schermo.
- Android : pulsante Indietro hardware/software-sistema, menu azione, schede nella parte superiore dello schermo.
- Windows : le app di Windows possono essere eseguite su desktop, tablet (ad esempio Microsoft Surface) e telefoni. I dispositivi Windows 10 possono avere il pulsante Indietro hardware e i riquadri animati, ad esempio.
È consigliabile leggere le linee guida di progettazione rilevanti per le piattaforme di destinazione:
- iOS - Linee guida per l'interfaccia umana di Apple
- Android - Linee guida sull'interfaccia utente di Google
- Windows - Linee guida per la progettazione dell'esperienza utente per Windows
Libreria e riutilizzo del codice
La piattaforma Xamarin consente di riutilizzare il codice C# esistente in tutte le piattaforme e l'integrazione di librerie scritte in modo nativo per ogni piattaforma.
Origini e librerie C#
Poiché i prodotti Xamarin usano C# e .NET Framework, un sacco di codice sorgente esistente (sia progetti open source che interni) possono essere riutilizzati nei progetti Xamarin.iOS o Xamarin.Android. Spesso l'origine può essere semplicemente aggiunta a una soluzione Xamarin e funzionerà immediatamente. Se è stata usata una funzionalità .NET Framework non supportata, potrebbero essere necessarie alcune modifiche.
Esempi di origine C# che possono essere usati in Xamarin.iOS o Xamarin.Android includono: SQLite-NET, NewtonSoft.JSON e SharpZipLib.
Objective-C Associazioni e progetti di associazione
Xamarin fornisce uno strumento denominato btouch che consente di creare associazioni che consentono Objective-C l'uso di librerie nei progetti Xamarin.iOS. Per informazioni dettagliate su come eseguire questa operazione, vedere la documentazione sui tipi di associazioneObjective-C.
Esempi di librerie che possono essere usate in Xamarin.iOS includono l'analisi del Objective-C codice a barre RedLaser, Google Analytics e l'integrazione di PayPal. Le associazioni Xamarin.iOS open source sono disponibili in GitHub.
binding .jar + progetti di associazione
Xamarin supporta l'uso di librerie Java esistenti in Xamarin.Android. Per informazioni dettagliate su come usare un oggetto , vedere la documentazione relativa all'associazione di una libreria Java. File JAR da Xamarin.Android.
Le associazioni Xamarin.Android open source sono disponibili in GitHub.
C tramite PInvoke
La tecnologia "Platform Invoke" (P/Invoke) consente al codice gestito (C#) di chiamare i metodi nelle librerie native, nonché il supporto per le librerie native per richiamare il codice gestito.
Ad esempio, la libreria SQLite-NET usa istruzioni simili alle seguenti:
[DllImport("sqlite3", EntryPoint = "sqlite3_open", CallingConvention=CallingConvention.Cdecl)]
public static extern Result Open (string filename, out IntPtr db);
Viene associato all'implementazione SQLite in linguaggio C nativo in iOS e Android. Gli sviluppatori che hanno familiarità con un'API C esistente possono costruire un set di classi C# per eseguire il mapping all'API nativa e usare il codice della piattaforma esistente. È disponibile la documentazione per il collegamento di librerie native in Xamarin.iOS, principi simili si applicano a Xamarin.Android.
C++ tramite CppSharp
Miguel spiega CXXI (ora chiamato CppSharp) sul suo blog. Un'alternativa all'associazione diretta a una libreria C++ consiste nel creare un wrapper C e associarlo a tale libreria tramite P/Invoke.