SwiftUI: la nuova era dello sviluppo per iOS.
SwiftUI: la nuova era dello sviluppo per iOS.
Nel giugno del 2019 Apple ha presentato SwiftUI, il nuovo framework per la creazione di interfacce grafiche e app su dispositivi iOS, creando un piccolo terremoto all’interno della community.
La necessità di un prodotto di questo tipo che andasse ad affiancare, se non a sostituire, l’attuale framework UIKit non era certo una novità ma anche i più ottimisti pensavano che ci sarebbero voluti anni per la sua immissione sul mercato. UIKit è universalmente utilizzato per la creazione di app per iOS dal lontano 2008, ovvero da poco dopo l’uscita del primo modello di iPhone. Per intenderci, la quasi totalità delle app presente sullo store è stata sviluppata tramite UIKit con Apple che ha fatto evolvere il framework di anno in anno, introducendo sempre nuove funzionalità e fino a farlo divenire lo standard assoluto.
L’introduzione di SwiftUI segna un cambiamento profondo e sostanziale nel modo in cui verranno sviluppate in futuro, le app native per tutte le piattaforme Apple, non solo iPhone e iPad.
Cerchiamo di capire il perché.
Per la definizione delle interfacce grafiche UIKit sfrutta un modello “ad oggetti”: bottoni, liste, celle, immagini, testi, in pratica tutti gli elementi grafici e di struttura visibili all’interno di una schermata sono degli “oggetti”, cioè dei componenti isolati tra loro e dotati di una loro “vita”. La logica dell’app (normalmente chiamata anche “logica di business”) comunica a ciascuno di questi oggetti cosa deve mostrare o come deve apparire, e a loro volta questi oggetti inviano alla logica degli eventi che rappresentano azioni che l’utente effettua sullo schermo (tap, scroll, pinch, zoom, eccetera). Quando un oggetto invia un evento alla logica di business questo lo riceve ed effettua delle azioni che spesso comportano l’aggiornamento di uno o più oggetti o la presentazione di un’intera nuova schermata (con oggetti diversi). Infine questi oggetti sono posizionati nella schermata grazie ad un motore di layout che sfrutta dei vincoli tra oggetti fissati dallo sviluppatore. Gestire tutti gli eventi e l’aggiornamento di ogni singolo oggetto è fattibile per schermate semplici, ma al crescere della complessità, sia della grafica che della logica di business, diventa complesso mantenere l’ordine in questo mare di eventi ed informazioni e il rischio di introdurre bug cresce.
Per la definizione delle interfacce grafiche SwiftUI sfrutta invece un moderno modello di tipo “dichiarativo”: non si creano degli oggetti, ma si va a dichiarare quale deve essere la struttura grafica dell’interfaccia, si costruiscono componenti grafici complessi a partire da componenti grafici base, quasi come fossero dei mattoncini Lego, e componenti diversi sono allineati tra loro tramite l’ausilio di altri specifici componenti grafici, che si prendono cura di definire i vincoli, senza che sia lo sviluppatore a farlo. La logica di business comunica alla schermata non solo quali informazioni deve mostrare, ma anche come deve cambiare la struttura grafica stessa, senza dover andare ad agire sui singoli componenti (o oggetti, nel caso di UIKit). Infine questi componenti grafici inviano sempre degli eventi alla business logic, ma la gestione di questi eventi è molto più semplice rispetto ad UIKit.
A prima vista la differenza tra questi i due framework potrebbe sembrare marginale ma così non è.
SwiftUI è stato progettato per poter costruire interfacce grafiche complesse più velocemente e con minore rischio di introdurre dei bug oltre che implementare feature quali Dark Mode, font dinamici e animazioni custom in una frazione del tempo, con il vantaggio ulteriore di riutilizzare le stesse componenti grafiche su più fronti.
SwiftUI supporta infatti tutte le piattaforme Apple, mentre prima era necessario utilizzare più framework diversi tra loro (UIKit, WatchKit e AppKit) per i singoli sviluppi; il risultato è che una sola applicazione scritta con SwiftUI ne sostituirà diverse, con logico risparmio di tempi e di costi di sviluppo.
Purtroppo SwiftUI non è ancora un framework del tutto maturo come testimonia il numero di bug che facilmente si producono in sviluppo. In primo luogo mancano molte feature messe a disposizione da UIKit, e se è pur vero che alcune di queste possono essere replicate in SwiftUI, il processo porta via del tempo con esiti non sempre perfetti anche dal punto di vista del risultato finale. In secondo luogo SwiftUI presenta ancora alcuni bug, per i quali magari è possibile trovare dei work-around, con il problema che poi andranno sistemati una volta che Apple rilascerà i relativi fix. Infine è verosimile che Apple, come già fatto per UiKit, faccia evolvere pesantemente il prodotto e nel giro di poco tempo introduca cambiamenti tali da richiedere la revisione delle app sviluppate con SwiftUI fino a quel punto.
Tutto questo non deve però scoraggiare chi è interessato ad utilizzare SwiftUI.
Diverse aziende hanno già rilasciato sullo store app complesse scritte interamente tramite SwiftUI; una cosa fondamentale è infatti che il nuovo framework è compabile con il suo predecessore e questo rende possibile implementare nuove feature sviluppate con SwiftUI su app esistenti scritte con UiKit. L’unica limitazione è che SwiftUI è disponibile solo da iOS 13 in poi.
Con SwiftUI ancora in fase di perfezionamento, Apple sta comunque continuando (e continuerà per un bel po’) a supportare e ad aggiornare UIKit. Per contro ci sono segnali molto chiari dalla casa di Cupertino che il futuro è SwiftUI: un esempio lampante è stato quello di obbligare gli sviluppatori a creare i nuovi home widget di iOS 14 utilizzando solo ed esclusivamente SwiftUI.
Non sappiamo quando SwiftUI quindi quando avverrà il passaggio di testimone ma sappiamo che prima o poi accadrà. Quando SwiftUI sarà lo standard per lo sviluppo nativo su iOS sarà molto più semplice creare app con grafica molto complessa e per più piattaforme contemporaneamente, permettendo di avere qualità elevata e costi relativamente contenuti.
Noi di Metide lo stiamo già apprezzando nella sua forma odierna e davvero non vediamo l’ora di esplorarne le enormi potenzialità nelle versioni che verranno.