Xamarin vs. PhoneGap

Tutti abbiamo o avremo molto presto il problema di scrivere nel minor tempo possibile applicazioni mobile per almeno due piattaforme, forse tre. Inutile dire che due delle piattaforme sono in un qualche ordine dettato dal business e sono iOS e Android; la terza piattaforma è altrettanto ovviamente Windows Phone. Quali opzioni abbiamo oggi per ridurre il costo di sviluppo portandolo al di sotto della soglia data dalla semplice somma dei costi di sviluppo per ciascuna piattaforma? Di opzioni ce n’è almeno tre: Xamarin Studio, una qualsivoglia implementazione di Cordova e Appcelerator Titanium. In questo post mi limito ad un confronto diretto tra Xamarin Studio e PhoneGap, l’implementazione più conosciuta (ma non certo l’unica) della piattaforma open-source Cordova.

Xamarin Studio è un IDE separato, addirittura disponibile come estensione di Visual Studio, che permette di scrivere applicazioni per iOS e Android. È disponibile per Windows e Mac. Le applicazioni si basano sugli SDK nativi delle piattaforme ma la API esposta al programmatore è essenzialmente una variante del .NET Framework. Si trovano a disposizione classi ad hoc per la piattaforma target e classi con la stessa interfaccia di quelle del .NET Framework. Il linguaggio di programmazione è C#. La parte “magica” della soluzione Xamarin è che il compilatore rimappa le chiamate alle classi C# su funzionalità base della piattaforma sottostante e produce un eseguibile ARM imfiocchettato come un bundle iOS o Android.

L’applicazione che viene generata è una classica applicazione nativa in cui la struttura—presentation e business logic—viene sviluppata nello stesso modo di una analoga applicazione nativa scritta usando direttamente gli SDK della piattaforma. PhoneGap è una implementazione di Cordova—la piattaforma open-source attualmente gestita da Apache Software Foundation e originariamente basata sul prodotto PhoneGap acquistato da Adobe nel 2011. Oggi PhoneGap è semplicemente una distribuzione Cordova gestita da Adobe e paragonabile a Icenium di Telerik e PhoneJS di Devxpress. L’applicazione che viene generata è una applicazione nativa a tutti gli effetti. Lo sviluppo, tuttavia, è basato su HTML, CSS e JavaScript.

Un’applicazione PhoneGap è semplicemente una collezione di pagine HTML che, lette dalle risorse dell’applicazione nativa, girano dentro una WebView a tutto schermo. Dal punto di vista della struttura fisica l’applicazione è basata su una sola view (o activity secondo il gergo Android). Tutto ciò che accade viene gestito via JavaScript, codificato via HTML e sottoposto ai vincoli e alle performance del browser del dispositivo. Tanto un’applicazione Xamarin che un’applicazione PhoneGap sono perfettamente in linea con le direttive Apple e sono approvate o respinte unicamente sulla base di quello che fanno o non fanno.

Un’applicazione creata con Xamarin Studio ha il solo difetto di essere un tantino grossa come dimensione visto il peso specifico del runtime Mono che si porta appresso. Per il resto non presenta problematiche particolari e nella stragrande maggioranza dei casi (per non dire sempre) non si riscontrano penalità di alcun tipo. Un’applicazione creata con PhoneGap (o simili) è strutturalmente soggetta al dazio della performance. Già la semplice navigazione da pagina a pagina dà una misura concreta di ciò. Si può navigare seguendo un click e lasciando il browser a caricare la pagina successiva magari dalla cache: niente animazione, ed è il modo più veloce, oppure con animazione JavaScript e il rischio di movimenti a singhiozzo su quasi tutti i device. Per dirla tutta, un’applicazione PhoneGap realistica è lenta e poco fluida se paragonata ad una nativa. Punto. Tuttavia, la minore velocità e fluidità non la rendono necessariamente inutilizzabile o inutile.

Cosa scegliere?

Il punto fondamentale dello sviluppo mobile non è tanto nell’abbattimento dei costi di N-1 piattaforme quanto nel taglio lineare dei costi di sviluppo per piattaforma. Il totale del costo di sviluppo per N piattaforme non sarà mai uguale al costo unitario più un quid: il resto è noia. La sostenibilità dello sviluppo mobile passa per strumenti intelligenti capaci di far scrivere la stessa app in una frazione del tempo per ciascuna piattaforma e nell’individuazione di forme di riuso di codice di business. In questo contesto trovo che il backend sia un canale importante—per molte app mobile la logica che serve può tranquillamente stare sul server e viaggiare solo online. Il grosso del mobile è presentation e presentation e UX devono essere massimizzati perché il risultato sia accattivante. In questo contesto l’applicabilità di PhoneGap si riduce. Io scelgo Xamarin.
«November»
SunMonTueWedThuFriSat
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567