A SMAU Milano 2016 ho partecipato come relatore per IWA Italy tenendo un seminario dal titolo Applicazioni Mobili: strumenti, costi, soluzioni e performance nel quale ho raccontato (in appena 50 minuti) gli elementi fondamentali per poter mettere a punto una buona analisi volta alla concretizzazione dell’idea, quindi la progettazione ed infine lo sviluppo della soluzione per dispositivi mobili.
Nelle slide pubblicate su slideshare.net e disponibili in fondo a questo articolo, sono evidenziate alcune operazioni preliminari all’attività di sviluppo, tra le quali rientrano lo studio delle abitudini degli utenti e l’analisi delle statistiche di diffusione dei dispositivi.
Preparazione dell’idea
Le stesse statistiche di diffusione vanno quindi rapportate alla popolazione locale (o mondiale) in dipendenza del mercato sul quale presentarsi e che determineranno quale dovrà essere l’obiettivo da raggiungere in termini di numero di installazioni attive e dal quale sarà possibile ricavare una successiva quantificazione del costo per utente sostenuto per lo sviluppo dell’app. Tale considerazione è da tener presente solo in caso di applicazione pubblicata sugli store. Non vale infatti nel caso di applicazione sviluppata ad-hoc per la propria azienda con lo scopo di ottimizzare un proprio processo o per migliorare le modalità di interazione con i propri clienti.
Sviluppo
A seguito dell’analisi si procede allo sviluppo della soluzione che può concretizzarsi nell’implementazione della Web App, se tra i requisiti non è previsto l’accesso a funzioni native del dispositivo (quali per esempio l’accesso alla rubrica contatti) oppure ci si orienta verso lo sviluppo dell’App Nativa. La Web App è scritta con i tipici Linguaggi del Web: HTML, CSS e JavaScript e viene eseguita nel contesto del Browser, pertanto può essere fruita sia attraverso lo smartphone sia tramite un computer.
Anche orientarsi verso un App Nativa porta con se una serie di elementi da valutare per decidere quale strada seguire. Infatti, se volessimo sviluppare la soluzione per le tre maggiori piattaforme (nell’ordine di diffusione Android, iOS e WindowsPhone), è richiesta l’implementazione di tre programmi completamente distinti poiché l’app per Android è sviluppata in Java con l’utilizzo di ADK (Android Development Kit) oppure in C++ con NDK (Native Development Kit), per lo sviluppo di un’app per iOS è necessario invece adottare ObjectiveC oppure Swift, simile al primo ma un po’ meno formale e dotarsi di un Mac, non necessariamente per la compilazione dell’app quanto per la pubblicazione sullo store iTunes. Infine se si volesse sviluppare l’app per Windows Phone, sarà necessario utilizzare uno dei linguaggi del .NET Framework (tra i più utilizzati ci sono Visual Basic.NET e C#).
Pertanto lo sviluppo di un’App Nativa disponibile sugli store dei maggiori Vendor significa richiedere tre differenti app, una per ciascun sistema operativo e sarà importante valutare anche le caratteristiche hardware minime del dispositivo che supporta una precisa versione del Sistema Operativo.
Oltre al costo iniziale, l’App Nativa ha dei costi di manutenzione particolarmente elevati, infatti una nuova funzionalità richiederà lo sviluppo della stessa tre volte, una per ciacun tipo di dispositivo.
Sarà necessario verificare se un bug è causato da un errore progettuale, ed in tal caso il bug sarà certamente presente in tutte le piattaforme triplicando il costo di manutenzione, o da un errore di implementazione da parte dello sviluppatore, riducendo il costo di sviluppo ad un’unica piattaforma ma aumentando i costi legati all’identificazione dell’origine del problema.
Alternative
È possibile orientarsi comunque allo sviluppo di un’app denominata App Ibrida che semplifica e razionalizza lo sviluppo la manutenzione della propria soluzione mescolando insieme le caratteristiche tipiche dell’App Nativa (installazione sul dispositivo, pubblicabile sugli store accesso alle funzionalità native del device) con quelle previste da una Web App (sviluppata in HTML, CSS e JavaScript). Tale soluzione è basata su Apache Cordova. Molti utilizzano sistemi come Telerik, Cordova CLI, Intel XDK, Ionic, PhoneGap Build ma, a prescindere dal sistema adottato, esso è basato su Apache Cordova, ciascuna soluzione con i suoi pro e contro.
Esiste poi un’altra soluzione: Xamarin che, utilizzando C# come linguaggio di programmazione, promette la generazione di applicazioni native per Android, iOS e Windows Phone. Tuttavia questa soluzione richiede la conoscenza del .NET Framework e lo studio delle API di Xamarin. Inoltre ritengo che anche questa soluzione sia assimilabile ad un’app ibrida in quanto l’architettura prevede che il codice bytecode (pseudo compilato) venga eseguito al di sopra di uno strato software (la libreria Xamarin per l’appunto) che dovrà interpretarlo e tradurlo in operazioni comprensibili al sistema operativo del dispositivo.
Performance
Il motivo per cui spesso viene preferita un’app nativa all’app ibrida è spesso legato alle performance che quest’ultima non riesce a garantire. Ritengo che questo ostacolo esista solo ed esclusivamente quando è necessario creare un’app “salva vita” o di gestione di informazioni in tempo reale, dove l’analisi ritardata di un solo millesimo di secondo rispetto all’effettiva acquisizione potrebbe causare danni alla persona o al patrimonio aziendale. Inoltre, seguendo una serie di ottimizzazioni che ho identificato come fondamentali, anche un’app nativa può tranquillamente operare su migliaia o milioni di informazioni senza presentare rallentamenti evidenti.