iOS 13 이후 SceneDelegate가 도입되면서 UIWindow를 설정하는 방식이 훨씬 간결하고 명확해졌습니다.
이전 방식과 최신 방식을 비교하며 UIWindow 설정의 핵심을 정리해 드립니다.
💡 핵심 변화: frame 설정이 사라지다!
과거에는 윈도우의 크기를 직접 지정해야 했지만,
이제는 윈도우가 속할 Scene만 지정해 주면 시스템이 모든 것을 알아서 처리해 줍니다.
1. 이전 방식: 번거로운 2단계 설정
SceneDelegate에서 윈도우를 설정할 때, iOS 13 이전의 관습대로 다음 두 단계를 거쳤습니다.
크기 설정 (frame:)
window = UIWindow(frame: windowScene.coordinateSpace.bounds)
👉 frame: 을 사용해 윈도우의 크기를 현재 화면 전체(bounds)로 지정해야 했습니다.
Scene 수동 연결
window?.windowScene = windowScene
👉 윈도우를 생성한 후, 이 윈도우가 어떤 Scene에 속하는지 명시적으로 연결해 줘야 했습니다.
이 두 코드는 모두 필수적이었지만, windowScene의 경계에 윈도우를 만들 거라면
굳이 frame을 수동으로 지정할 필요가 없다는 의문이 있었습니다.
2. 최신 방식: UIWindow(windowScene:)으로 간결하게! 🎉
iOS 13 이후, Apple은 이 과정을 하나로 합친 새로운 초기화 메서드를 제공했습니다.
guard let windowScene = (scene as? UIWindowScene) else { return }
// 🌟 단 한 줄로 끝!
window = UIWindow(windowScene: windowScene)
이 한 줄의 코드는 이전의 두 가지 필수 작업을 동시에 처리합니다
🔑 요약: 코드가 개선된 이유
UIWindow(windowScene:)는 iOS Scene 기반 구조에 최적화된 초기화 방식입니다.
시스템이 윈도우가 속한 Scene을 인지하고 자동으로 크기를 관리하도록 함으로써,
특히 iPad의 멀티태스킹 환경에서 윈도우의 수명 주기와 크기 조정(Resizing)을
더 정확하고 안정적으로 처리할 수 있게 됩니다.
📝 최종 SceneDelegate 설정 (예시)
결론적으로, SceneDelegate에서 프로그래밍 방식으로 UI를 설정하는 가장 깔끔한 방법은 다음과 같습니다.
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
// 1. Scene 가져오기 (필수)
guard let windowScene = (scene as? UIWindowScene) else { return }
// 2. 윈도우 생성 및 Scene 연결 (✨ 최신 방식)
window = UIWindow(windowScene: windowScene)
// 3. 루트 뷰 컨트롤러 설정
let rootVC = ViewController()
let navigationController = UINavigationController(rootViewController: rootVC)
self.window?.rootViewController = navigationController
// 4. 화면에 표시 (필수)
window?.makeKeyAndVisible()
}'감정일기(가칭)' 카테고리의 다른 글
| 🧩 [1편] Git 커밋 메시지 작성 가이드 (0) | 2025.10.14 |
|---|---|
| 🍋 LemonLog App Store Connect 카테고리 설정 가이드 (0) | 2025.10.14 |
| 🚀 Xcode 프로젝트와 GitHub 원격 저장소 연결 및 병합 오류 해결 완전 가이드 (0) | 2025.10.13 |
| 🍋 MIT License 적용 후 앱스토어 출시 시 주의사항 및 변경 가이드 (0) | 2025.10.13 |
| 🧩 Xcode 새 프로젝트 생성 시 “Testing System”은 무엇을 선택해야 할까? (0) | 2025.10.12 |