Supporto multifinestra nella tua app per iPad

Scrittura · 7 ott 2019

Supporto multifinestra nella tua app per iPad

Sviluppo nativo per iPadOS

Il mese scorso Apple ha rilasciato iPadOS, il primo sistema operativo dedicato all'iPad. Si differenzia da iOS perché supporta lo schermo più grande dell'iPad, comprese le finestre multiple e lo schermo diviso. Io sviluppo app ed era ora di sfruttare le nuove possibilità offerte da iPadOS.

Dal 2016 uso l'iPad come computer principale, è un ottimo computer mobile. Il sistema operativo però è diverso da quello della maggior parte dei computer. iPadOS è basato su iOS, che gira sul popolare telefono di Apple, l'iPhone. Per questo l'iPad nell'uso quotidiano è un po' diverso, per come fa girare le app.

L'iPad Pro come mio computer principale, collegato a un terminale con Blink
L'iPad Pro come mio computer principale, collegato a un terminale con Blink

Visto che iPadOS ha radici da smartphone, il sistema operativo gestisce le app come fa un iPhone: le app girano a schermo intero, concentrate su un solo compito. La gente ama l'iPad proprio per questo, perché è un ottimo modo per tenere la mente concentrata su una cosa sola.

Supporto multifinestra per iPad

Ci sono situazioni in cui far girare più finestre contemporaneamente può essere molto utile, ed è qui che Apple ha migliorato iPadOS, introducendo la possibilità di far girare le app affiancate.

Supporto multifinestra su iPad, con due istanze della stessa app in esecuzione insieme
Supporto multifinestra su iPad, con due istanze della stessa app in esecuzione insieme

Anche se lavori a un solo compito, il supporto per più finestre è molto utile perché permette di far girare più istanze della stessa app insieme. Si aprono così casi d'uso diversi, in cui puoi guardare e modificare i contenuti da angolazioni diverse. Come confrontare due mesi diversi nella tua agenda, modificare un documento lungo o guardare la mappa a scale diverse contemporaneamente.

Confronto tra mesi diversi nell'app calendario
Confronto tra mesi diversi nell'app calendario
La mappa guardata a scale diverse contemporaneamente
La mappa guardata a scale diverse contemporaneamente

L'idea di design

Quando Apple ha introdotto il supporto per più finestre su iPad l'ha progettato rispettando le radici mobili di iPadOS. A differenza delle app per PC tradizionali, dove il software complesso gira di default in più finestre (e pannelli) diversi, iPadOS mantiene il requisito che un'app deve poter fare tutto da una sola finestra.

Su iPad è un requisito di design che tutte le finestre di un'app siano dello stesso tipo e che ognuna possa fare tutto nell'applicazione. L'utente può fare qualsiasi cosa da una sola finestra, se vuole. Deve poter creare più finestre solo se le ritiene utili, ma l'app non deve mai richiederlo. Questo facilita il modo semplice in cui le app girano su iPadOS: puoi continuare a usarle a schermo intero come su uno smartphone.

Ken Ferry spiega il design del supporto multifinestra per iOS durante il WWDC 2019
Ken Ferry spiega il design del supporto multifinestra per iOS durante il WWDC 2019

Ciclo di vita dell'app (e modifiche al codice)

Dal punto di vista tecnico Apple ha introdotto UIWindowScene, con una corrispondente astrazione UISceneSession nella struttura dell'interfaccia. Si colloca tra UIScreen e UIWindow.

Panoramica concettuale della struttura dell'interfaccia di iPadOS, spiegata da Steve Holt durante il WWDC 2019
Panoramica concettuale della struttura dell'interfaccia di iPadOS, spiegata da Steve Holt durante il WWDC 2019
Panoramica concettuale di UISceneSession, che garantisce lo stato persistente dell'interfaccia tra le rappresentazioni dell'app (WWDC 2019, Steve Holt, Apple)
Panoramica concettuale di UISceneSession, che garantisce lo stato persistente dell'interfaccia tra le rappresentazioni dell'app (WWDC 2019, Steve Holt, Apple)

Quando iPadOS (e iOS) fanno girare più app, può succedere che il sistema operativo chiuda un'app in background per risparmiare memoria ed energia. È voluto: tiene veloce il sistema operativo e gentile con la batteria.

Per il ciclo di vita dell'app, questo significa che all'avvio devi controllare se l'app era già in esecuzione. Se esiste una UISceneSession, l'app deve riconnettersi, per offrire all'utente uno stato dell'interfaccia persistente. Se fatto bene, l'utente non si accorge che l'app è stata interrotta mentre era in background.

Ruoli funzionali nel ciclo di vita di un'app iPadOS (WWDC 2019, Steve Holt, Apple)
Ruoli funzionali nel ciclo di vita di un'app iPadOS (WWDC 2019, Steve Holt, Apple)

Se adotti nella tua app i nuovi concetti UIWindowScene (e UISceneSession), potrai sfruttare le nuove capacità multifinestra dell'iPad. Ma c'è un'altra cosa: Apple ha in programma di portare le app iOS e iPadOS sul Mac. Con i nuovi concetti di interfaccia la tua app andrà benissimo anche su macOS!

La stessa app su iOS/iPadOS e macOS
La stessa app su iOS/iPadOS e macOS

Nella pratica

Come sviluppatore ho avuto pochi problemi a implementare i nuovi concetti di interfaccia nelle mie app. Con relativamente poco sforzo si abilitano tanti casi d'uso diversi in cui la stessa app dà più potenza all'utente.

La mia app "Lemmid (content) Manager" per modificare un articolo del blog guardando i risultati affiancati
La mia app "Lemmid (content) Manager" per modificare un articolo del blog guardando i risultati affiancati
Modificare un record DNS con la mia app "Lemmid Domain" mantenendo il contesto dell'intera zona DNS
Modificare un record DNS con la mia app "Lemmid Domain" mantenendo il contesto dell'intera zona DNS
La mia app "Lemmid Count" per analizzare visualizzazioni e traffico di un articolo su willem.com
La mia app "Lemmid Count" per analizzare visualizzazioni e traffico di un articolo su willem.com
Sviluppo web su iPad con Inspect e Blink affiancati
Sviluppo web su iPad con Inspect e Blink affiancati

Conclusione

Apple non ha avuto fretta con il supporto multifinestra su iPad, ma si è presa il suo tempo per progettarlo bene. Se adotti i nuovi concetti, la tua app sarà più potente per gli utenti.

È sempre una buona idea prendersi il tempo di capire i concetti di interfaccia di base prima di iniziare a sviluppare. Fallo bene (e per bene) invece che in fretta (e male)!

← Altri scritti