Lo sviluppo di applicazioni mobile sta diventando sempre più
importante nel panorama software consumer e soprattutto
enterprise. In un mercato in crisi e difficile come quello
odierno, le imprese hanno sempre più la necessità di produrre
soluzioni fruibili da tablet o smartphone.
Sviluppare app native o ibride?
Lo sviluppo di una applicazione mobile pone sempre alcuni
interrogativi legati alla piattaforma da adottare. Meglio
iOS o Android? Meglio una soluzione nativa oppure
ibrida o totalmente Web? Meglio sviluppare in outsourcing oppure
sfruttare competenze già acquisite in azienda dal personale IT?
Le principali piattaforme mobile sul mercato si appoggiano a
tecnologie non compatibili tra loro, per cui lo sviluppo nativo
cross platform implica il dover produrre ciascuna app per iOS e
Android utilizzando due progetti distinti: uno per
piattaforma. Ciò implica la necessità di preparare
asset grafici che rispettino le linee guida dei produttori, avere a disposizione team
di sviluppo che sappiano programmare in Objective-C e Java, e
quindi dover gestire due basi di codice separate, che vanno altresì documentate
e sottoposte a debug e testing.
Spesso non si hanno a disposizione sviluppatori con le competenze
necessarie e non è nemmeno semplice riconvertire un team a
sviluppare per mobile. Lo sviluppo di un'app cross-platform potrebbe tradursi in un aumento dei costi e dei tempi di
consegna difficilmente sostenibile.
App HTML5?
Per risolvere questa situazione potenzialmente complessa alcuni
adottano lo sviluppo di applicazioni web o ibride da far girare
sui loro dispositivi. Questo tipo di soluzioni hanno il vantaggio di
essere scritte utilizzando HTML5, CSS e JavaScript e che possono
girare teoricamente su qualsiasi device. Purtroppo, anche in
questo caso, non sempre è possibile adottare questa strategia; le
ragioni sono molteplici:
- Minimo comune denominatore
Le WebApp, pur avendo la capacità di interagire con l'hardware
di un dispositivo mobile, rischiano di rappresentare il minimo
comune denominatore tra le caratteristiche di ciascuna
piattaforma. Ciò implica che difficilmente potranno usufruire
delle funzionalità avanzate di ogni singolo dispositivo, nè dei
servizi di alto livello offerti dall'ultima release di un
sistema operativo mobile. - Performance
Esiste un problema legato alle prestazioni: trattandosi di
applicazioni che girano in una WebView, non si possono ottenere
performance pari a quelle di una equivalente applicazione
nativa. - Conformità alle linee guida
Una WebApp non sfrutta le linee guida della user experience del dispositivo.
Questo è spesso un requisito importante, di cui occorre tenere
conto nello sviluppo dell'applicazione, e che richiederebbe
l'adozione di uno stile e di una UX costruita ad hoc per essere
simile a quella nativa di ciascuna piattaforma.
App cross-platform in JavaScript (ma non HTML5)
Titanium è un sistema di sviluppo che permette
di scrivere applicazioni cross-platform utilizzando un solo
linguaggio di programmazione: JavaScript. Questo consente ai
programmatori provenienti dallo sviluppo su web di riutilizzare le
proprie competenze anche in ambito mobile, producendo applicazioni
native (cioè che non girano dentro una WebView)
e multipiattaforma.
Ad oggi, Titanium (l'ultima versione è la 3.2.3 GA) supporta lo
sviluppo su iOS, Android, MobileWeb
(HTML5), Blackberry e Tizen.
Architettura
Titanium è un framework di tipo write once adapt everywhere,
cioè un framework in cui gran parte della logica di business,
delle funzioni di base, della gestione degli eventi può essere
considerata al 100% cross platform, ma dove è possibile
specializzare il codice per sfruttare alcune caratteristiche
tipiche di una piattaforma e non disponibili sulle altre. Un caso
tipico è l'interfaccia utente.
Per fare un esempio, le UI di Android e iOS hanno entrambe a
disposizione widget come le etichette (Label) e i
pulsanti (Button) ma iOS ha widget che non sono presenti
in Android (le Coverflow per citarne una) e viceversa
(le ActionBar per esempio).
Titanium permette di scrivere app in grado di sfruttare
le peculiarità di ciascuna piattaforma su cui è
previsto il rilascio: sarà possibile, ad esempio, utilizzare l'ActionBar
se l'app gira su Android oppure farne a meno nel caso di altri
sistemi operativi.
Come funziona Titanium?
Titanium fa da ponte tra il codice sorgente dell'applicazione e
il sistema operativo nativo. Le applicazioni, scritte in
JavaScript non usano il DOM ma effettuano chiamate all'API
esposta dall'SDK di Titanium.
Quando si scrive un'applicazione che, per esempio, fa chiamate al
sistema operativo per disegnare un pulsante o per interrogare il
GPS, si deve chiamare in realtà una funzione dell'SDK che,
attraverso l'uso di oggetti Proxy, permette di
mappare le richieste fatte attraverso JavaScript nelle equivalenti
chiamate in codice nativo.
Lo stesso meccanismo funziona nella direzione opposta: quando il
sistema operativo deve notificare un evento all'applicazione (per
esempio un pulsante premuto o un altro evento dell'interfaccia
utente), l'evento viene trasportato in alto (bubbling)
fino a poter essere gestito dentro il codice JavaScript.
Il sistema dei proxy permette alle applicazioni
Titanium di avere il look and feel delle applicazioni native
(perchè la UI è disegnata attraverso chiamate ai metodi nativi del
sistema operativo) con il vantaggio per lo sviluppatore di dover
gestire un solo progetto e una sola base di codice per più
piattaforme, per di più utilizzando un linguaggio semplice e
potente come JavaScript.
Le applicazioni risultanti saranno leggermente più lente
delle equivalenti native, ma il tempo di sviluppo, soprattutto se
multipiattaforma, è ridotto al minimo.
Titanium è gratuito (esiste una versione
enterprise a pagamento), è disponibile per OSX, Windows e Linux.
Può essere usato sia con la IDE proprietaria (Titanium
Studio) che con una CLI (Command Line Interface) basata
su Node.js e personalizzabile. Per chi usa editor come Sublime
Text, sono presenti molti plugin (uno su tutti: sublime-ti-build)
per scrivere e compilare senza utilizzare l'IDE.
Titanium Studio è dotato comunque di un debugger
integrato che permette il debug dell'applicazione sia sul
simulatore che sul dispositivo fisico, quest'ultimo indispensabile
nel caso di sviluppo su Android (dato che l'emulatore di Google
non è molto performante).
Per chi vuole iniziare a sviluppare app con Titanium è
sicuramente necessario conoscere JavaScript. Chi ha nozioni di HTML,
XML e CSS troverà facile e intuitivo lavorare con i
progetti Alloy, il framework MVC di Titanium. Non
sono necessarie le competenze per lo sviluppo in codice nativo (Java e/o
Objective-C), a meno che non si vogliano creare moduli esterni. Chi
ha già programmato in ambiente Node.js potrà utilizzare la
versione Titanium, Node.ACS, che permette di associare a ciascuna
app un backend Node.js online che gira sul cloud di Appcelerator.
Nella prossima lezione vedremo come installare Titanium e quali
strumenti ci mette a disposizione per lo sviluppo delle nostre
applicazioni native.