-
[SwiftUI] AppDelegate 를 대신해 모듈을 초기화 하는 방법👻 iOS 2021. 1. 13. 17:02
SwiftUI가 있다는 것만 알았지 써보는건 처음입니다;;
대충 써보고 React 같은 느낌이기도 했는데
React와 UIKit 에 익숙한 저는 편하면서도 불편한 묘한 느낌이네요 ㅋㅋ
AppDelegate 에 앱 실행 시 최초 1회 실행을 보장해야 하는 경우, 예를들어 Firebase 초기화 라던가..
아무튼 그런 1회성 호출이 UIKit 에서는 AppDelegate에서 아래와 같았어요.
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { ... FirebaseApp.configure() ... }
그런데 SwiftUI 에서는 AppDelegate 도 없어지고 SceneDelegate 라는 것도 없어졌네요 (SceneDelegate는 알기도 전에 사라지네요)
당췌 어떻게 초기화 해야하는건지 모르겠는데 막상 구글링을 하려고 해도 쉽지 않더라고요
헤매다가 두 가지 방법을 찾았는데 잊지 않기 위해서 정리해 봅니다.
1. AppDelegate 를 임의로 셋팅하기
import SwiftUI import UIKit class AppDelegate: NSObject, UIApplicationDelegate { func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool { ... FirebaseApp.configure() ... return true } } @main struct SwiftUITest: App { @UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate var body: some Scene { WindowGroup { ContentView() } } }
이건.. 음.. 애플은 쓰지 말라고 AppDelegate를 없앴는데.... 이런 방식은 애플의 의도와 다르게 쓰는것 같아요.
정말 이렇게 말고는 답이 없을때에만 써야할 듯.
2. init() 활용
import SwiftUI import Firebase @main struct SwiftUITest: App { init() { FirebaseApp.configure() } var body: some Scene { WindowGroup { ContentView() } } }
하악하악.. 이거지
왜 init 을 생각하지 못했을까요?
SwiftUI의 간결한 단면을 잘 보여준것 같아요!