Cos'è Xamarin

Una ottima definizione di cosa è Xamarin è presente su Wikipedia:
Xamarin è un’azienda produttrice di software statunitense con sede a San Francisco, California, fondata nel maggio 2011 dagli ingegneri di Mono, Mono per Android e MonoTouch che sono implementazioni multipiattaforma di Common Language Infrastructure (CLI) e di Common Language Specifications (Microsoft .NET). Con un codice condiviso basato su C#, gli sviluppatori possono usare gli strumenti Xamarin per scrivere applicazioni native Android, iOS e Windows con interfacce utenti native e condividere il codice su diverse piattaforme. Xamarin ha oltre 1 milione di sviluppatori in più di 120 paesi nel mondo (dati aggiornati a Maggio 2015).
E' notizia recente l'acquisizione di Xamarin da parte di Microsoft, acquisizione che rende ancora più interessante per gli sviluppatori l'utilizzo di questo piattaforma che sicuramente sarà supportata con ancora maggior slancio

http://blogs.microsoft.com/blog/2016/02/24/microsoft-to-acquire-xamarin-and-empower-more-developers-to-build-apps-on-any-device/

Perchè utilizzarlo?

A differenza di quanto permettono di fare altre soluzioni di sviluppo multipiattaforma (PhoneGap e simili) che utilizzano come linguaggio html, css e javascript ed eseguono il codice in un controllo WebView, Xamarin permette di sviluppare applicazioni native utilizzando come linguaggio di sviluppo C# e l'IDE Visual Studio o Xamarin Studio (a seconda della licenza che si acquista).
Vantaggio da non sottovalutare avendo a disposizione app native (oltre naturalmente alle performance, all'utilizzo di memoria e all'integrazione con il sistema) è quello che la nostra app utilizzerà la UI della piattaforma su cui gira quindi uno stesso controllo sarà renderizzato in modo coerente con la piattaforma su cui l'app sta girando.
Xamarin permette anche di sviluppare app per Android Wear,Android Tv ed Apple Watch permettendo agli sviluppatori di poter essere produttivi su praticamente tutte le piattaforme.




Come funziona

Xamarin si comporta diversamente in base alla piattaforma su cui deve compilare.
Per le app Windows quello che viene creato è codice IL per la piattaforma .NET identico a quello che verrebbe creato per una classica applicazione windows.
Per iOS viene eseguita una Compilazione Ahead of Time (AOT) che produce un pacchetto nativo, con le stesse performance di un’applicazione scritta in Objective-C o Swift
Per Android si procede in modo simile al quanto avviene per il .NET standard, il codice C# viene convertito in IL e incluso nell’APK. L’IL viene poi compilato in codice nativo in modalità Just-In-Time (JIT) sul device.


Struttura di un progetto Xamarin


Proprio per il fatto che vengono prodotte app native per ogni piattaforma, quello a cui ci si trova davanti quando si sviluppa non è un singolo progetto "Universale", ma  un progetto per piattaforma che vorremo supportare più un progetto libreria contenente il codice in comune.
Quello che Xamarin infatti mette a disposizione è un wrapper per tutte le api dei vari sistemi in c# permettendoci quindi di avere tutta la logica della nostra app in comune tra tutte le piattaforme (da studi effettuati questa porzione di codice comune può variare dal 75 fino al 90% del totale di tutto il codice del progetto), per la parte grafica dovremo invece utilizzare gli strumenti standard di ogni piattaforma, quindi lo xaml per windows, l'xml per android e le storyboard per iOS.
Per questo motivo anche alcune api saranno differenti per ogni piattaforma (ad es. quelle per accedere alla posizione gps).
Il punto di forza di Xamarin è il riuscire a coprire il 100% delle api di ogni piattaforma ed essere sempre allineato con ogni nuova versione degli sdk di sviluppo per ogni piattaforma.

Xamarin Forms


Per riuscire ad estendere la quantità di codice riutilizzabile anche alla UI, Xamarin mette anche a disposizione le Xamarin Forms, un SDK che permette utilizzando il linguaggio XAML (molto simile a quello utilizzato nella app RT e UWP ma con alcune differenze sia nella sintassi che nella nomenclatura degli oggetti) di comporre interfacce grafiche che saranno poi utilizzate dalle singole app per comporre la propria UI in maniera nativa.
Le Form permettono anche il binding degli oggetti, i datatemplate, la localizzazione dell'applicazione anche nello xaml e molte altre caratteristiche familiari a chi sviluppa per Windows anche se come abbiamo detto con qualche piccola differenza.
Xamarin permette anche di avere un mix di pagine "native" e forms per ogni applicazione in modo da poter sfruttare nel modo che si desidera le peculiarità di ogni piattaforma.


Cosa serve per sviluppare



A seconda della licenza che a cui abbiamo accesso possiamo utilizzare
Xamarin Studio:
  • Disponibile sia per Windows che per OS X
  • Supporto ad Android e iOS (solo su OS X)
  • Incluso nella licenza di Xamarin
Visual Studio:
  • Plugin per l’integrazione in Visual Studio
  • Supporto ad Android, iOS e Windows Phone

Piccola nota riguarda lo sviluppo su iOS, le varie licenze di Apple obbligano infatti l'utente a disporre di un mac fisico per poter eseguire la compilazione di un'app (attenzione la licenza vieta anche l'utilizzo di una macchina virtuale in cui far girare OSX) quindi anche su utilizziamo visual studio per sviluppare per iOS potremo utilizzarlo per lo sviluppo dell'applicazione, ma per poterla compilare e testare avremo comunque bisogno di un Mac collegata in rete su cui è installato Xcode ed iOS SDK insieme a xamarin studio con lo Xamarin Mac Agent. Visual studio una volta configurato potrà poi dialogare con il Mac Agent e tutto lo sviluppo procederà direttamente dall'IDE che lancerà la compilazione sul Mac e vi eseguirà il codice mantenendone comunque il controllo, quindi potremo eseguire tutte le operazioni che siamo abituati a fare sviluppando come ad esempio il debug e l'esplorazione delle variabili.



Conoscenze necessarie

Per utilizzare Xamarin occorre avere un background sulle piattaforme su cui si vuole sviluppare.
Come abbiamo già detto, il fatto di avere come risultato delle app native costringe l'utente a gestire differentemente alcune cose per le varie piattaforme e mentre per alcune come la UI esistono le Xamarin Forms per evitare di scrivere codice per ogni piattaforma per altre purtroppo non è possibile.
Esistono molti controlli già disponibili e scaricabili dallo store https://components.xamarin.com/ per tutte le piattaforme (anche se spesso manca la parte windows purtroppo) per unificare il codice ma per alcune peculiarità  come ad esempio le live tile su windows o i widget su android sarà necessario utilizzare comunque le api specifiche, così come  per alcune funzioni di accesso al sistema.
Occorre quindi capire bene come può esserci utile Xamarin prima di iniziare ad usarlo. Se quello che vogliamo è scrivere un solo codice senza preoccuparci del sistema sul quale gira la nostra applicazione, allora se non è il caso di app "veramente semplici" sarà il caso di prendere in considerazione qualche altro tool.
Quello che vuole fornire Xamarin è la possibilità di utilizzare le proprie conoscenze di un ambiente di sviluppo (Visual Studio o Xamarin Studio) e di un unico linguaggio (C#) per avere accesso a tutte le possibilità di sviluppo su tutte le maggiori piattaforme.

Prezzi


Xamarin ha un costo che può essere considerato piuttosto elevato dato che è di 999$ annui per piattaforma (Android ed IOs, il supporto a Windows è offerto gratuitamente). Sono presenti anche altre formule come la Indie con abbonameno mensile ma non prevedere l'utilizzo del plugin per visual studio.
E' presente anche una versione di valutazione di 30 giorni della versione Business, le app prodotte però con essa funzioneranno solo per 24 ore dopo la compilazione e visualizzeranno uno splash screen indicante che l'app è stata costruita con SDK di prova di Xamarin.

A seguito dell'acquisizione da parte di Microsoft di cui abbiamo parlato nel primo paragrafo, sicuramente i prezzi varieranno, ma al momento della scrittura di questo post (marzo 2016) ancora non sono disponibili dettagli in merito


Conclusione

Xamarin è uno strumento molto potente ma proprio per questo necessita di scendere a compromessi per poter essere utilizzato in tutta la sua potenza e conoscere le piattaforme per cui si sviluppa.
Se però può essere utile per il nostro scopo non occorre farsi spaventare dal prezzo di utilizzo, il tempo risparmiato e l'aumento delle piattaforme supportate si faranno presto ripagare.
Nei prossimi post vedremo come realizzare il nostro primo progetto con xamarin forms e come sfruttarlo a pieno.

Risorse

Store componenti
Prezzi
Forum di supporto
Acquisizione Xamarin-Microsoft