Sviluppare applicazioni per dispositivi Mobile con Visual Studio

Diversi modi per sviluppare applicazioni per dispositivi Mobile con Visual Studio.

Ho letto diversi articoli in giro per la rete per farmi un'idea delle varie possibilità e dei vari ambienti di sviluppo a disposizione per sviluppare applicazioni per i dispositivi mobili (smartphone, tablet).
Ognuna di queste soluzioni ha vantaggi e svantaggi, quindi la scelta dipende dalle proprie conoscenze e dal tipo di applicazione che si vuole sviluppare, oltre che dal target.

Applicazioni Native

Le applicazioni native si possono considerare come le applicazioni "desktop" dei dispositivi mobile. Vengono sviluppate usando gli strumenti (IDE) e gli ambienti di sviluppo (SDK) messi a disposizione da ogni diverso sistema (Apple, Android, Windows). Una volta sviluppate vanno compilate e sono distribuibili tramite gli store.

Questo tipo di applicazione offre le migliori performances ed è qundi adatto allo sviluppo di videogames e applicazioni che fanno uso pesante di grafica.
Hanno inoltre un accesso completo alle API e all'hardwaer del dispositivo.

Un altro vantaggio da non sottovalutare è il fatto di avere un'interfaccia non solo scattante, ma anche omogenea con il menu e le altre app installate nel dispositivo. In questo modo l'utente acquisisce familiarità immediata con l'applicazione.

Di contro è necessario conoscere un linguaggio di programmazione e un SDK per ogni piattaforma.

Ecco i link dove trovare gli SDK di Android e Apple. Per Windows Phone invece si trova tutto dentro Visual Studio.

http://developer.android.com/sdk/index.html
https://developer.apple.com/technologies/ios/

Pro

  • prestazioni elevate
  • accesso a tutte le API del dispositivo
  • l'interfaccia è omogenea alle altre app del dispositivo
  • si possono distribuire tramite lo store

Contro

  • bisogna usare (e saper usare) un SDK e linguaggio per ogni tipo di dispositivo
  • si può usare Visual Studio solo per Windows Phone

Xamarin

Xamarin nasce dal progetto Mono e permette di sviluppare applicazioni native usando C# con Visual Studio (o in alternativa si può usare Xamarin Studio).
Tutto questo però ha un prezzo, che a mio avviso è troppo elevato. Edit: ad aprile 2016 la Microsoft ha rilasciato Xamarin gratuitamente per Visual Studio 2015. Per l'occasione ho scritto un articolo specifico di introduzione a Xamarin.

Sito ufficiale: https://store.xamarin.com/

Pro

  • tutti i vantaggi delle applicazioni native (vedi sopra)
  • si usa un unico IDE e linguaggio (C#) per tutti gli ambienti
  • integrazione con Visual Studio
  • di proprietà Microsoft, quindi ricco di documentazione e supporto tecnico
  • gratis per gli sviuluppatori e piccole aziende (per dettagli sulle licenze fare riferimento al sito Microsoft)

Contro

  • è necessario avere un computer Macintosh per per compilare applicazioni Apple
  • a pagamento per grandi aziende

Applicazioni Web

Sono siti internet o applicazioni utilizzabili via web browser.
Le due soluzioni più comuni sono:

Responsive Web Design

Sono applicazioni web la cui interfaccia è studiata principalmente per dispositivi mobili, ma si adatta automaticamente a tutti gli schermi (pc, tablet, smartphone, TV) grazie all'utilizzo di DIV e CSS3 media queries.

Sito dedicato al Mobile

L'applicazione, in base allo user agent e alla risoluzione capisce quale tipo di dispositivo sta richiedendo la pagina web e di conseguenza viene effettuato un redirect a un sito parallelo dedicato al mobile.
Ad esempio se da un pc si cerca "Repubblica.it" su Google e si clicca sul primo risultato, si va all'indirizzo http://www.repubblica.it/.
Facendo la stessa operazione usando stavolta uno smartphone, si viene proiettati all'indirizzo http://m.repubblica.it.

Per Dev-oClock.com ho scelto di usare una tecnica alternativa specifica per i siti Asp.Net, che consiste nell'impostare dinamicamente la Master Page corretta in base al tipo di dispositivo che si sta utilizzando. In questo modo si possono adattare siti già esistenti senza dover modificare la logica e i dati ma agendo solo sul'interfaccia. Ho descritto in dettaglio il procedimento nell'articolo Creare la versione Mobile di un sito web in Asp.Net.

E' chiaro che con questo tipo di applicazioni si suppone che il dispositivo sia sempre connesso alla rete, che il browser sia aggiornato o almeno compatibile con determinate funzionalità, e si rinuncia alle API del dispositivo. E' anche vero che con l'evoluzione dell'html/javascript e dei browser questi svantaggi si andranno dissolvendo sempre più.

Pro

  • si può usare il linguaggio e l'IDE che si preferiscono (es. Asp.Net o PHP) in quanto l'applicazione viene eseguita sul server
  • si riutilizza la logica dell'applicazione web "per desktop" in quanto cambia solo l'interfaccia
  • la distribuzione è immediata
  • non serve l'autorizzazione dello store per il rilascio

Contro

  • l'accesso alle API del dispositivo è quasi nullo
  • non sono pubblicabili tramite lo store
  • limitati e legati alle funzionalità del browser dell'utente
  • il dispositivo deve essere sempre connesso

Applicazioni Ibride

Si tratta di un mix tra applicazioni native e Web. Sono applicazioni cross platform che si installano sui dispositivi, ma che in realtà girano su un browser e fanno utilizzo di JavaScript.

Esistono diverse alternative, quella che prendo in considerazione è Apache Cordova, una variante di PhoneGap.

Tutto ciò che serve è scaricabile direttamente dal sito Microsoft, o meglio ancora da Visual Studio 2013. Vengono poi scaricati gli SDK delle varie piattaforme. E' bene avere diversi GB liberi sull'hard disk prima di procedere.

http://cordova.apache.org/
http://www.visualstudio.com/en-us/explore/cordova-vs.aspx

Pro

  • accesso alle principali API del dispositivo (acceletrometro, fotocamera, ecc)
  • distribuibili tramite gli store
  • con un solo linguaggio e IDE si sviluppano app per tutti i sistemi
  • le prestazioni sono in continuo miglioramento grazie alla continua evoluzione dell'hardware
  • supportato dalla Microsoft, quindi ricco di documentazione e supporto tecnico

Contro

  • prestazioni limitate
  • non è possibile accedere a tutte le funzionalità del dispositivo
  • l'interfaccia utente (pulsanti, menu a tendina, ecc) spesso non è coerente con l'interfaccia del sistema operativo, con il rischio di confondere l'utente

Autore: Sergio Roberto Boarina