일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- traits
- 타임라인 포맷팅
- swift concurrency
- reactorkit
- SWIFT
- swift 점선
- domain data
- rxdatasources
- DP
- scene delegate
- swift dashed line
- swift custom ui
- identifiable
- RxSwift
- custombottomsheet
- uikit toast
- swift bottomsheet
- BFS
- custom ui
- swift navigationcontroller
- task cancellation
- claen architecture
- task cancel
- 버튼 피드백
- Tuist
- custom navigation bar
- button configuration
- UIKit
- swift 백준
- coordinator
- Today
- Total
김경록의 앱 개발 여정
[Swift] iOS 18.4 를 앞두고 알아야 할 SceneDelegate 기반 앱 구조 전환 본문
iOS 앱 개발자라면 누구나 익숙한 AppDelegate 방식. 앱 생명주기의 중심이었죠.
그런데 이제는… Apple이 SceneDelegate를 강제하려고 합니다.
정말 AppDelegate는 사라지는 걸까요?
그리고 우리는 지금 무엇을 준비해야 할까요?
🌀 SceneDelegate가 뭐길래?
iOS 13부터 도입된 Scene 기반 Life Cycle은 앱을 하나 이상의 "Scene"으로 나누어 관리할 수 있게 해줍니다.
간단히 말하면, 앱의 UI 상태를 독립적으로 관리할 수 있는 구조죠.
예를 들어 iPad에서 여러 개의 앱 창(윈도우)을 동시에 띄울 수 있는 것도 Scene 구조 덕분입니다.
🔥 그런데 왜 지금 이렇게 중요한가?
Apple은 iOS 18.4부터 다음 조건을 강제합니다
✅ Info.plist에 UIApplicationSceneManifest 키가 반드시 있어야 함
✅ 앱은 최소 하나 이상의 UIScene을 선언해야 함
즉, SceneDelegate를 도입하지 않으면 앱이 실행되지 않을 수 있습니다
🛠️ 기존 프로젝트는 어떻게 해야 할까?
1. SceneDelegate.swift 파일 추가
class SceneDelegate: UIResponder, UIWindowSceneDelegate {
var window: UIWindow?
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
// UIWindow 설정 및 초기 뷰컨트롤러 연결
}
}
2. Info.plist에 Scene 설정 추가
3. AppDelegate.swift 정리
application(_:configurationForConnecting:) 메서드를 구현해 Scene을 구성합니다.
✨ SwiftUI는 이미 Scene 기반
SwiftUI 앱은 이미 @main과 WindowGroup 등을 통해 Scene 구조를 사용 중입니다.
따라서 SwiftUI 앱이라면 걱정할 필요는 없습니다. 다만 일부 UIKit 연동 시 Scene 구조를 명확히 이해해 두는 것이 좋습니다.
SwiftUI의 표준화는 좀 더 걸릴거라고 생각중이었는데 이것도..?
✅ 마무리: 지금 바로 점검하자
이제 더 이상 SceneDelegate는 선택이 아닙니다.
- SceneDelegate.swift 도입
- Info.plist에 SceneManifest 설정
- AppDelegate에서 역할 분리
🚀 아래 문서 원문에서 더 자세한 내용을 다루고 있습니다 마이그레이션 가이드 또한 제공하니 확인하세요
'TIL' 카테고리의 다른 글
[Swift UIKit] CornerRadius 적용시 의문점 정리 (1) | 2025.05.19 |
---|---|
[Swift Concurrency] 구조적 동시성의 취소(feat: 명시,암시적 취소전파) (0) | 2025.04.18 |
[Swift Concurrency] Task의 취소 (0) | 2025.04.18 |
[Swift Concurrency] Structured Concurrency 구조적 동시성 (0) | 2025.04.15 |
[Swift] Identifiable (0) | 2025.03.28 |