728x90
Xcode 11부터 iOS 프로젝트를 생성하면 기본적으로 SceneDelegate가 적용된 템플릿이 생성됩니다.
이번 글에서는 SceneDelegate를 사용하지 않도록 설정하는 방법에 대해 알아보겠습니다.
#1 프로젝트 생성
iOS App으로 기본 프로젝트를 생성하면, SceneDelegate가 생성된 것을 볼 수 있습니다.
Main.storyboard에 간단한 라벨을 추가하고 빌드 해봅시다.
기본 상태에서 잘 나오는 것을 확인했으니 이제 SceneDelegate를 제거하는 작업을 해봅시다.
#2 SceneDelegate 제거
우선 제일 먼저 보이는 SceneDelegate.swift 파일을 삭제합니다.
그 이후에 AppDelegate.swift로 가서 UISceneSession Lifecycle을 지워줍니다.
- application(_:configurationForConnecting:options:)
- application(_:didDiscardSceneSessions:)
Info 탭으로 가서 Application Scene Manifest도 지워주세요.
이 상태로 빌드 해봅시다.
검정 화면만 나오고 로그에는 이런 말이 출력되고 있습니다.
[Application] The app delegate must implement the window property if it wants to use a main storyboard file.
window 프로퍼티를 구현하라? 라는 말이 보입니다.
(아하.. 스토리보드를 사용하려면 window 프로퍼티가 있어야 하는데 그게 없어서 검정 화면이 나왔네요.)
음... 그럼 기존에 SceneDelegate에서는 왜 정상적으로 출력이 되었을까 봤더니
class SceneDelegate: UIResponder, UIWindowSceneDelegate {
var window: UIWindow?
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
guard let _ = (scene as? UIWindowScene) else { return }
}
func sceneDidDisconnect(_ scene: UIScene) {
// ...
}
func sceneDidBecomeActive(_ scene: UIScene) {
// ...
}
func sceneWillResignActive(_ scene: UIScene) {
// ...
}
func sceneWillEnterForeground(_ scene: UIScene) {
// ...
}
func sceneDidEnterBackground(_ scene: UIScene) {
// ...
}
}
SceneDelegate.swift에서도 window 프로퍼티를 구현해두었군요!!
AppDelegate에 window 프로퍼티를 추가 후에 정상적으로 출력된 것을 볼 수 있습니다.
import UIKit
@main
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow? // window 프로퍼티 추가
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
return true
}
}
반응형
'iOS' 카테고리의 다른 글
[오픈소스] Bagbutik (0) | 2022.03.28 |
---|---|
mailto scheme과 기본 메일 앱 설정 (0) | 2022.03.23 |
TabulaData framework (0) | 2022.03.09 |
[오픈소스] CustomDump 소개 (0) | 2022.02.24 |
Swift Package 의존성 추가, 생성, 배포 방법 (0) | 2022.02.24 |