Sviluppare app cross platform per iOS e Android con Appcelerator Titanium: da amore a odio

Alcuni mesi fa sono venuto a conoscenza di una piattaforma di sviluppo che consente di creare applicazioni cross platform (attualmente per iOS e Android) sviluppando in un linguaggio comune che è Javascript: si chiama Appcelerator Titanium. Era stato amore a prima vista: anche se Javascript non mi piace molto come linguaggio e solitamente queste soluzioni mi stanno un po’ antipatiche, Appcelerator Titanium sembrava avere tutte le carte in regola per essere un buon prodotto, tra cui possibilità di sviluppare app native per più sistemi operativi mantenendo un singolo codebase, il supporto di buona parte delle features dei vari sistemi operativi e device e infine la possibilità di sviluppare plugin personalizzati per implementare nuove features in modo nativo ed includerle poi nelle app sviluppate con Appcelerator Titanium.

Alcune settimane fa ho deciso di fare dei test sul campo, portando su Appcelerator un’applicazione che avevo sviluppato nativamente per iOS in un paio di settimane e più avanti vi dirò come mi sono trovato e cosa ne penso di questa piattaforma, prima però facciamo un passo indietro e vediamo quali sono le caratteristiche di Appcelerator Titanium.

Appcelerator mette a disposizione due piattaforme: la prima si chiama Titanium Mobile e consente come già ho accennato di sviluppare app cross platform per iOS e Android. La seconda è Titanium Desktop, che consente di sviluppare applicazioni cross platform per pc (Windows, OS X, Linux) ma è più elementare della prima. Entrambe le piattaforme sono gratuite ed è possibile sviluppare anche dei progetti commerciali. Esiste la possibilità di acquistare dei pacchetti a pagamento che includono più cose, tra cui alcuni tipi di supporto tecnico e altre caratteristiche di cui si può benissimo fare a meno.

Assieme a Titanium Mobile viene fornito un IDE chiamato Titanium Studio, derivato dall’IDE di Aptana (che è stata acquisita da Appcelerator) che a sua volta è costruito sul famoso Eclipse, quindi l’interfaccia di Titanium Studio è molto simile a quella di Eclipse.

Le applicazioni Titanium Mobile vengono sviluppate, come già detto, in Javascript, ma non si tratta di applicazioni web (come quelle sviluppate con Phonegap ad esempio), ma di vere e proprie applicazioni native: la piattaforma contiene infatti un layer per ogni piattaforma che consente di richiamare ed utilizzare tutti i controlli nativi dell’interfaccia grafica offerta da ognuno dei sistemi operativi supportati. Il codice javascript al momento della compilazione viene incluso nell’app che non è altro che un “motore” nativo che legge ed interpreta il codice javascript a runtime, richiamando poi la grafica e le funzioni native del sistema operativo in cui sta girando l’applicazione. Il codice dell’app che si sviluppa in Titanium Mobile non contiene html, ma è una vera e propria applicazione javascript (nulla a che fare con il browser insomma).

Diverso è il funzionamento di Titanium Desktop, che invece si basa sulla tecnologia web (un po’ come phonegap) ed è quindi più elementare e blando. Personalmente non l’ho mai provato.

Appcelerator Titanium Mobile mette a disposizione un marketplace in cui è possibile acquistare (o scaricare gratuitamente) alcuni plugin sviluppati dalla community. Troviamo ad esempio un plugin per usare AdMob all’interno delle app, temi grafici e altro.

Andiamo alla mia esperienza: inizialmente la piattaforma mi sembrava molto interessante e facendo delle piccole prove pensavo avesse un enorme potenziale, alchè avevo deciso che alcune delle prossime app per smartphone e tablet le avrei sviluppate utilizzando questa piattaforma. Alcune settimane fa però ho iniziato il primo test sul campo, cercando di fare il porting di un’app che ho sviluppato per iOS, su Appcelerator Titanium Mobile. Lo sviluppo dell’app in se non è stato problematico, a parte qualche problemino qua e la (lo sviluppo in alcuni casi è un po’ scomodo rispetto a quando si sviluppa nativamente) e in effetti mi ha permesso di risparmiare tempo, sviluppando un app per due sistemi operativi diversi nello stesso tempo che avrei impiegato per svilupparla per un unico sistema. I problemi sono arrivati quando ho iniziato a sviluppare i plugin per poter utilizzare alcuni network pubblicitari nella ver. android dell’app: il problema principale che ho incontrato (e che tutt’ora non sono riuscito a risolvere) riguarda un presunto bug che risulta corretto ma che invece continua ad esserci. Il problema è che all’interno del plugin non vengono richiamati i metodi che mi consentono di sapere quando l’activity corrente va in pausa (onPause), quando viene ripresa (onResume), quando viene distrutta (onDestroy), quando si apre, e così via. Questi metodi sono fondamentali per poter mettere in pausa la richiesta dei banner quando per es. l’app va in background, ma sopratutto per distruggere le istanze delle view che mostrano i banner del network pubblicitario, che altrimenti su Android continuerebbero ad inviare richieste sia quando si aprono altre activity che persino quando si esce dall’applicazione!.

Dopo diverse settimane perse per tentare di risolvere il problema, senza trovare alcuna soluzione nei vari forum, Q&A, ecc… (alcune persone sembrano aver avuto il mio stesso problema, hanno segnalato il bug e nonostante questo sembra essere stato risolto io continuo ad averlo anche scaricato l’ultima ver. disponibile), penso che rinuncerò a sviluppare app con Appcelerator e passerò alla vecchia e buona programmazione nativa, almeno finchè non troverò un sistema migliore per creare app cross platform ed incrementare la produttività.

Il problema principale di Appcelerator è che per alcune cose (sopratutto per lo sviluppo dei plugin) non c’è abbastanza documentazione e sopratutto supporto: pochi utenti della community realizzano plugin e quindi è difficile trovare qualcuno che ti risponde in caso di problemi, oppure trovare persone che hanno avuto il tuo stesso problema. Il supporto tecnico non risponde a richieste di supporto personalizzate a meno che non si è disposti a pagare cifre esorbitanti (a partire da 1000 dollari per gli sviluppatori singoli, ma hanno detto che stanno rivendendo i prezzi). L’altro problema è che ci sono spesso dei piccoli intoppi (bug, o altro) che fanno perdere tempo prezioso e alla fine il tempo che si guadagna nello sviluppare un app cross platform lo si perde per risolvere questi intoppi.

Concludendo, per adesso penso che non utilizzerò più Appcelerator, a meno che non ci saranno sostanziali miglioramenti che mi faranno riacquistare la fiducia verso questo prodotto in futuro.

10 pensieri su “Sviluppare app cross platform per iOS e Android con Appcelerator Titanium: da amore a odio

  1. Raffaele

    Ciao, condivido pienamente il tuo discorso, io stesso sto diventando matto cercando di utilizzare il plugin Opengl di titanium…

    Replica
  2. Ivan

    Recentemente ho partecipato ad un corso di Titanium e ne sono stato favorevolmente impressionato.
    La tua opinione riguardo Titanium e’ rimasta immutata?

    Replica
    1. admin Autore articolo

      Dall’ultima volta non ho più avuto il tempo di riprovarlo, ma mi sono ripromesso di farlo appena avrò un po’ tempo, eventualmente scriverò un articolo appena lo farò.

      Replica
  3. Francesca

    Ciao.
    Mi pare ovvio che Appcelerator debba ancora migliorare prima di essere usato al 100% e senza problemi da uno sviluppatore.
    Sono comunque alla ricerca di un app cross platform (per Android in particolar modo) ottimale.
    Hai qualche idea o nome da farmi?
    Ti ringrazio…

    Replica
    1. admin Autore articolo

      Sono anch’io alla ricerca di un sistema stabile e conveniente per poter sviluppare più velocemente app cross platform. Ne ho visti vari, ma ognuno ha delle pecche, andrebbero comunque provati e attualmente non ho avuto modo di provare gli altri. C’è per es. Marmalade e Corona, che però se non sbaglio sono entrambi a pagamento.

      Mi sono ripromesso di riprovare AppCelerator appena avrò un po’ di tempo, ho visto che hanno sfornato nuove release nel frattempo.

      Replica
  4. Lief

    Unity3d è ottimo per i videogiochi.
    Unica pecca la licenza android base gratis è stata disponibile solo per un breve periodo (io ce l’ho scaricata e sono soddisfatto, ho sviluppato parecchie app grazie a unity usando c# per sviluppare e dopo java per l’integrazione della pubblicità).
    adesso costa parecchio anche se devo dire che i videogiochi sviluppati con questo sistema sono fatti talmente bene e hanno un grafica così bella che mi stanno dando parecchie soddisfazioni e penso che in un futuro prossimo comprerò le licenze pro per aggiungere alcune funzioni.
    Se lo vuoi provare la versione gratuita ti permette di sviluppare per windows 32 e 64 bit, per mac, per web e per flash (nella mia versione)

    Replica
    1. admin Autore articolo

      Si conosco Unity, ho anche acquistato la licenza Unity Pro e Unity iOS Pro, ma non ho ancora trovato il tempo per svilupparci qualcosa.

      Replica
      1. ehehe

        Hai speso oltre $2,000 per Unity Pro e Unity iOS Pro tanto per sport, tanto svilupparci qualcosa appena hai tempo, eheheh che ridere!

        Replica
        1. admin Autore articolo

          Non ci trovo nulla da ridere sinceramente, anzi, lo trovo tutt’ora un investimento utile per quello che ho imparato e per quello che ci farò appena lo riterrò oppurtuno.

          Replica
  5. Matteo

    Salve, scusate la domanda stupida magari, io ho un problema, sto installando Ti per Windows e gli unici 3 SDK che mi permette di installare sono : Android, BlackBerry e Tizen. Per iOS so che non si può programmare se non si possiede un Mac. Per Windows Phone invece c’è una qualche maniera per importare l’SDK in Ti?? Grazie mille 🙂

    Replica

Rispondi