Framework mobile cross platform: consigli e best practice

Tecnologia

17 Maggio 2019

Condividi su:
Versione breve 45

Il mondo del software mobile ha subito un’importante evoluzione negli ultimi dieci anni. Le trasformazioni del mercato, che lo rendono sempre più articolato, interconnesso e ricco di fattori complessi hanno fatto sì che gli sviluppatori approfondissero al massimo le potenzialità offerte dalle attuali tecnologie, dei meccanismi e delle linee guida specifici (nativi) dei due più diffusi sistemi operativi mobile: iOS & Android.

Versione completa 1
Condividi su:

Come cambia lo sviluppo delle applicazioni mobile

La sempre maggiore complessità delle varie piattaforme, e la loro incompatibilità, ha reso tuttavia sempre più complicato per un singolo programmatore (o team di sviluppo) rimanere aggiornato su tutte le innovazioni e sulle novità a livello di implementazione. Da tempo esistono tentativi di standardizzare sotto un denominatore comune gli sviluppi per le varie piattaforme mobile, con Framework che però si allontanano dallo strato “nativo” dei singoli sistemi e, introducendo astrazioni che limitano la libertà degli sviluppatori, non permettono di sfruttare a fondo le potenzialità dei dispositivi e forniscono in ultima analisi una esperienza utente nettamente inferiore. O almeno così era fino a poco tempo fa.

Soluzioni per lo sviluppo

Per padroneggiare al meglio la complessità di produzione codice, sono nati diversi metodi di gestione dello sviluppo di app multi-piattaforma attraverso l’utilizzo di Framework. Le tecnologie per la creazione di applicazioni mobile multipiattaforma sono divise in due grandi categorie: le applicazioni web-based e le applicazioni multi-piattaforma scritte in un linguaggio comune, appoggiandosi a un framework specifico.

1. Soluzioni Web-Based

Le tecnologie web-based (ovvero “basate sul web”) spesso usano un software “contenitore” nativo simile a un normale web-browser, che fa da ponte tra l’applicazione ibrida scritta in HTML/Javascript (le stesse tecnologie su cui si basa il web) e il sistema operativo. Questo è il caso per esempio di Cordova/Phonegap, che permette alle app ibride di accedere alle specifiche del singolo dispositivo mobile (es. la dimensioni dello schermo) e rendendo disponibili alcune caratteristiche altrimenti non accessibili normalmente da web (funzioni specifiche del sistema operativo o dell’hardware). Più recentemente hanno iniziato a diffondersi anche le Progressive Web Apps (o PWA), principalmente spinte da Google, ma che funzionano anche su Apple con alcuni limiti. Le PWA superano la necessità di un “contenitore” e vengono sviluppate interamente in tecnologia web, grazie alle nuove specifiche di HTML5, proprio come un sito web. Le PWA, inoltre, a differenza delle altre tecnologie nominate, non hanno componenti native e non vengono quindi distribuite sugli app store tradizionali, ma direttamente con un link come un normale sito web. Si tratta di una tecnologia interessante ma ancora non completamente matura, che con ogni probabilità tratteremo in futuro.

2. Framework multi-piattaforma

Attraverso un framework di sviluppo multi-piattaforma è possibile scrivere codice che verrà compilato per essere eseguito direttamente sulle varie piattaforme, in modo simile ad una app nativa. Esistono vari framework per lo sviluppo multi-piattaforma, con caratteristiche diverse in termini di qualità del risultato e ambito di applicazione, per questo è necessario scegliere i giusti strumenti a seconda degli obiettivi desiderati.

Per lo sviluppo per esempio di app mobile cross-platform, i framework più utilizzati oggi sono:

a) React Native b) Flutter (di recente reso disponibile per la prima volta da Google)
c) Xamarin.

Per lo sviluppo di applicazioni ludiche e multimediali (videogames, AR/VR), esistono poi framework specifici come Unity e Unreal Engine (che spesso usiamo in Synesthesia, ma che tratteremo in un futuro articolo).

Sia le tecnologie web-based che i framework multi-piattaforma presentano il vantaggio di dover utilizzare un solo linguaggio per lo sviluppo dell’applicazione, tuttavia entrambe presentano limiti nella possibilità di integrazione con le singole specificità dei sistemi operativi dei device, nella manutenzione del codice e nei risultati in termini di esperienza utente. In questo articolo abbiamo deciso di concentrarci sui Framework multipiattaforma, che secondo la nostra esperienza garantiscono una maggiore qualità del risultato finale, risparmiando sui tempi e costi di sviluppo senza scendere troppo a compromessi con lo sfruttamento delle potenzialità dei dispositivi mobili.

Nei prossimi paragrafi andremo dunque ad approfondire quali sono i principali framework utilizzati nell’ambito dello sviluppo di mobile app.

a) React Native: i vantaggi e gli svantaggi del Framework di Facebook

Una delle novità su cui già da tempo la factory di Synesthesia sta lavorando con ottimi risultati di performance e di soddisfazione del cliente è lo sviluppo in React Native. React-Native è un framework che permette di creare app mobile multi-piattaforma rilasciato e promosso da Facebook Inc. Le applicazioni vengono sviluppate utilizzando il linguaggio JavaScript in combinazione con la libreria nativa React. Questo permette la creazione di applicazioni che utilizzano componenti di interfaccia grafica simili a quelli utilizzati dai processi di sviluppo nativi. Il punto di forza di React Native è la possibilità di scrivere il codice in JavaScript e di compilarlo in un progetto nativo, raggiungendo performance molto vicine a quelle raggiunte dalle applicazioni scritte direttamente in linguaggio nativo. Oltre ai componenti JavaScript che il framework offre, è possibile creare nuovi componenti e funzionalità utilizzando il codice nativo della piattaforma sulla quale si sta sviluppando e integrare quest’ultimo nella parte JavaScript del Framework. Questo approccio apre molte possibilità agli sviluppatori, anche se in alcuni casi presenta criticità date dalla natura mono-thread di JavaScript. Se in applicazioni tradizionali questa limitazione può risultare trascurabile, in contesti in cui è indispensabile avere alte prestazioni in tempo reale, React Native rischia di non essere la scelta migliore. Oltre alle buone performance (soprattutto per applicazioni che non richiedono funzionalità real time, come i giochi), i vantaggi dello sviluppo in React Native sono dati proprio dall’uso di Javascript come unico linguaggio alla base dello sviluppo sia su Android che iOS, che permette una ampia condivisione del codice. La rapidissima diffusione di React Native ha permesso inoltre il proliferare di letteratura e documentazione che semplifica e arricchisce il lavoro degli sviluppatori. Il Framework è stato creato da Facebook inc che ne gestisce processi di sviluppo e di implementazione secondo le sue policy, ma è rilasciato gratuitamente come open source. In Italia la popolarità di React Native è ancora limitata e non si trovano ancora molti sviluppatori, ma è sicuramente in crescita e destinata ad aumentare.

b) Flutter, il framework di Google: vantaggi e benefici

Flutter è un ambiente di sviluppo basato su Dart, un nuovo linguaggio di programmazione sviluppato da Google. Il linguaggio sfruttato da Flutter, Dart, può essere compilato in maniera nativa sulle piattaforme Android e iOS. Questa caratteristica permette agli sviluppatori che scelgono Flutter di creare applicazioni dalle performance molto simili a quelle scritte direttamente in nativo. Flutter mette a disposizione una serie di widget predefiniti che possono essere utilizzati per creare interfacce che mantengono il look nativo. Il fatto che Flutter sia promosso da Google consiste in un vantaggio grazie all’enorme supporto che Google dà agli sviluppatori che scelgono Flutter (anche per evidenti ragioni di marketing); inoltre la community di developer orbitante attorno a Flutter risulta essere già ricca e colma di letteratura di supporto. Una criticità è data proprio dal linguaggio di programmazione di riferimento, Dart, oggi ancora poco diffuso e poco conosciuto dagli sviluppatori. Flutter è, inoltre, un progetto ancora relativamente recente nel panorama dello sviluppo cross platform, questo lo rende non sempre adatto come scelta per applicazioni che richiedano molte integrazioni con sistemi di terze parti, componenti native o funzionalità complesse. In Synesthesia abbiamo iniziato a usare Flutter per alcuni progetti con una buona soddisfazione, specialmente per applicazioni non troppo complesse e per la creazione rapida di prototipi.

c) Xamarin, il framework di Microsoft

Si tratta di un IDE (Integrated Development Environment) e un framework promosso (e di proprietà) di Microsoft. Xamarin è utilizzato per lo sviluppo di applicazioni multi-piattaforma, utilizzando il linguaggio c# e poi compilate in codice nativo. Il processo di compilazione e traduzione fa si che il prodotto finale risulti a tutti gli effetti una applicazione nativa.

Nel tipico progetto Xamarin vi sono 3 principali parti dell’applicazione che vengono sviluppate:

  1. la business logic, sviluppata in stile .NET e riutilizzata al 100%
  2. l’interfaccia iOS, sviluppata con l’SDK specifico per Apple
  3. l’interfaccia Android, sviluppata con l’SDK specifico per Google.

La necessità di sviluppare separatamente le interfacce grafiche nasce dall’approccio indicato dallo stesso Xamarin per affrontare la programmazione multipiattaforma: le librerie grafiche sono montate direttamente al di sopra delle loro controparti native, funzionando a tutti gli effetti come semplici connettori. Questa decisione progettuale costringe gli sviluppatori a scrivere parti di codice ad-hoc per le singole piattaforme. Al fine di ovviare a questo limite, da qualche anno Xamarin ha messo a disposizione degli sviluppatori una libreria per la creazione di interfacce multi-piattaforma, Xamarin.Forms. La maggiore rapidità di sviluppo permessa da questo approccio si paga però con un contrappasso: una minore flessibilità dei componenti, aggravata dalla scarsità della documentazione di supporto.

3. La scelta della tecnologia e del team di sviluppo

In conclusione, la scelta della tecnologia spesso dipende da fattori molto specifici del prodotto che si intende realizzare. In Synesthesia abbiamo maturato una lunga esperienza in questi anni, e sappiamo guidare il cliente verso la scelta migliore, motivandola e condividendone i vantaggi che ne derivano.

Indipendentemente da quale sarà la scelta tecnologica, è altrettanto importante la composizione del team per lo sviluppo delle app mobile. Alcune organizzazioni optano per la costruzione di team a loro volta “multipiattaforma”, cioè task force di sviluppo che includano developer esperti di Framework che lavorano in sinergia con esperti dei singoli sistemi operativi.

La digital factory di Synesthesia, per esempio, gestisce sia progetti nativi sia di app multi-piattaforma, in quest’ultimo caso con un team che lavora in stretta sinergia con l’area nativa (iOS e Android), creando una squadra di esperti dedicata a rendere il prodotto digitale performante su ogni dispositivo e/o sistema operativo.

Sapete già come sviluppare il vostro prossimo progetto mobile? Parliamone assieme.

Se hai domande o feedback, scrivici. Saremo contenti di leggere le tue richieste o le tue opinioni.

Creiamo insieme
il tuo progetto

Lo realizzeremo con amore e passione. Il nostro team è a tua disposizione.

Iscriviti alla nostra
newsletter

Il modo migliore per rimanere in contatto con noi

Privacy Policy