Nel processo di progettazione di un'app arriva il momento in cui è necessario prendere una decisione cruciale: optiamo per uno sviluppo di un'applicazione nativa o per un'applicazione cross-platform? Per fare una scelta consapevole valutiamo se le funzionalità dell'applicazione hanno delle criticità che richiedono l'impiego di uno sviluppo nativo o se, al contrario, una soluzione cross-platform può ottimizzare lo sviluppo.
Per rispondere alla domanda dobbiamo capire cosa sono le applicazioni native e le applicazioni cross-platform, quali sono i loro aspetti principali e i loro punti di forza così da fare una scelta consapevole nell'ottica di creare un prodotto migliore possibile.
Cosa si intende per applicazioni native?
In generale sono applicazioni software progettate e sviluppate specificamente per una piattaforma o un sistema operativo particolare.
Un'app nativa è scritta utilizzando linguaggi di programmazione, strumenti e framework specifici della piattaforma target.
Nel mondo mobile le piattaforme target sono principalmente iOS e Android. Le applicazioni native Android sono sviluppate in linguaggio Kotlin o Java mentre quelle native iOS sono sviluppate in linguaggio Swift o Objective C.
... e per applicazioni cross-platform invece?
Un'applicazione cross-platform è sviluppata utilizzando un'unico codice sorgente che può essere eseguito su più piattaforme (iOS o Android) o sistemi operativi.
I framework cross-platform, come React Native, Flutter e .NET MAUI, sono l'elemento che fa la magia: trasformano il codice sorgente in elementi nativi e consentono di accedere alle funzionalità native del dispositivo (Bluetooth, GPS, fotocamera, ecc..) mappando le API specifiche della piattaforma.
Ora che abbiamo dato la definizione delle due tipologie di applicazioni, come possiamo capire quale è la soluzione migliore per il nostro progetto?
I vantaggi dello sviluppo nativo
Performance
Uno dei vantaggi più significativi sono le prestazioni. Le app native sono create appositamente per una particolare piattaforma utilizzando linguaggi di programmazione specifici della piattaforma (Swift/Objective-C per iOS, Java/Kotlin per Android). Ciò consente di sfruttare tutta la potenza della piattaforma, ottenendo app più veloci ed efficienti.
Accesso alle funzionalità platform-specific
Un'aspetto che si lega al precedente è la possibilità di accedere a tutte le funzionalità e API specifiche della piattaforma. Ciò consente di sfruttare gli ultimi aggiornamenti e di integrarsi perfettamente con il sistema operativo sottostante. Ad esempio, in iOS è più semplice abilitare l'integrazione con Siri se utilizzano le librerie native anziché quelle cross-platform. Lo stesso discorso vale per l'integrazione dei servizi Google nella piattaforma Android.
Migliore User eXperience
La combinazione di prestazioni migliori e accesso a funzionalità specifiche del dispositivo consente di realizzare app più fluide, ottimizzate per la piattaforma e dalla migliore integrazione con l'interfaccia del sistema operativo.
Maggiore sicurezza
Le app native possono integrarsi meglio con i meccanismi di sicurezza della piattaforma, offrendo una migliore protezione e crittografia dei dati. Gli strumenti nativi consentono di ricevere aggiornamenti specifici della piattaforma risolvendo in maniera più rapida i problemi di sicurezza rispetto ai framework cross-platform.
Maturità della community
La community che sviluppa codice nativo iOS e Android è molto vasta, per entrambe le piattaforme è disponibile sia la documentazione ufficiale (prodotta da Apple e Google rispettivamente) sia supporto da parte degli sviluppatori tramite diversi canali come forum, blog, articoli tecnici e newsletter.
Gli svantaggi dello sviluppo nativo
Limitazioni della piattaforma
Le app native vengono sviluppate per piattaforme specifiche, il che significa che sono necessari sforzi e risorse di sviluppo separati per ciascuna piattaforma (iOS e Android), aumentando così i tempi e i costi di sviluppo.
In sostanza, sono necessari due team di sviluppo separati con competenze specifiche per ogni piattaforma poiché la conoscenza acquisita su una piattaforma è poco utile sull'altra.
Aggiornamento e manutenzione
Avendo due codici sorgente diversi, le applicazioni native devono essere aggiornate e mantenute separatamente per ciascuna piattaforma, richiedendo tempo e impegno aggiuntivi per risoluzione di bug, per gli aggiornamenti di sicurezza e per i problemi di compatibilità con le nuove versioni dei sistemi operativi.
Tempi di sviluppo
Lo sviluppo di un'app nativa può comportare un tempo di sviluppo più lungo rispetto allo sviluppo di un'app cross-platform. Una condizione negativa che si potrebbe verificare è il ritardo nel rilascio delle stesse funzionalità tra le diverse piattaforme. Se gli utenti iOS ottengono alcune funzionalità dell’app più velocemente di quelli Android, ci potrebbe essere la possibilità di perdere la fedeltà delle persone interessate.
I vantaggi dello sviluppo cross-platform
Riduzione dei costi e dei tempi di sviluppo
Lo sviluppo di un'unica applicazione cross-platform riduce i costi di sviluppo rispetto alla creazione di applicazioni native per ogni singola piattaforma. Ci sarà infatti un solo team formato nello sviluppo per entrambe le piattaforme: in questo articolo relativo al framework cross-platform React Native si ritiene che i costi di sviluppo si possano ridurre fino al 30%.
I framework cross-platform consentono tempi di sviluppo più rapidi; con (quasi ☝️) un solo codice sorgente è possibile realizzare due applicazioni consentendo il rilascio sugli store contemporaneamente, con conseguente time-to-market più rapido.
Riuso del codice
Gli sviluppatori possono riutilizzare una parte significativa del codice su più piattaforme, riducendo i tempi e gli sforzi di sviluppo.
Ovviamente, lo sviluppo tra app richiede ancora un codice specifico per la piattaforma proprio per migliorare l'interfacciamento con le librerie e le API native. Il codice specifico però è una parte minore rispetto a tutto il codice realizzato.
Manutenzione più semplice
L'aggiornamento e la manutenzione di un'unico code base semplifica il processo, poiché le modifiche possono essere applicate universalmente, risparmiando tempo e risorse. Anche in questo caso ciò non è valido per qualsiasi modifica possibile ed immaginabile, ma se escludiamo le funzionalità di interfacciamento con librerie o API native quest'affermazione può essere considerata valida.
Gli svantaggi dello sviluppo cross-platform
Limitazioni delle prestazioni
Non c’è dubbio che le applicazioni native siano più reattive e abbiano prestazioni migliori rispetto alle app cross-platform.
Questo perché il codice nativo interagisce direttamente con le risorse interne del dispositivo. Quando si tratta di attività impegnative per CPU e GPU esiste un notevole divario prestazionale tra le due tecnologie.
Questo divario esiste perché le app cross-platform aggiungono un livello di astrazione (il framework) e un processo di rendering che sono in genere più lenti di quelli creati dagli ambienti nativi.
Accesso limitato alle API native
I framework cross-platform potrebbero non fornire pieno accesso a tutte le funzionalità e alle API native, limitando potenzialmente le capacità dell'app o richiedendo la scrittura di codice specifico per colmare il divario.
Bug specifici della piattaforma
Poiché le app cross-platform devono funzionare su più piattaforme, si potrebbero riscontrare bug specifici della piattaforma o problemi di compatibilità che sono difficilmente identificabili proprio per la presenza del framework nasconde la vera natura del problema.
Essi inoltre dovranno essere risolti separatamente per ciascuna piattaforma, aumentando gli sforzi di sviluppo e manutenzione che a lungo termine posso portare a grossi problemi di stabilità dell'app.
Problematiche di User eXperience
Ogni sistema operativo ha il suo stile e design specifici. L'esperienza dell'utente sarà perfetta se si utilizzano elementi nativi per l'interfaccia utente. Se si desidera rendere uniforme l'interfaccia tra le diverse piattaforme allora è necessario customizzare gli elementi grafici per ciascuna andando a vanificare uno dei vantaggi dello sviluppo cross-platform ovvero il riuso del codice.
Conclusioni
Come è possibile capire da tutti gli aspetti appena esposti, non c'è una risposta univoca alla domanda che ci siamo posti all'inizio: optiamo per uno sviluppo di un'applicazione nativa o per un'applicazione cross-platform?
Sebbene le applicazioni cross-platform rispetto alle applicazioni native siano più economiche, le seconde offrono spesso una soluzione più robusta e personalizzata, ideale per sfruttare appieno le peculiarità di ogni piattaforma.
La scelta tra lo sviluppo nativo e quello cross-platform dovrebbe essere guidata tenendo in considerazione tutti gli aspetti di ciascuna soluzione che abbiamo esposto in questo articolo in particolar modo l'accesso a funzionalità specifiche della piattaforma (bluetooth, gps, ecc..), i costi e gli obiettivi dell'esperienza utente.
ma quindi in Tiknil si sviluppano app native o app cross-platform?
Il nostro team di sviluppo possiede competenze sia in ambito nativo che cross-platform quindi in base alla tipologia di progetto proponiamo ai nostri clienti quale tecnologia secondo noi è meglio utilizzare.
Dai un'occhiata alla sezione del nostro sito Case History, riesci ad individuare quali app potrebbero essere native e quali cross-platform?
Provo a darti un paio di suggerimenti... L'applicazione ThermoICE 2.0 che controlla il termostato smart di Gewiss è stata realizzata con il framework Xamarin mentre l'app SmartHMI per gestire i condizionatori industriali Daikin l'abbiamo realizzata il linguaggio nativo.
...e se parliamo di ConnectiveApp?
Questa particolare tipologia di applicazioni che consentono di comunicare con oggetti fisici richiede che venga sfruttata tutta la performance messa a disposizione dalla piattaforma.
Generalmente la comunicazione richiede l'accesso a componenti specifici della piattaforma come il Bluetooth, il BLE, il WiFi, ecc... quindi per ottenere il massimo delle prestazioni è necessario andare ad utilizzare le funzionalità platform-specific di ogni sistema operativo. Per esempio il comportamento del Bluetooth viene gestito in maniera diversa tra iOS e Android quindi è più efficiente utilizzare la API native per implementare la connessione.
Con queste considerazioni possiamo dire che generalmente le ConnectiveApp vengono in effetti implementate in codice nativo.
Vuoi capire se lo sviluppo nativo è la migliore soluzione per l'app che vuoi realizzare?