iOS

SceneDelegate를 제거하는 방법

Phililip
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