Cross-platform Development

Cross-platform Development
29 marzo 2016 Matteo Giurdanella

Smart: intelligente, elegante, furbo, semplice, carino e alla moda. E’ questo l’aggettivo che oggi attribuiamo ai nostri telefoni, in grado di accedere al nostro mondo virtuale tramite svariati servizi e social. Poco meno di 10 anni fa, nasceva il concetto di “SmartPhone”, un telefono dalle alte prestazioni, dotato di un vero e proprio sistema operativo, in grado di offrire servizi che le generazioni di telefoni precedenti non pensavano minimamente di proporre. Inizialmente buona parte dei grandi produttori di telefonia avevano un S.O proprietario; vi fu una vera e propria lotta per la sopravvivenza, che vide prevalere iOS di Apple, Android di Google (nelle sue più svariate forme) e WindowsPhone (Windows 10) di Microsoft.

Con i S.O mobile nascono anche le “App”, applicativi che offrono dei veri e propri servizi all’utente, un po’ come i programmi per PC. A distanza di qualche anno, il mercato delle App mobile è diventato enorme e quasi indispensabile; tutti noi scarichiamo ogni giorno App dai vari store, anche a pagamento. Sviluppare un’App non è però così semplice come si possa pensare. Innanzitutto è necessario avere un’idea, in grado di offrire un servizio necessario e nel modo più semplice possibile; l’idea alla base deve essere accattivante e coinvolgente, cosicché l’utente sia spronato a riutilizzarla. Infine, è fondamentale, se si vuole coprire l’intera fetta di mercato, rendere l’applicazione cross-platform.

All’inizio era necessario munirsi di diversi programmatori per le varie piattaforme: uno esperto nella programmazione per App iOS, un’altro per App Android ed un altro per Windows, o di un programmatore che fosse in grado di fare tutto. Lo sviluppo di App per diverse piattaforme comporta la conoscenza di diversi linguaggi e logiche di programmazione e svariati IDE (quest’ultimi spesso adattano GUI e funzionalità differenti tra di loro). Le esigenze di un’utenza sempre crescente ed il mercato delle App in continua evoluzione hanno reso necessario velocizzare lo sviluppo Cross-platform.

A tal proposito, negli anni sono stati creati parecchi framework che permetto di sviluppare App native conoscendo un unico linguaggio di programmazione. Qualche anno fa la Microsoft ha lanciato “Xamarin”, IDE completo per lo sviluppo di cross-platform che permette di sviluppare applicazioni in C# per iOS, Android e Windows mobile. Gli sviluppatori del progetto pensano che le due piattaforme (iOS, Android) potrebbero condividere almeno il 90% delle righe di codice di un App, così da rendere molto più semplice e soprattutto veloce lo sviluppo Cross-platform.

Lo scopo principale è dunque scrivere il core dell’App grazie a questo framework in C#. Ciò è possibile poiché gli sviluppatori di Xamarin sono riusciti ad eseguire un binding C# di tutte le API di iOS ed Android che dunque possono essere utilizzate come normali classi di .NET imitando così l’aspetto nativo e la velocità delle App scritte con i linguaggi di programmazione proprietari Objective-C e Java.

Attraverso due processi distinti vengono generati i file per l’Apple Store e il Google Play Store. In particolare, per quanto riguarda iOS, Xamarin utilizza la compilazione Ahead-of-Time, mentre nel caso di Android utilizza la compilazione Just-In-Time.  Inoltre, durante la creazioni di grossi progetti si dovrebbe risparmiare in linee di codice, soprattutto se consideriamo il paragone tra Objective-C e C#. Di certo tutto ciò che è stato appena elencato sollecita molto gli sviluppatori a utilizzare tale framework, anche perché i programmatori C# sono davvero tanti e di certo è un linguaggio più diffuso di Objective-C, anche se coloro che da anni lavorano con i linguaggi nativi sono un po’ restii a questo passaggio, dal momento che avrebbero a che fare sia con un nuovo linguaggio sia con un nuovo IDE.

Se lo si vuole usare però bisogna anche scendere a piccoli compromessi. Innanzitutto, la differenza di righe di codice non è poi così evidente, i file di installazione delle App pesano qualche mega in più (proprio a causa del binding) e infine esistono delle limitazioni, soprattutto per iOS, nella generazione di sottoclassi di NSObject e nell’utilizzo di metodi generici. Detto ciò comunque rimane uno strumento molto potente, in quanto le limitazioni ormai stanno sempre diventando di meno e a poco a poco la soglia che divide il linguaggio nativo da questo framework diventa sempre più sottile.

Per maggiori informazioni su tali limitazioni e in generale per un approfondimento del framework rimando al seguente link:

http://developer.xamarin.com/guides/ios/advanced_topics/limitations/.