22 Dicembre, 2012 | Di

Applicazioni mobile, native, html o ibride?

Applicazioni mobile, native, html o ibride?

Una delle prime problematiche da affrontare nella progettazione di un'applicazione mobile è la tecnologia da utilizzare. I puristi propenderanno per il codice nativo (Objective-C o Java), super ottimizzato e veloce. Chi è abituato a lavorare sul web preferirà di gran lunga continuare a lavorare con gli strumenti che conosce, HTML, CSS e javascript.

Nel caso di applicazioni per iPhone/iPad, un approccio interessante potrebbe essere quello di prendere il meglio dei due mondi e creare un'applicazione ibrida.

Un'applicazione ibrida implementa tutto o parte del codice per gestire l'interfaccia utente in HTML, CSS e javascript invece che in Objective-C, utilizzando una classe, la UIWebView, che sostanzialmente usa il motore di rendering di Safari mobile.

Esistono poi due metodologie diverse, la prima consiste nel creare una UIWebView che copre tutta l'area del device e caricarci dentro del codice web remoto (sostanzialmente un browser) e usare della logica in Objective-C solo per interfacciarsi con funzionalità come il GPS o la rubrica contatti (come fa Apache Cordova). La seconda strada, forse più interessante, è quella di usare l'HTML solo per realizzare alcune parti dell'applicazione, quelle dove ricostruire il layout in codice nativo sarebbe troppo dispendioso.

Utilizzando il secondo approccio ci si trova però spesso ad avere dei dati in Objective-C che vanno resi in HTML e delle interazioni gestite da HTML (link o javascript) che devono scatenare del codice nativo. I due mondi in sostanza devono poter comunicare.

Creare HTML dinamico è il compito principale di un template engine e per iOS se ne trovano parecchi. Uno dei più utilizzati è Mustache, molto flessibile e implementato in decine di linguaggi diversi. Mustache ci permette di caricare un file HTML (tipicamente presente nell'applicazione e non scaricato dalla Rete) e processarlo sostituendo a dei particolari marker i valori presi da una classe standard scritta in Objective-C. Abbiamo a disposizione strutture condizionali e cicli per generare l'HTML che più ci interessa.

Vorremmo poi, ad esempio, che il click su un link in HTML carichi un nuovo controller oppure aggiunga un evento al calendario di iOS. In questo caso ci viene in aiuto la classe UIWebView stessa, con la sua capacità di intercettare i click e associarli a del codice Objective-C da eseguire.

Ovviamente non è tutto oro quello che luccica, per qualche strana ragione (quasi sicuramente tecnica) il codice javascript all'interno di una UIWebView in un'applicazione ibrida gira più lentamente che lo stesso codice eseguito dal motore di Safari mobile.

Nella nostra esperienza usare queste tecniche per porzioni di applicazione e sostituire, dove possibile, il CSS3 al javascript porta a risultati di notevole complessità in tempi più brevi rispetto alla realizzazione di applicazioni native al 100%.