9월 10일 새벽 Apple이 첫 폴더블 아이폰 iPhone Duo를 공개했다.
한국은 10월 16일 밤 9시 예약, 10월 23일 출시다.
Xcode 27.1은 아직 베타도 안 나왔다.
Duo 시뮬레이터도 거기 들어 있어서 아직은 화면을 띄워볼 수 없다.
발표 자료만 보고 가볍게 정리하는 글.
방향으로 레이아웃을 가르고 있다면
Duo는 접고 펴고 세우고 눕힌다. HIG가 그린 포즈만 여섯이다.

포즈마다 화면을 만들 일은 아니다.
안쪽 화면은 앱이 선언한 지원 방향을 아예 무시한다. Info.plist에 세로로만 잠가 놔도 가로로 눕는다.
그리고 안쪽 화면을 전체 화면으로 쓰면 가로든 세로든 horizontal size class가 regular다.
방향은 바뀌는데 size class는 그대로다.
(근데 이거 제대로 쓰고 계시는 분?)
방향을 보고 폭을 짐작하던 분기가 여기서 헛돈다.
@Environment(\.horizontalSizeClass) private var sizeClass
size class는 화면 종류가 아니라 지금 내 뷰가 받은 가로 공간이다.
Split View로 창이 좁아지면 안쪽 화면에서도 compact가 된다. "안쪽 화면이면"이 아니라 "폭이 넉넉하면"으로 구분해야 맞을 것 같다.
탭 바나 툴바를 직접 그렸다면
Duo는 툴바와 탭 바를 화면 옆에 세운다. 바깥 화면이 기존 아이폰보다 넓고 짧아서, 세로 공간을 콘텐츠에 내주려고 그렇게 한다.
탭 바가 오른쪽으로 서고, 자리가 모자란 툴바 항목은 위쪽에 ···로 접힌다.

이미지는 가로가 길도록 세웠을 때인데, 세로가 길도록 세워도 마찬가지. 카메라 아래쪽으로 toolbar와 tabbar가 정리된다.
그리고 여기 조건이 붙는다.
시스템 컨테이너가 관리하는 바만 옆으로 간다.
일단 가끔 헷갈리는 각종 bar들 정리부터.
SwiftUI | UIKit | 뭐라 부르나 |
|---|---|---|
|
| 툴바 |
|
| 탭 바 |
|
| 내비게이션 바 |
세로 바는 한 줄인데 툴바 항목과 탭 바 항목이 그 자리를 같이 쓰게 된다.
그래서 자리가 모자랄 때 어느 쪽을 남길지 정하는 API도 만들어놓았다고 한다.
TabView {
Tab("Recents", systemImage: "clock") {
ContentView()
.toolbarVerticalCompressionBehavior(.prefersToolbarItems)
}
}UIKit은 navigationItem.verticalBarCompressionBehavior = .prefersBarItems으로 사용.
바 아이템 압축을 어느 바에서 할지 정하는 API.
prefersToolbarItems는 「밀리면 탭 바 쪽을 접고 툴바 항목을 남겨라」 라고 이해했다. 반대도 있다.
여기에 Dynamic Island와 상태 바까지 같은 세로 공간을 나눠 쓰기에 오버플로가 생겨서 ···가 생기게 되는 것이다... 라고 이해.
기본 값은 툴바가 먼저 접힌다.
설명을 해보긴 했는데, 시뮬 나와봐야... 제대로 느낄 것 같다.
더 중요한건,
디자인 때문에 탭 바를 직접 그린 앱이 여기서 갈린다.
그대로 두면 커스텀 탭바가 하단을 계속 먹어서 화면이 매우 좁아짐
TabView를 썼는지가 아니라, 시스템 바를 켜 뒀는지가 가른다.
내 앱
세로 배치
TabView그대로온다
TabView에 색·배경만 손질세션에 언급 없다. SDK 나와야 안다
시스템 바 숨기고 직접 그림
안 온다
세 번째가 문제다. .toolbar(.hidden, for: .tabBar)로 끄고 Stack으로 얹었으면, 시스템은 그게 탭 바인 줄 모른다. 그냥 아래 붙은 뷰 하나다.
바가 붙는 쪽은 하드웨어가 정한다. 바깥 화면에서는 전면 카메라와 같은 쪽이고, 오른쪽에서 왼쪽으로 읽는 언어에서도 안 넘어간다.
leading이라고 생각하고 짤 수도 없을듯.
Split View에서는 각 앱이 자기 바깥 변에 붙는다. 왼쪽 칸이면 왼쪽, 오른쪽 칸이면 오른쪽이기도 하다.
세로 바는 Dynamic Island, 상태 바와 같은 공간을 나눠 쓴다.
바깥 화면 가로 모드이거나 키보드가 올라오면 모자란다.
접히는 순서는 두 층이다.
toolbarVerticalCompressionBehavior가 툴바와 탭 바 중 어느 쪽을 먼저 접을지 정하면
visibilityPriority가 접히는 쪽 안에서 어느 항목을 남길지 정한다.
기본은 툴바가 먼저 접히고 탭 바가 남는다.
화면 사이를 오가는 게 중심인 앱에 맞춘 기본값이다. 편집 중심 앱은 .prefersToolbarItems로 뒤집는다.
safe area 좌우 값이 생겼다.
여태까지는 노치도 홈 인디케이터도 가운데 있어서 좌우 inset이 같았다.
가로를 지원하는 앱을 만들었다면 노치와 다이내믹 아일랜드 때문에 그래도 정리가 잘 되어있을텐데, 아니라면 확인이 필요하다.
Duo는 힌지가 한쪽 옆에, 전면 카메라가 반대쪽 위 모서리에 있다.

카메라 쪽 inset만 커진다.
컴파일도 되고 크래시도 안 나니 이 부분은 레이아웃을 눈으로 확인할 것.
카메라를 position으로 고르고 있다면
Duo는 카메라가 세군데 있다. 후면에 하나, 전면 둘. 문제는 전면 둘이다.
바깥 화면 쪽에 하나, 안쪽 화면 쪽에 하나 있다.
이런 안드로이드 폰을 사용해보신 분들은 아시는 디스플레이 아래 카메라가 있어서 평소엔 화면에 묻혀 안 보이는 거.
애플이 이걸 할 줄이야.

둘 다 AVCaptureDevice.position 값이 .front다. 그런데 기기를 펴면 안쪽 화면은 나를 보고 바깥 화면은 반대를 본다. 안쪽 카메라는 나를, 바깥 카메라는 벽을 찍는다.
.front로 찾아서 첫 번째를 집던 코드가 여기서 어긋난다.
둘을 가르려면 deviceType을 본다. .builtInOuterUltraWideCamera와 .builtInInnerUltraWideCamera로 나뉜다. 어느 쪽이 지금 어디를 향하는지가 필요하면 AVCaptureDeviceDirectionCoordinator를 쓴다.
대부분은 여기까지 안 가도 된다. .front에 wide나 ultrawide로 찾으면 가상 전면 카메라가 잡히고, 펴면 안쪽 닫으면 바깥으로 알아서 갈아탄다.
그리고, 위 그림의 가운데 파란 띠가 힌지다. 안쪽 화면은 부분 접힘 상태에서 여기가 갈린다.
표준 컨테이너 안에 있는 것들은 시스템이 알아서 가운데를 비켜 준다.
시트, 알림, 메뉴, 팝오버가 그렇고 버튼 같은 컨트롤도 밀려난다. 스크롤되는 본문은 안 밀어낸다. 읽는 중에 글이 좌우로 튀면 못 읽으니까.
안 밀리는 건 내가 좌표 잡아서 화면 한가운데 얹은 것들이다. 가운데 큰 버튼, 중앙 정렬된 슬라이더 같은 것.
공개된게 없어서 지금 할 수 있는 건 내 화면 정중앙에 뭐가 있는지 훑어보는 것까지다.
피하는 API는 reservedRegions인데 iOS 27.1 SDK 에 들어있어서 업데이트되면 그 때 시뮬레이터로 다시.
Split view 지원
아이패드에서만 되던 그거다.
Duo에서 두 앱이 나란히 뜬다. 옵트인도 없다. 앱마다 컨트롤이 자기 쪽 바깥 변에 붙는다.

Apple이 Split View에 대해 말한 건 "아이패드 리사이징이나 아이폰 미러링을 이미 지원하면 출발이 좋다"까지다.
레이아웃이 버티는지만 보라는 뜻이다.
그런데 아이폰에서 두 앱이 동시에 뜨는 건 처음이다.
앱 간 드래그앤드롭 API는 이미 있다.
.draggable()·.dropDestination()(iOS 16)이다. 아이패드에서나 쓰던 것들이다.
아이폰은 앱이 하나만 떠 있으니 그동안은 끌어다 놓는 기능을 대부분 안만들었다.
Duo에서는 그럴 일이 생길 수 있게 되었다.
앱에서 뭔가 복사해 메신저나 sns 등등으로 보내는 기능을,
지금은 복사하고 앱 바꾸고 붙여넣는 세 단계를 앱을 둘 다 띄운 뒤 끌어다 놓는 것으로 바뀐다.
남들이 안할 때 슬쩍 만들어놓으면 사용자들에게 좋은 인상을 받을지...도?!
덧. 앞으로 일정 정리
행사 시각은 PT 기준이라 한국 시간으로는 하루씩 밀린다.
한국 시간 | |
|---|---|
9월 17일 12–13시 | Group Labs |
9월 18일 0–1시 | Group Labs |
9월 23일 23시 ~ 24일 1시 | Photos & Camera Q&A |
9월 24일 0–2시 | SwiftUI Q&A, UIKit Q&A |
10월 16일 21시 | 예약 |
10월 23일 | 출시 |
Xcode 27.1 베타와 Duo SDK는 "이달 안"으로만 나와 있다.
(이게 제일 중요한거 아니냐!)
Apple Tech Talk 여섯 편과 HIG Designing for iPhone Duo를 정리했다. 본문 도해는 그 HIG 문서에 실린 그림이다. 실기기와 시뮬레이터 확인은 아직 못 했다.