Supportare iPhone che non possediamo
Il nostro team dispone di modelli iPhone nuovi. I nostri utenti no. Molte delle persone che ogni giorno aprono una delle nostre app utilizzano un dispositivo che ha tre, quattro, a volte anche cinque anni. Se effettuassimo i test solo sui dispositivi che abbiamo in tasca, ci rivolgeremmo al pubblico sbagliato.
È facile dimenticarsene in un piccolo studio. Quando si sviluppa tutto il giorno su hardware veloce, la velocità diventa la norma e qualsiasi cosa che su un telefono più vecchio funzioni semplicemente bene smette di essere percepita come un problema. L’unica soluzione affidabile che abbiamo trovato è quella di tenere il telefono più vecchio fisicamente davanti a noi, ogni volta.
La nostra flotta di riferimento
Disponiamo di una piccola flotta di dispositivi fisici: un iPhone per ciascuno degli ultimi cinque anni, più il modello iPad più economico attualmente in commercio. Ogni versione passa attraverso questa flotta prima di lasciare il controllo qualità, non solo l’hardware più recente presente sulle scrivanie degli ingegneri. Il telefono di cinque anni fa rileva problemi che nessun simulatore è in grado di individuare.
La procedura è tutt’altro che affascinante. Installare la build, avviarla a freddo, scorrere l’elenco più lungo nell’app, aprire la schermata più pesante, ruotare il dispositivo, mettere l’app in background e tornare indietro. Sul iPad verifichiamo anche la modalità Split View, perché un iPad economico che esegue due app affiancate è un dispositivo molto diverso da uno nuovo che ne esegue una sola. Niente di tutto ciò richiede molto tempo, ed è la parte della settimana di rilascio che siamo meno disposti a saltare.
Lo stesso ragionamento vale anche al di là del iPhone. Le nostre app Android vengono testate su hardware di fascia media, non solo su smartphone di punta, e le nostre app iPhone e iPad funzionano anche su dispositivi Mac con chip Apple Silicon, dove un layout che sembrava a posto su uno smartphone può improvvisamente trovarsi in una finestra ridimensionabile.
Cosa abbiamo imparato
Le animazioni che risultano scattanti sul chip più recente appaiono lente su quelli di due generazioni precedenti. Le opzioni di decodifica delle immagini, impercettibili su un Pro Max, possono rallentare il thread principale su un SE base. Le risorse di memoria, generose sui dispositivi da 8 GB, risultano limitate su quelli da 4 GB. Nessuno di questi aspetti si manifesta come un bug, ma si traduce in una sottile sensazione che l’app funzioni peggio sui telefoni più economici, ed è proprio questa l’impressione che non vogliamo dare.
L’errore che abbiamo commesso all’inizio è stato quello di considerare il vecchio telefono come un controllo finale anziché come un input per la progettazione. Realizzavamo una schermata, la perfezionavamo su un nuovo hardware e solo allora scoprivamo che sul dispositivo più vecchio presentava dei rallentamenti — a quel punto, per risolvere il problema dovevamo rielaborare qualcosa che avevamo già considerato finito. Ora il vecchio telefono viene coinvolto fin dal primo prototipo. Se un’animazione o un elenco non funzionano correttamente su quel dispositivo, modifichiamo il design, non solo il codice.
Ci sono dei compromessi. Alcuni effetti semplicemente non valgono la pena se rendono bene solo sull’hardware più recente, quindi li tralasciamo. Questo a volte fa sì che un’app appaia un po’ più semplice in uno screenshot rispetto a quella di un concorrente. Ci sta bene così.
Il nostro minimo
Due versioni precedenti di iOS per tutte le app Zydeno. Il ritmo con cui Apple rende obsolete le versioni è talmente rapido che andare oltre renderebbe la manutenzione del codice troppo complessa, ma limitarsi a due versioni precedenti fa la differenza tra soddisfare adeguatamente la maggior parte dei nostri utenti e soddisfare solo quelli che utilizzano il software più recente.
Attenerci a questa linea di condotta significa, a volte, aspettare prima di adottare una nuova funzionalità del sistema, oppure svilupparla in modo che l’app continui a funzionare anche senza di essa. Si tratta di un costo concreto in termini di tempo dedicato allo sviluppo. Preferiamo sostenere questo costo piuttosto che dire a qualcuno che il suo telefono, che funziona perfettamente, non è più abbastanza buono per noi.
Il telefono economico è il critico più sincero. Lo teniamo sulla scrivania per un motivo ben preciso.