Blog

Sviluppo cross platform di app


Ogni piattaforma mobile ha i suoi strumenti e linguaggi. Vari framework permettono lo sviluppo cross platform. Vediamo con quali vantaggi e svantaggi.
Tra le attività che mi vedono impegnato, lavorativamente e per passione, c'è lo sviluppo su dispositivi mobile.

Ogni tanto cerco strumenti di sviluppo interessanti, framework alternativi, linguaggi di sviluppo migliori, magari maggiormente produttivi.

La cosa che si cerca in framework alternativi è la possibilità di scrivere una volta e far girare al meglio possibile su più piattaforme.
Già. Ma quali?

Multi platform
Le principali piattaforme mobili

Bhe analizzando le quote di mercato, oggi è facile dire che il 90% del mercato è di fatto occupato da 2 piattaforme: iOS (iPhone e iPad) e Android (Smartphone e Tablet).

Oggi, cercando tra i framework cross platform sullo sviluppo mobile ci si trova davanti ad un sacco di alternative.
Mi piace pensare che alcune alternative sono semplici "copie" di altre.
Le alternative possibili quindi si possono raggruppare in categorie.

Vediamo cosa intendo nel dettaglio:

  • Framework basati su linguaggi web oriented - Ruby, HTML5, Javascript
  • Framework basati su linguaggi di scripting non specificatamente web - LUA, Flex
  • Framework basati su linguaggi di alto livello - .NET

Tutti danno come risultato finale il classico slogan: "Scrivi una volta, esegui dappertutto".

Qualche differenza però deve esserci, la discriminante non sarà solo la conoscenza pregressa di questo o quel linguaggio.

E' probabile che ci siano dei compromessi?

A leggere i loro siti web, il marketing la fa da padrone, quindi l'informazione evidentemente non è proprio a costo zero.

Leggere alcuni articoli propongono tutti i classici PhoneGap, Appcelerator, RhoMobile.

Ci sono anche altre differenze?
Forse si.

La differenza principale è legata alle possibilità che questi framework hanno di disporre delle capacità specifiche di ogni piattaforma.

E' qui la chiave di volta.

Allora le cose si possono classificare meglio, cercando di categorizzare non per linguaggio, ma per tipologia di funzionalità che il framework mette a disposizione.

Allora qui le cose si fanno più semplici:

  • Framework che raggruppano funzioni comuni a tutte le piattaforme
  • Framework che permettono tutte le funzionalità specifiche ad ogni piattaforma.

Oltre ovviamente alla tipologia di applicazioni che questi framework dovrebbero aiutare a sviluppare:

  • Applicazioni web oriented
  • Giochi
  • Applicazioni standalone o comunque con poca attinenza al web

A questo punto si può forse dire che l'unione delle ultime due classificazioni è forse il modo migliore per scegliere il framework più adatto e per ultimo si può filtrare la risposta con la conoscenza pregressa di uno specifico linguaggio piuttosto che altro.

L'obiettivo per un team di sviluppo è sempre lo stesso: scrivere il meno codice possibile, che sia il più centralizzato possibile, archittetturato al meglio e di conseguenza ciò che si ottiene è del codice più snello, più manutenibile e possibilmente con il minor numero di bug presenti.

Quindi se devo sviluppare un videogioco, utilizzare un framework tipo Corona SDK di Ansca mobile è forse la soluzione più indicata. E' un framework in LUA che permette di gestire in pochissime righe di codice un'applicazione che gira su Android e iOS, implementando tutto ciò che per un gioco è fondamentale: motore grafico, di fisica, networking, multimedia ed accelerometri.
Fantastico.

Se devo sviluppare un qualcosa che si orienta principalmente al web, perchè non usare qualcosa che sia già web? Quindi o sviluppo un sito mobile, oppure utilizzo un framework che di fatto incapsula tutto in una pagina web e crea comunque un'applicazione. Vantaggi? Bhe ho la stessa User Experience su tutti i device, perchè ho la stessa Interfaccia grafica. E' un reale vantaggio? Personalmente credo di no. Ogni device ha un bacino di utenza che ha il proprio modo di esprimersi e contraddistinguersi. Quindi uniformarli porta forse più problemi che vantaggi.
Comunque ci sono framework interessanti che fanno questo e PhoneGap è forse uno dei migliori. HTML5, CSS3, JavaScript. Si fa tutto con i più moderni linguaggi web oriented.

Arriviamo all'ultimo componente.
Personalmente quello che preferisco.
Se voglio un'app non prettamente web (ma nessuno mi impedisce di interagire con il web, anzi), o comunque voglio mantenere tutte le funzioni specifiche di ogni piattaforma, minimizzando il codice e magari scrivendo con un linguaggio solo, anche qui ho almeno 2 o 3 alternative papabili.

Esistono Framework che mi piace definire wrapper degli SDK nativi.
Wrapper con linguaggi diversi, quindi qui possiamo dire che la componente linguaggio può fare la differenza, perchè per tutto il resto non ci sono differenze, nè compromessi particolari.
C'è Mono Touch e Mono for Android, c'è Flex e c'è anche Appcelerator.
Qui ne abbiamo per tutti i gusti: .Net, Ruby, HTML5, JavaScript, Flex on AIR per l'appunto.

La bellezza di tutto questo sta nell'ingegnerizzazione del software.
Per raggiungengere gli obiettivi prefissati (meno codice possibile e manutenibilità in primis) la fa da padrone come strutturo la mia applicazione.

Scegliendo un framework, piuttosto che un'altro posso definire le funzionalità principali in un'unico componente, comune ad entrambe le piattaforme.
Per la UI invece sarò portato a fare due componenti specifici per piattaforma, garantendo tra le altre cose una User Experience specifica per piattaforma, usando i best pratices classici che la piattaforma vanta.
Per tutte le funzionalità specifiche della piattaforma, che non posso accomunare, potrò creare moduli specifici nell'applicazione specifica.

Il vero contro, rispetto a tutto il resto è di fatto, la quantità di codice che scrivo. Sicuramente superiore.
Però questo garantisce sempre il massimo della esperienza d'uso e sopratutto il massimo in termini di differenziazione di funzionalità classiche di ogni piattaforma.

Conclusione?

Non esiste il framework perfetto, ma esiste il migliore associato ad un obiettivo.



Dario Lipari
Consulente Informatico, Sviluppatore applicazioni standalone e web in .NET e Java, Sviluppatore mobile per Android e iOS.
HomeBrewer e Degustatore professionista ADB.


Mi interesso di tecnologia per lo sviluppo di applicazioni, di opensource, di mobile, di birra artigianale e di qualità.
Manteiner di Hobbybrew: http://hobbybrew.kenai.com
Sviluppatore di "Swapper for root user" e "Modus Operandi": https://play.google.com/store/apps/developer?id=Dario+'Azatoth'+Lipari

email: dario.lipari@gmail.com
G+: https://plus.google.com/u/0/106029934718170208938/posts


Post correlati:

Copyrights © 2011-2019 Tutti i diritti riservati - by Ideativi Srl