DevOps / CI/CD

2026 iOS 27 창 적응: 폴더블 iPhone의 검수 목록을 기다리지 마세요

2026 iOS 27 창 적응: 폴더블 iPhone의 검수 목록을 기다리지 마세요

앱 창을 조금만 줄여도 버튼이 잘리고, iPhone Mirroring에서는 화면 비율이 찌그러집니다.

가장 빠른 해법은 폴더블 iPhone의 이름과 크기를 기다리지 않고 지금 iOS 27 창 적응을 시작하는 것입니다. 장면 생명 주기로 옮기고, UIScreen.main·기기 종류·방향에 묶인 레이아웃을 정리한 뒤 Xcode 27에서 연속적인 창 크기를 검수해야 합니다.

이 검수 목록이 필요한 팀

오래된 UIKit 코드와 고정 화면 크기에 의존하는 개발자가 우선 대상입니다. SwiftUI와 UIKit을 함께 쓰는 팀도 포장 층의 고정 폭 전달 여부를 확인해야 합니다.

iPhone Mirroring, iPad, 새로운 형태의 창을 회귀 검수해야 하는 QA 팀에도 해당합니다. Xcode 27 여러 실행 환경과 임시 클라우드 맥 확장을 검토하는 기술 책임자라면 마지막 환경 배정 부분까지 확인해야 합니다.

2026년 8월 23일 기준으로 Apple이 확인한 범위는 iOS 27과 macOS 27에서 iPhone Mirroring 창을 자유롭게 조절할 수 있다는 점, iPad에서 iPhone 전용 앱의 크기를 바꿀 수 있다는 점, 장면 생명 주기와 창 기준 레이아웃을 사용해야 한다는 점입니다. 관련 행동은 공식 개발자 세션 278에서 확인할 수 있습니다. 폴더블 iPhone의 제품명, 화면 크기, 가격, 출시 일정은 아직 공식 확정 정보가 아닙니다.

마케팅 보도에서 전해지는 가을 행사 날짜도 공식 초대장이 나오기 전에는 예상으로만 취급해야 합니다. 관련 보도는 행사 일정에 대한 보도 내용으로만 참고합니다.

공통 기준선과 실패 비용

이번 변경의 핵심은 특정 기기 하나를 추가하는 일이 아닙니다. 앱이 현재 장면의 사용 가능 영역을 계속 받아들이는 구조로 바뀌는 일입니다.

기존 기준을 계속 쓰면 다음 문제가 생깁니다.

  • 전역 화면 불일치: UIScreen.main은 현재 앱 장면이 아닌 주 화면 정보를 가리킬 수 있습니다. Apple 문서도 UIScreen.main과 창 장면의 화면을 구분합니다. UIScreen.main 설명UIWindowScene의 화면 설명을 함께 대조해야 합니다.
  • 고정 캔버스 의존: 화면 비율, 배율, 방향을 조합해 “이 기기면 이 레이아웃”을 고르면 중간 창 크기에서 빈 공간이나 겹침이 발생합니다.
  • 장면 전환 누락: 앱 생명 주기 호출을 예전 앱 대리자에만 남겨두면 여러 장면과 백그라운드 복귀 시 상태가 어긋날 수 있습니다. UIKit 장면 생명 주기 전환 안내를 기준으로 이동 범위를 나눠야 합니다.
  • 권한과 재현 차이: 개발자 개인 맥에서만 실행하면 여러 시뮬레이터와 미러링 창을 동시에 재현하기 어렵습니다. QA가 같은 Xcode 27 환경을 공유하지 못하면 코드 문제와 환경 문제를 분리하기도 힘듭니다.
  • 렌더링 낭비: 창이 바뀔 때마다 영상, 지도, 금속 화면의 버퍼를 무조건 다시 만들면 메모리와 응답성이 흔들릴 수 있습니다. 다만 구체적인 성능 수치는 공식 자료나 실제 측정 없이는 단정하면 안 됩니다.

승자는 폴더블 전용 분기부터 만드는 팀이 아닙니다. 현재 창 크기를 기준으로 동작을 검수하고, 공식 기기 정보가 나온 뒤 테스트 지점만 추가하는 팀입니다.

UIKit 코드 감사와 교체 방향

코드 검색은 기능별이 아니라 위험도별로 진행하는 편이 빠릅니다. 아래 순서로 검색 결과를 세 그룹에 나눕니다.

자동 교체 후보

  • UIScreen.main.bounds를 단순한 여백 계산에 사용
  • screen.bounds를 뷰의 현재 폭으로 사용
  • 화면 방향에 따라 상수 하나만 바꾸는 코드
  • 기기 종류를 확인한 뒤 동일한 제약 조건을 반복하는 코드

이 경우 현재 뷰의 bounds, safeAreaInsets, traitCollection, size class를 기준으로 계산합니다. 창을 소유한 장면이 필요하면 UIWindowScene을 따라가야 합니다.

수동 구조 변경 후보

  • userInterfaceIdiom으로 화면 전체를 교체
  • interfaceOrientation으로 탐색 구조를 결정
  • 고정 폭을 여러 하위 뷰에 전달
  • 앱 대리자에서 화면 상태를 전역으로 저장

기기 종류와 방향은 보조 정보일 수 있지만, 창의 실제 사용 가능 영역보다 우선하면 안 됩니다. 장면 연결과 분리도 함께 점검해야 합니다. Apple의 장면 지원 설정 문서는 지원 장면 설정을 확인할 때 사용할 수 있습니다.

전문 회귀 후보

  • 화면 좌표를 직접 계산하는 드래그 도구
  • 키보드와 팝업 위치를 수동 산출하는 코드
  • 외부 화면이나 영상 출력과 연결된 화면
  • 특정 방향에서만 초기화되는 복합 탐색 구조

오래된 코드를 한 번에 지우기보다 호출 위치, 입력값, 창 변화 때의 기대 결과를 기록해야 합니다. 예를 들어 다음과 같이 바꿉니다.

기존 방식은 UIScreen.main.bounds.width를 읽고 폭이 특정 값보다 작으면 전체 화면을 교체합니다. 대체 방식은 현재 뷰의 사용 가능 폭과 trait 변화를 받아 제약 조건을 조절합니다. 검수에서는 중간 폭에서 버튼이 사라지지 않는지, 탐색 계층이 끊기지 않는지 확인합니다. API 이름을 바꾼 것만으로 완료 처리하면 안 됩니다.

SwiftUI와 혼합 구조의 연속 배치

SwiftUI 팀은 horizontalSizeClass 하나만 확인하고 끝내지 않아야 합니다. 같은 size class 안에서도 창 폭은 계속 변할 수 있습니다. GeometryReader 또는 현재 컨테이너 크기를 바탕으로 다음 화면을 이어서 확인합니다.

  • 내비게이션이 좁은 영역에서 뒤로 가기 동작을 잃지 않는지
  • 팝업과 시트의 내용이 잘리지 않는지
  • 폼의 레이블과 입력 칸이 겹치지 않는지
  • 목록의 행과 스와이프 동작이 눌러지지 않는지
  • 다중 열 화면이 한 열 화면으로 바뀌는 경계가 자연스러운지
  • 동적 글자 크기에서 버튼이 화면 밖으로 밀리지 않는지

혼합 구조에서는 UIKit 포장 층이 문제를 숨깁니다. UIHostingController에 고정 프레임을 전달하거나, 상위 뷰의 초기 크기를 환경값처럼 저장하면 SwiftUI가 창 변화를 받아도 다시 배치되지 않습니다. 포장 층은 가능한 한 실제 컨테이너 크기를 전달하고, SwiftUI 내부는 그 값에 반응해야 합니다.

Apple이 제공하는 유연한 UIKit 배치 사례도 고정 기기 목록보다 사용 가능한 공간과 제약 조건을 중심으로 설명합니다. 따라서 검수 기록에는 “iPhone 특정 모델 통과”보다 “좁은 창에서 폼의 마지막 입력 칸까지 접근 가능”처럼 관찰 가능한 결과를 적는 편이 낫습니다.

전체 화면 구성 요소의 별도 회귀

게임, 지도, 금속 기반 자가 그리기 화면, 영상 화면은 일반적인 스택 배치와 다른 검수 축이 필요합니다. 전체 화면을 선호한다는 설정이 창 크기 변화를 무시해도 된다는 뜻은 아닙니다.

개발자는 창 변화 때 다음 네 가지를 함께 대조해야 합니다.

  1. 렌더링 크기: drawable 또는 렌더 대상이 현재 창 크기를 받는지 확인합니다.
  2. 터치 좌표: 화면 좌표를 콘텐츠 좌표로 바꾸는 비율이 이전 창 크기에 고정되지 않았는지 봅니다.
  3. 캐시: 타일, 지도 영역, 영상 프레임 캐시가 새 영역을 반영하는지 확인합니다.
  4. 콘텐츠 비율: 비율 유지가 필요한 콘텐츠에서 잘림, 검은 여백, 흐림이 의도한 결과인지 기록합니다.

창을 드래그할 때 화면이 잠깐 흐려지는 현상만으로 특정 프레임 속도나 성능 저하를 결론 내리면 안 됩니다. 실제 수치는 같은 기기와 같은 장면에서 측정해야 합니다. 여기서는 레이아웃이 넘치는지, 입력 지점이 어긋나는지, 창 변화마다 자원이 끝없이 다시 만들어지는지만 실패 조건으로 둡니다.

QA 입력과 창 상태의 대조

QA는 기기 이름 중심의 기존 행렬을 창 상태 중심으로 바꿔야 합니다. Xcode 27의 Device Hub, Xcode Previews, iPhone Mirroring, 실제 iPad를 서로 다른 검증 입구로 둡니다. 시뮬레이터 크기 조절 방법은 공식 시뮬레이터 환경 설정 문서에서 확인합니다.

각 입구에서 다음 변화를 순서대로 실행합니다.

  • 창을 천천히 넓혔다가 좁힙니다.
  • 매우 좁은 창과 매우 넓은 창을 각각 멈춰 확인합니다.
  • 세로에 가까운 비율과 가로에 가까운 비율을 오갑니다.
  • 동적 글자 크기를 바꿉니다.
  • 팝업, 폼, 목록, 다중 열 화면을 열어 둔 채 크기를 바꿉니다.
  • 백그라운드로 보냈다가 다시 활성화합니다.
  • iPhone Mirroring에서 창을 조절한 뒤 동일한 경로를 반복합니다.
  • 실제 iPad에서 iPhone 전용 화면의 접근성과 입력 가능 영역을 확인합니다.

실패 조건은 모호하게 적지 않습니다. 레이아웃 넘침, 접근할 수 없는 조작 요소, 갱신되지 않은 캐시, 장면 전환 뒤 사라진 상태, 콘텐츠 비율 오류를 각각 별도 항목으로 기록합니다. Xcode 27의 변경 내용은 공식 출시 기록과 팀이 실제 사용하는 빌드에서 함께 확인해야 합니다.

역할별 완료 체크리스트

다음 목록은 코드 수정과 검수를 분리해 서명받기 위한 최소 단위입니다.

  • [ ] 개발자가 UIScreen.main, screen bounds, userInterfaceIdiom, interfaceOrientation 호출을 검색했습니다.
  • [ ] 각 호출에 자동 교체, 수동 변경, 전문 회귀 중 하나를 지정했습니다.
  • [ ] 앱과 장면 생명 주기 호출의 책임 위치를 문서화했습니다.
  • [ ] UIKit 화면이 현재 뷰와 창의 사용 가능 영역을 기준으로 배치됩니다.
  • [ ] SwiftUI에 고정 폭이나 고정 높이를 넘기는 포장 코드를 확인했습니다.
  • [ ] 탐색, 팝업, 폼, 목록, 다중 열 화면을 연속 창 크기로 확인했습니다.
  • [ ] 지도, 영상, 금속 화면의 렌더링 크기와 터치 좌표를 창 변화 뒤 재검증했습니다.
  • [ ] Device Hub, Previews, iPhone Mirroring, 실제 iPad의 환경을 기록했습니다.
  • [ ] 좁은 창, 넓은 창, 비율 변화, 동적 글자, 백그라운드 복귀를 실행했습니다.
  • [ ] 모든 결함에 환경, 창 상태, 재현 절차, 화면 갈무리를 붙였습니다.
  • [ ] 기술 책임자가 병렬 실행 수와 테스트 기간을 계산했습니다.
  • [ ] 미해결 항목마다 담당자와 다음 검수 조건을 지정했습니다.

기술 책임자의 환경 배치

코드 감사가 끝나면 프로젝트를 세 부류로 나눕니다. 검색과 치환으로 끝나는 항목, 사람이 구조를 다시 잡아야 하는 항목, 여러 창과 실제 기기에서 반드시 회귀해야 하는 항목입니다. 이 분류가 있어야 개발자 수와 테스트 환경 수를 연결할 수 있습니다.

개인 맥만 계속 공유하는 방식은 소규모 순차 검수에는 맞습니다. 반대로 여러 개발자와 QA가 동시에 Xcode 27, 시뮬레이터, 미러링 창을 사용해야 하거나 출시 전 테스트 기간이 짧다면 임시 클라우드 맥 환경을 비교할 이유가 생깁니다.

판단 기준은 다음과 같습니다.

  • 동시 작업자가 적고 장기간 같은 프로젝트만 빌드하면 개인 맥이 단순합니다.
  • 여러 브랜치의 병렬 빌드와 시뮬레이터 실행이 겹치면 별도 환경이 유리할 수 있습니다.
  • 팀이 같은 Xcode 27 환경을 반복해서 사용해야 하면 이미지와 접근 권한을 먼저 맞춰야 합니다.
  • 원격 QA가 필요하면 화면 공유, 파일 전달, 로그 수집 절차를 사전에 시험해야 합니다.
  • 물리 카메라, 특정 USB 장치, 장시간 고정 부하가 핵심이면 임대 환경보다 직접 보유 장비가 적합할 수 있습니다.

환경을 임시로 늘릴 때는 ProxyMac 콘솔에서 팀의 접근 흐름을 확인하고, 계정과 원격 접속 절차는 도움말에서 먼저 검토하는 편이 안전합니다. 장기적으로 안정적인 고부하 빌드가 목적이라면 맥 구매와 비교해야 합니다. 반대로 이번 작업처럼 Xcode 27 호환성 검수와 출시 전 병렬 테스트가 목적이면 기간, 동시 인원, 실제 필요한 실행 수를 기준으로 판단해야 합니다.

현재 방식과 ProxyMac 임시 확장의 차이

개인 개발 맥만 사용하는 방식은 동시 실행 때 대기열이 생기고, 담당자마다 Xcode와 시뮬레이터 상태가 달라지며, 원격 QA가 같은 화면을 재현하기 어렵다는 단점이 있습니다. 새 맥을 바로 구매하면 장비 조달과 초기 설정 시간이 들고, 단기 검수 뒤 유휴 자원이 남을 수 있습니다.

코드 감사 결과와 병렬 테스트량이 나온 뒤에는 Xcode 27 클라우드 맥 환경 배포와 검수 안내를 기준으로 환경 수와 기간을 대조하면 됩니다. 임시 호환성 테스트에는 ProxyMac 임대가 더 간단할 수 있지만, 물리 장치 의존이나 장기간 고정 부하가 핵심인 팀에는 자체 장비가 더 맞습니다. 중요한 것은 고정 상품을 먼저 고르는 일이 아니라, 담당자·창 상태·증거 자료가 포함된 출시 서명 목록을 완성하는 일입니다.

창 크기 검수를 위한 원격 맥 환경을 준비하세요

ProxyMac의 원격 맥으로 다양한 화면 크기와 방향에서 앱의 창 적응 상태를 점검할 수 있습니다.
필요한 기간만 개발 환경을 이용해 장비 구매와 관리에 드는 부담을 줄일 수 있습니다.