iPhone-ul pliabil se lansează pe 23 octombrie. Ce se strică în aplicația ta și cum să remediezi.

Apple a deschis trimiterile în App Store pentru iPhone Duo pe 5 octombrie, iar dispozitivul se pune în vânzare pe 23 octombrie. Este primul iPhone pliabil de la Apple: un ecran exterior mai mic, pe care îl folosești cu telefonul închis, și un ecran interior mai mare, disponibil când îl deschizi. Problema pentru dezvoltatori este că dimensiunea aplicației tale se schimbă în momentul în care cineva pliază sau depliază dispozitivul, iar această dimensiune nu corespunde întotdeauna cu ecranul fizic. Pentru a gestiona asta, Apple a lansat candidatul de lansare Xcode 27.1 pe 5 octombrie, cu simulatorul de pliere, un Device Hub pentru verificarea fiecărei poziții și un set de API-uri de layout construite în jurul pliului.
Iată ce stabilește termenul limită. Aplicațiile construite cu iOS 27 SDK se redimensionează deja pentru a umple cea mai mare parte a ecranului interior. Compilează cu iOS 27.1 SDK și aplicația ta primește insigna „optimizat pentru iPhone Duo”, cu barele de instrumente și barele de navigare care se mută într-o bară verticală sub zona de stare. Compilările mai vechi continuă să ruleze, dar cu margini negre. Din aprilie 2027, fiecare trimitere în App Store trebuie să includă capturi de ecran pentru iPhone Duo, deci chiar dacă omiți hardware-ul deocamdată, nu poți evita lucrul de layout prea mult timp.
Ce se strică de fapt
Două lucruri, în principal. Primul sunt dimensiunile de ecran codificate fix. Ghidajul propriu al Apple este direct: caută în proiect UIScreen.main și scapă de el. Citește dimensiunea din vizualizare sau fereastră (view.bounds, window.bounds sau GeometryReader în SwiftUI) și recitește ori de câte ori se schimbă, deoarece o pliere poate redimensiona aplicația ta în mijlocul unei sesiuni. Al doilea este logica de orientare. Pe iPhone Duo, orientarea dispozitivului nu mai îți spune forma aplicației tale, deci orice este legat de UIDevice.current.orientation sau interfaceOrientation trebuie eliminat. Compară lățimea și înălțimea spațiului pe care îl ai efectiv.
Pentru layout-urile care trebuie să răspundă pliului în sine, există două instrumente noi. Regiunile rezervate îți permit să întrebi proxy-ul de geometrie unde se află balamaua și camerele: o regiune .division marchează pliul, o regiune .occlusion marchează o cameră, iar fiecare raportează cadrul său și dacă este activă în momentul respectiv. Regiunea pliului este activă doar când dispozitivul este parțial deschis, ceea ce este un detaliu util, deoarece o poți citi cât timp dispozitivul este plat și poți aranja un număr par de coloane astfel încât nimic să nu cadă niciodată pe cută. Al doilea instrument, ArrangementView în SwiftUI (sau UIArrangementViewController în UIKit), este un container cu două panouri care împarte sau suprapune vizualizările tale principale și secundare și mută separatorul pe pliu pentru tine.
Am mai văzut acest film
În proiectele noastre native iOS și Android, aplicațiile care au trecut fără probleme prin era multitasking-ului pe iPad și Split View au fost întotdeauna cele care dimensionau vizualizările față de containerul lor, nu față de ecran. Cele cu dimensiuni codificate fix au necesitat intervenții serioase și niciodată nu au fost o chestiune de câteva ore. Am văzut aceeași problemă în proiectele de sănătate și IoT, unde o compilare pentru telefon și una pentru tabletă împărțeau același codebase: echipa care s-a bazat pe clasele de dimensiuni a livrat, echipa care a tratat special marginile ecranului a petrecut un sprint dezfăcând totul. iPhone Duo este aceeași lecție cu o formă nouă. Dacă layout-ul tău se adaptează deja la iPad și la iPhone Mirroring pe Mac, ești deja aproape acolo.
Un cuvânt de precauție cu privire la scurtătură. Xcode 27.1 îți permite să îi ceri asistentului de programare să „pregătească aplicația mea pentru iPhone Duo”, iar acesta va scana tiparele și va propune remedieri. Asta este cu adevărat util pentru a găsi fiecare UIScreen.main dintr-un codebase mare. Nu este un motiv să integrezi diff-ul necitit. Modificările de layout ating exact ecranele pe care utilizatorii tăi petrec cel mai mult timp, iar o rescriere automată care mută un element de control de pe pliu poate la fel de ușor să împingă o țintă de tap sub o cameră. Revizuiește-l ca pe orice alt pull request.
Ce ar trebui să faci această săptămână
Direcționează un lane CI spre Xcode 27.1, compilează cu iOS 27.1 SDK și rulează cele trei sau patru ecrane cu cel mai mult trafic prin fiecare poziție din simulator: închis, deschis, tip carte și rotit. Înainte de orice, caută în codebase UIScreen.main, UIDevice.current.orientation și constantele de frame fixe. Acea căutare singură îți spune cât de mare este această treabă cu adevărat, cu mult înainte să scrii o linie de cod nou de layout. Pentru majoritatea aplicațiilor este mai mic decât pare. Pentru câteva este o rescriere și e mai bine să știi acum decât în martie 2027.
Acesta este și un moment bun pentru a gândi dincolo de iOS. Disciplina pe care o impune iPhone Duo, dimensionarea față de un container și niciodată în funcție de un viewport fix, este aceeași care menține o aplicație web lizibilă de la un telefon la un monitor ultrawide. Când construim aplicații cloud-native pentru clienții enterprise, această responsivitate este deja presupusă. Mobile-ul nativ este în sfârșit împins în aceeași direcție, iar echipele care o tratează ca pe un obicei arhitectural, nu ca pe un plasture ocazional, vor petrece mult mai puțin timp urmărind următorul factor de formă. Poți vedea cum am abordat lucrările cross-platform în portofoliul nostru, iar pagina de development acoperă modul în care construim pentru web și mobile împreună.
Dacă pregătirea unei aplicații pentru un nou factor de formă fără a rescrie layout-ul de la zero îți sună cunoscut, hai să vorbim.