기존 앱이 iPhone 18 Pro에서는 정상인데 펼친 화면에서 여백이 깨지고 콘텐츠가 접힘 영역에 걸립니까?
가장 빠른 해법은 iPhone Duo 전용 화면을 복제하지 않고, 고정 크기·방향 판단·주 화면 참조를 먼저 제거한 뒤 size class와 장면 경계, 보존 영역을 이용해 연속 적응형 레이아웃으로 바꾸는 것입니다.
이 글은 다음 개발자를 위한 내용입니다.
- SwiftUI 개발자: 고정 스택을 늘어나고 줄어드는 레이아웃으로 바꾸려는 경우입니다.
- UIKit 유지보수 팀: trait collection, safe area와 여러 장면 코드를 정리해야 하는 경우입니다.
- 기술 책임자: 실기기가 도착할 때까지 기다리지 않고 작업을 검수 가능한 단계로 나누려는 경우입니다.
최종 업데이트: 2026년 9월 17일. iPhone Duo의 다중 화면 및 접힘 상호작용 방향은 Apple의 기술 자료를 기준으로 확인했으며, Xcode 27.1 beta 전용 동작은 정식 도구가 공개된 뒤 다시 검증해야 합니다. Apple의 iPhone Duo 준비 자료와 Xcode 시스템 요구 사항을 함께 확인하십시오.
작업 환경을 먼저 고정하고 현재 화면을 기록합니다
개조를 시작하기 전에 먼저 “무엇이 바뀌었는가”를 판별할 수 있는 기준을 만들어야 합니다. iPhone 18 Pro의 핵심 화면을 캡처하고, 현재 지원 기기에서 다음 항목을 기록하십시오.
- 세로와 가로 전환 뒤의 화면 상태
- 탭, 내비게이션, 모달의 이동 경로
- 목록에서 상세 화면으로 이동한 뒤의 스크롤 위치
- 키보드, 카메라, 사진 선택기와 연결되는 화면
- 백그라운드 복귀 뒤 유지되어야 하는 입력값과 선택 상태
여기서 환경 조건도 함께 고정합니다. Xcode, macOS, iOS SDK가 프로젝트가 요구하는 조건을 충족하지 못하면 새 기기의 화면을 추측하며 코드를 고치지 말고 먼저 빌드 환경을 정리해야 합니다. Apple은 Xcode별 운영 체제와 SDK 조건을 별도로 안내하므로 공식 시스템 요구 사항에서 현재 설치 조합을 대조하십시오.
완료 기준은 간단합니다. 기준 화면을 다시 빌드했을 때 캡처 비교가 가능하고, 각 주요 경로를 같은 순서로 재현할 수 있어야 합니다. 이 조건이 없으면 이후의 레이아웃 수정과 회귀 실패를 구분하기 어렵습니다.
첫 번째 개조는 고정 크기와 기기 이름 분기부터 제거합니다
현존 앱에서 먼저 검색할 항목은 다음과 같습니다.
- 고정된 가로·세로 값과 화면 비율
- 세로 또는 가로를 강제로 정하는 조건문
- 기기 이름이나 모델 식별자를 기준으로 한 화면 분기
UIScreen.main에 직접 의존하는 크기 계산- 하나의 safe area만 있다고 가정한 배치
- 화면 전환 때마다 새로 만들어지는 상태 객체
이 코드가 iPhone Duo에서 더 쉽게 깨지는 이유는 표시 영역이 한 가지 크기로 고정되지 않기 때문입니다. 접힌 상태, 펼친 상태, 외부 화면과 내부 화면, 가로 방향과 여러 장면이 같은 앱 콘텐츠에 다른 경계를 제공할 수 있습니다. 따라서 기기 이름을 추가해 예외를 늘리는 방식은 잠깐 화면을 맞춰도 다음 상태에서 다시 무너질 가능성이 큽니다.
수정 순서는 영향도가 큰 항목부터 정합니다.
- 빌드를 막거나 콘텐츠를 가리는 고정 크기
- 방향 전환 때 충돌하는 전역 화면 참조
- safe area를 무시하는 오버레이
- 기기 모델별 중복 화면
- 특정 화면에서만 나타나는 시각적 간격 문제
이 단계의 완료 기준은 기기 이름을 추가하지 않고도 주요 화면이 컴파일되며, 각 화면이 자신에게 전달된 영역을 기준으로 크기를 계산하는 것입니다.
SwiftUI와 UIKit을 같은 원칙으로 연속 적응형으로 바꿉니다
iPhone Duo를 위한 별도 화면이 필요한가라는 질문에는 대체로 “아니요”라고 답하는 것이 안전합니다. 콘텐츠 구조는 유지하고, 공간이 달라질 때 배치 규칙만 바꾸는 편이 iPhone 18 Pro 호환성을 지키기 쉽습니다.
SwiftUI에서는 현재 환경의 가로·세로 size class를 읽고, 고정 폭 스택 대신 사용 가능한 영역에 반응하는 컨테이너를 사용합니다. 작은 공간에서는 제목과 본문을 세로로 쌓고, 넓은 공간에서는 목록과 상세 내용을 나란히 배치하는 식입니다. 중요한 점은 특정 기기 이름이 아니라 현재 뷰가 받은 공간을 기준으로 상태를 결정하는 것입니다. SwiftUI의 UserInterfaceSizeClass 문서는 이 환경 정보를 읽는 기준을 제공합니다.
UIKit에서는 UITraitCollection과 장면이 제공하는 경계를 기준으로 뷰를 재배치합니다. 화면 전체를 참조해 제약 조건을 만들기보다 컨테이너 뷰의 영역을 전달하고, trait 변경 시 제약 조건과 표시 우선순위를 다시 계산하십시오. UIKit 현대화 자료와 UITraitCollection 문서를 함께 보면 기존 화면을 점진적으로 바꾸는 방향을 잡기 좋습니다.
기존 iPhone 앱은 어떤 순서로 iPhone Duo에 맞출까?
먼저 한 화면을 선택해 다음 순서로 바꾸십시오.
- 화면 전체 크기를 직접 읽는 계산을 컨테이너 경계 기반으로 이동합니다.
- 고정 폭 요소에 최소·최대 제약을 둡니다.
- 작은 공간에서 우선 보여야 할 콘텐츠를 정합니다.
- 넓은 공간에서 추가로 보여줄 보조 콘텐츠를 정합니다.
- 화면이 다시 작아졌을 때 입력 상태와 탐색 위치가 유지되는지 확인합니다.
장면이 바뀔 때 화면을 새로 만드는 대신 같은 데이터와 탐색 상태를 유지해야 합니다. 이 원칙이 지켜지면 iPhone Duo의 펼침과 접힘뿐 아니라 일반 iPhone의 회전과 멀티태스킹 변화에도 같은 코드가 대응할 수 있습니다.
보존 영역을 확인한 뒤 콘텐츠를 나누거나 겹칩니다
접힘 화면에서는 단순한 safe area만 확인해서는 부족합니다. Apple의 iPhone Duo 자료에서 설명하는 분할 영역, 가림 영역, 비대칭 안전 영역은 서로 다른 문제를 가리킵니다.
- 분할 영역: 화면이 논리적으로 나뉘어 콘텐츠를 양쪽에 배치할 수 있는 기준입니다.
- 가림 영역: 접힘 구조나 시스템 영역 때문에 콘텐츠가 실제로 보이지 않을 수 있는 부분입니다.
- 비대칭 안전 영역: 왼쪽과 오른쪽, 위와 아래의 사용 가능한 여백이 같지 않은 상태입니다.
주 목록과 상세 화면처럼 서로 독립적인 콘텐츠라면 분할 배치를 검토할 수 있습니다. 반대로 영상, 지도, 사진처럼 하나의 연속된 장면이 중요한 콘텐츠라면 가림 영역을 피하거나 중요한 요소가 해당 구역을 통과하지 않도록 해야 합니다. 적응형 레이아웃과 자세 변화에 관한 Apple 기술 강연을 기준으로 실제 제공되는 영역 정보를 확인하십시오.
주의: 접힘 영역을 단순히 가운데 여백으로 처리하지 마십시오. 상태가 바뀔 때 포커스, 스크롤 위치, 작성 중인 입력, 현재 작업의 문맥이 유지되는지까지 확인해야 합니다.
완료 기준은 접힌 상태에서 버튼과 입력창이 가려지지 않고, 펼친 상태에서 불필요한 빈 화면이 생기지 않는 것입니다. 화면이 다시 접혔을 때 사용자가 진행하던 작업을 잃지 않는지도 별도 검수 항목으로 남기십시오.
접힘 상태를 시뮬레이터와 회귀 파이프라인에 넣습니다
iPhone Duo 실기기가 없어도 레이아웃 작업은 시작할 수 있습니다. 다만 시뮬레이터에서 통과했다는 사실을 실기기 동작의 확정 증거로 취급해서는 안 됩니다. 먼저 사용 가능한 개발 도구에서 다음 상태를 자동 또는 반자동으로 재현하십시오.
- 외부 화면과 내부 화면
- 접힌 상태와 펼친 상태
- 세로와 가로
- 좁은 공간과 넓은 공간
- Split View와 장면 크기 변화
- 키보드 표시와 백그라운드 복귀
이때 iPhone 18 Pro는 별도 기준 장치로 계속 회귀시켜야 합니다. 새 레이아웃이 넓은 화면에서만 좋아지고 기존 좁은 화면에서 버튼이 밀리거나 글자가 잘리는 경우가 흔하기 때문입니다.
현재 앱을 수정하는 팀이라면 자동화 작업을 세 갈래로 나누는 편이 좋습니다.
- 레이아웃 스냅숏: 주요 화면의 배치와 보존 영역을 확인합니다.
- 단위 테스트: 상태 전환 뒤 선택값, 포커스, 탐색 상태가 유지되는지 확인합니다.
- 배포 빌드: 실제 서명과 배포 설정까지 통과하는지 확인합니다.
Xcode 27 관련 새 기능이나 iOS 27 전용 동작은 문서에 이름이 있다고 바로 고정하지 마십시오. Xcode 27.1 beta의 전용 API와 동작은 정식 공개 뒤 최소 예제 프로젝트에서 다시 확인해야 합니다. 문서의 폐기 표시와 시스템 요구 사항도 함께 검토해야 합니다.
회귀 작업은 어떻게 나누어야 할까?
팀의 현재 목적에 따라 다음처럼 나누면 병목을 줄일 수 있습니다.
| 선택지 | 적합한 작업 | 장점 | 주의할 점 |
|---|---|---|---|
| 개발자 로컬 실행 | 한 화면의 빠른 레이아웃 수정 | 즉시 확인 가능 | 전체 상태를 오래 점유함 |
| 자동화 작업 | 여러 화면의 스냅숏과 단위 테스트 | 반복 검증에 적합함 | 테스트 데이터와 기준 화면이 필요함 |
| 배포 빌드 작업 | 서명, 아카이브, 전달 전 검증 | 출시 조건을 미리 확인함 | 인증서와 비밀 정보 관리가 필요함 |
필요한 개발 환경을 별도로 확장해야 한다면 Xcode 클라우드 개발 환경 배포 안내를 먼저 확인하십시오. 기존 앱의 자동화 회귀를 정리하는 과정은 iOS 다중 기기 회귀 테스트 관련 안내와 함께 보면 작업을 개발자 컴퓨터 한 대에 몰아주지 않는 구조를 설계하기 쉽습니다.
실기기에서만 확인할 경계 조건을 따로 검수합니다
시뮬레이터를 통과한 뒤에는 실기기에서 다음 항목을 확인해야 합니다.
- 손가락으로 실제 버튼과 입력창에 접근할 수 있는지
- 카메라와 사진 선택기 전환 뒤 화면이 올바르게 복귀하는지
- 자세 변화 중 콘텐츠가 갑자기 이동하거나 가려지지 않는지
- 긴 목록과 이미지가 많은 화면에서 스크롤이 끊기지 않는지
- 다른 장면으로 이동한 뒤 포커스와 작성 내용이 유지되는지
- 접힘과 펼침을 반복해도 탐색 경로가 초기화되지 않는지
실기기 검수는 단순한 화면 크기 확인이 아닙니다. 촉각 입력, 센서 변화, 카메라 전환, 멀티태스킹 복귀, 장시간 사용 중 성능은 개발 환경만으로 확정하기 어렵습니다. Apple의 적응형 레이아웃 자료에서 설명하는 상태 전환을 기준으로 하되, 공개되지 않은 동작은 관찰 결과를 문서화하고 추측을 사실처럼 기록하지 마십시오.
출시 차단 항목과 다음 단계로 미룰 항목을 분리하십시오. 콘텐츠 가림, 입력 불가, 탐색 초기화, 충돌은 출시 차단 항목입니다. 여백 조정, 보조 패널의 시각적 개선, 일부 애니메이션 최적화는 조건에 따라 후속 작업으로 둘 수 있습니다.
유지보수 기준을 세우고 장기 분기를 막습니다
개조가 끝난 뒤에는 “iPhone Duo 대응 완료”라는 한 줄보다 코드 규칙을 남겨야 합니다.
| 검토 대상 | 유지해야 할 기준 | 실패하면 생기는 문제 |
|---|---|---|
| 화면 크기 계산 | 전달받은 컨테이너와 장면 경계를 우선함 | 특정 화면에서만 잘못된 여백이 발생함 |
| 기기 분기 | 이름보다 공간 특성과 상태를 사용함 | 새 기기가 나올 때 예외가 누적됨 |
| 화면 상태 | 접힘과 장면 변화 뒤 문맥을 보존함 | 입력 내용과 탐색 위치가 사라짐 |
| 회귀 범위 | iPhone 18 Pro와 iPhone Duo 상태를 함께 실행함 | 새 화면 수정이 기존 사용자 경험을 깨뜨림 |
SwiftUI 화면에는 작은 공간과 넓은 공간의 배치 규칙을 코드 가까이에 설명하고, UIKit 화면에는 trait 변경 때 다시 계산해야 하는 제약 조건을 기록하십시오. 팀원이 다음 화면을 고칠 때 같은 판단을 반복하지 않게 하는 것이 장기 비용을 줄이는 방법입니다.
현재 개발 환경과 Mac 환경을 비교해 선택합니다
| 선택지 | 적합한 상황 | 실제 단점 | 결정 기준 |
|---|---|---|---|
| 기존 개발자 Mac | 한 화면을 빠르게 수정하는 경우 | 다른 빌드와 테스트가 충돌할 수 있음 | 작업량이 작고 일정이 유연할 때 |
| 사내 Mac 서버 | 지속적인 회귀와 배포가 필요한 경우 | 초기 설정, 권한, 유지보수가 필요함 | 장기 운영과 보안 통제가 우선일 때 |
| kvmsync Mac 환경 | 적응 기간에 여러 빌드를 병렬로 실행하는 경우 | 장기 고정 부하에는 비용 구조를 따져야 함 | 단기 확장과 빠른 환경 확보가 우선일 때 |
Windows나 일반 클라우드 서버만으로 이 작업을 장기간 밀어붙이면 Xcode 실행 환경을 별도로 유지해야 하고, 실제 배포 빌드와 시뮬레이터 회귀를 한 흐름으로 관리하기 어렵습니다. 개발자 로컬 Mac 한 대에 모든 작업을 모으면 빌드 대기, 인증서 접근, 테스트 충돌, 장면별 검증 누락이 생기기 쉽습니다.
반대로 장기간 같은 프로젝트를 지속적으로 높은 부하로 빌드하거나 물리 카메라와 특정 주변 기기를 항상 연결해야 한다면 직접 보유한 Mac이 더 적합할 수 있습니다. 하지만 iPhone Duo 적응처럼 일정 기간 여러 상태를 병렬로 확인해야 하는 작업이라면 kvmsync의 Mac 환경을 임시로 추가해 개발자 컴퓨터의 대기 시간을 줄이는 선택이 현실적입니다. 적응 기간에 맞는 환경 범위와 자원 조건은 kvmsync의 한국어 안내에서 확인하십시오.
핵심은 구매 여부가 아니라 작업의 지속 시간과 검증 방식입니다. 고정 크기 제거, SwiftUI와 UIKit의 적응형 전환, 접힘 영역 검수, iPhone 18 Pro 회귀를 순서대로 진행하면 실기기 도착 전에도 상당한 준비를 끝낼 수 있습니다. 반대로 새 기기 이름을 기준으로 화면을 복제하면 일반 iPhone과 iPhone Duo 양쪽의 유지보수 비용이 함께 커집니다.
kvmsync M4 원격 노드
접이식 화면 대응을 위한 맥 개발 환경을 준비하세요
kvmsync의 실제 맥 미니를 원격으로 이용해 새로운 화면 크기와 방향에 맞춘 앱 개발을 진행할 수 있습니다.