아이폰 Duo를 준비하는 개발자를 위한 가이드
요약
폴더블 기기(iPhone Duo)에 대응하기 위해 고정된 화면 크기 대신 현재 앱이 할당받은 공간을 기준으로 레이아웃을 구성해야 합니다. iOS 27.1 SDK부터는 세로 툴바와 탭 바가 상태 표시줄 아래 측면으로 이동하므로, 새로운 배치 우선순위를 점검하는 것이 중요합니다.
핵심 포인트
- 고정 크기 대신 `view.bounds`나 `GeometryReader`를 사용하세요.
- 접힘/펼침에 따라 발생하는 크기 변경을 실시간으로 계산해야 합니다.
- iOS 27.1부터는 측면 배치되는 제어 요소의 가림 현상을 점검하세요.
- 하드코딩된 기기 크기 대신 사용 가능한 공간을 기준으로 설계합니다.
접고 펼치는 동안 앱의 크기가 바뀌는 폴더블 iPhone에 대응하려면, 고정된 화면 크기나 기기 종류 대신현재 앱에 주어진 공간을 기준으로 레이아웃을 구성해야 함- 외부·내부 화면과 여러 접힘 상태에서도
작업 상태와 기능을 유지하며, 넓어진 공간에는 목록과 상세 내용을 함께 표시하는 방식으로 기존 화면을 확장 iOS 27.1 SDK부터 화면 전체와 세로 툴바·탭 바를 활용하므로, 기존 상단·하단 제어 요소가 측면으로 이동할 때의 배치와 우선순위를 점검해야 함- 접힌 부분과 전면 카메라는
예약 영역(Reserved Regions)으로 처리하며, 시스템 컨테이너와 새로운Arrangement View로 콘텐츠를 분할하거나 재배치 가능 - Xcode의
앱 크기 조절 점검 스킬, 크기 변경 시뮬레이터, iPhone Mirroring과 iPhone Duo 시뮬레이터로 문제를 찾고, App Store용 스크린샷과 미리보기도 함께 준비
SDK에 따라 달라지는 화면 활용
- iPhone Duo는
작은 외부 화면과 큰 내부 화면을 갖추며, 접기·펼치기·부분 접힘·회전에 따라 앱의 표시 공간이 바뀜 - 기존 앱도 실행되지만, 빌드에 사용한 SDK에 따라 화면 활용과 적응 방식이 달라짐
빌드 SDK iPhone Duo에서의 동작 iOS 26 이하펼쳤을 때 내부 화면 중앙에 기존 크기로 표시되고 주변에 빈 공간이 남음 iOS 27내부 화면 대부분을 채우도록 크기가 바뀌지만, 측면 상태 표시줄 영역은 피함 iOS 27.1 이상화면 전체를 활용하며, 툴바와 탭 바가 상태 표시줄 아래에 세로로 배치됨 최신 SDK로 다시 빌드하는 것과 레이아웃을 검증하는 것은 함께 수행해야 함- 특히 iOS 27.1 SDK로 배포하기 전에 세로로 전환되는 제어 요소가 콘텐츠를 가리거나 사라지지 않는지 확인해야 함
먼저 고쳐야 할 기존 코드 패턴
| 기존 가정·구현 | 대응 방향 |
|---|---|
UIScreen.main.bounds 로 화면 크기 계산 | |
view.bounds , window.bounds 또는 SwiftUI의 GeometryReader ·onGeometryChange 사용 | |
| 시작할 때 크기를 한 번만 읽음 | 실행 중 접힘과 펼침으로 발생하는 크기 변경에도 다시 계산 |
| 가로·세로 방향으로 레이아웃 결정 | 현재 컨테이너의 너비·높이와 size class 기준으로 결정 |
.phone ·.pad 로 화면 구성 구분 | |
| 기기 종류 대신 사용 가능한 공간을 기준으로 구성 | |
| regular width를 iPad라고 가정 | iPhone에서도 regular width를 포함한 여러 조합이 가능하도록 대응 |
| 특정 iPhone의 픽셀 크기와 비교 | 고정된 기기 크기 목록과 하드코딩 제거 |
이미지·영상을 항상 aspectFill 로 표시 | |
| 넓어진 화면에서 주요 내용이 잘리는지 확인하고 fit·fill 또는 초점 위치 조정 |
- UIKit은
Auto Layout과 레이아웃 갱신 시점, SwiftUI는컨테이너 크기와 환경 값을 활용함 - 화면 배율도 고정하지 않고 UIKit의
traitCollection.displayScale
이나 SwiftUI의displayScale
환경 값에서 가져옴
점검 스킬과 테스트 도구
-
Xcode 코딩 어시스턴트에
**“get my app ready for iPhone Duo”**라고 요청하면, 크기 조절을 방해하는 패턴을 찾아 문제와 수정안을 제시함 - 다른 코딩 에이전트에서는
로 스킬을 내보낼 수 있음xcrun agent skills export -
자동 점검이 모든 문제를 찾지는 못하므로 다음 환경에서 직접 검증해야 함
Device Hub의 크기 변경 가능한 iOS 시뮬레이터****macOS 27의 iPhone Mirroring: 창을 매우 좁거나 넓게 조절Xcode 27.1의 iPhone Duo 시뮬레이터: 실제 기기의 화면·접힘 동작에 가까운 검증 -
App Store Connect에서는 새로운 미리보기 도구로 홍보 자료를 확인하고,
피처드 추천 신청에 모든 기기 자세를 지원한다는 정보를 제출할 수 있음. 준비·점검·배포 안내
화면을 새로 만들기보다 기존 경험을 확장하기
-
외부 화면과 내부 화면 사이에서
기능, 선택 상태와 정보 계층을 유지해야 함- Mail처럼 외부 화면에서는 목록 또는 상세 내용을 보여주고, 내부 화면에서는 둘을 나란히 표시할 수 있음 -
각 접힘 자세마다 별도의 화면을 설계하기보다,
size class·여백·safe area를 활용해 자연스럽게 확장하는 편이 기본임 - 부분적으로 접을 때도 필요한 요소만 조금 이동하고, 제어 요소가 갑자기 사라지거나 크게 재배치되는 변화는 피함
접힌 부분과 카메라를 위한 예약 영역
예약 영역 동작 외부 전면 카메라항상 존재하며, Live Activities 표시 시 Dynamic Island 영역으로 확장 내부 전면 카메라사용하지 않을 때는 숨겨지고, 활성화되면 콘텐츠가 피해야 할 영역이 됨 접힘 영역부분적으로 접었을 때 내부 화면을 나누며, 완전히 펼치면 비활성화됨 - 시스템의 시트·메뉴·분할 화면 등은 예약 영역에 자동으로 대응함
-
직접 만든 화면은
중요한 정보와 버튼이 접힌 중앙에 걸리지 않도록조정해야 함 - 그리드에서는
짝수 개 열을 사용하면 접힌 부분을 기준으로 콘텐츠를 나누기 쉬움
두 화면을 배치하는 Arrangement View
주 화면과 보조 화면을 담고, 사용 가능한 공간과 접힘 영역에 맞춰 배치하는 컨테이너임Split은 가로로 넓으면 좌우, 세로로 길면 위아래로 나눔Overlay는 평소 두 화면을 겹치고, 부분적으로 접히면 접힘 양쪽에 나눠 배치함- 모든 화면에 적용하기보다, 기존 구성이
HStack
·VStack
·ZStack
처럼 두 영역으로 나뉘는 경우에 검토할 수 있음. 디자인 가이드
세로 제어 요소와 카메라 대응
-
외부 화면과 내부 화면의 일부 배치에서는
내비게이션·툴바·탭 바가 측면으로 이동함- 내부 화면의 세로 방향 등에서는 기존 가로 배치가 유지되므로, 한 방향으로 고정해서 설계하면 안 됨 -
직접 만든 바보다
NavigationStack·NavigationSplitView·내비게이션 컨트롤러 등 표준 컨테이너를 활용해야 시스템 배치를 받을 수 있음 - 툴바 항목에는
아이콘과 제목을 함께 제공해야 세로 바·가로 바·더보기 메뉴에 맞춰 표현할 수 있음- 제목만 있거나 커스텀 뷰로 만든 항목은 세로 바에 표시되지 않음 -
자주 쓰는 기능은 표시 우선순위를 높이고, 덜 쓰는 기능은 시스템 더보기 메뉴로 이동시킴
주요 구현 API
대응 작업 SwiftUI UIKit 두 영역 자동 배치 ArrangementView
UIArrangementViewController
접힘·카메라 영역 조회 GeometryProxy.reservedRegions(...)
UIView.reservedRegions(...)
세로 바 위치 확인 toolbarVerticalEdge
verticalBarEdge
툴바 항목 표시 우선순위 visibilityPriority(_:)
UIBarButtonItem.visibilityPriority
-
카메라 앱은 접거나 펼쳤을 때
화면과 카메라의 상대 방향이 바뀌는 상황도 처리해야 함 - 완전히 펼친 상태에서 후면 카메라를 사용할 때는
내부 화면의 앱과 함께 외부 화면에도 콘텐츠를 표시하도록 구성할 수 있음 - 테스트에서는 각 화면의 크기뿐 아니라
회전·부분 접힘·시트·팝오버·세로 바·카메라 활성화를 함께 확인해야 함. 구현 문서 -
카메라 앱은 접거나 펼쳤을 때
AI 자동 생성 콘텐츠
본 콘텐츠는 GeekNews의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기