๐ ์ด๊ธฐํ์ ๋ํด์
AppDelegate()
init()
AppDelegate๋ฅผ ์ด์ฉํ ์ด๊ธฐํ
์ด ๋ฐฉ๋ฒ์ ์ฌ์ค AppDelegate์ ์ญํ (์ง์ ์ )์ ํ๋ ๊ฒ์ด ๋ฐ๋ก ์กด์ฌํ๊ธฐ ๋๋ฌธ์ ๊ถ์ฅ๋์ง๋ ์๋ ๋ฐฉ๋ฒ์ด๋ค.
@main
struct PushMessageApp: App {
var body: some Scene {
WindowGroup {
ContentView()
}
}
}
์ ์ฝ๋์์ ๋ณด์ด๋ App ํ๋กํ ์ฝ ์์ฒด๊ฐ ์ฑ์ ๊ตฌ์ฑ์ ๋ด๋นํ๋ ๊ตฌ์กฐ์ฒด์ ํ๋กํ ์ฝ์ ์ง์ ํด์ฃผ์ด์ ์ฑ์ ์์(Presenting) ์ง์ ์ ์ ํด์ฃผ๋ ์ญํ ์ ํ๊ฒ ๋๋ค. ๋ํ @main์ ํตํ์ฌ ์ฑ์ด ์์๋๊ณ ๊ฐ์ฅ ๋จผ์ ๋ค์ด๊ฐ์ผํ๋ ๋ถ๋ถ์ ๋ช ์ํด์ฃผ๊ณ ์๊ธฐ ๋๋ฌธ์ AppDelegate๊ฐ ํ์ํ์ง ์๋ค.
๊ทธ๋ฌ๋ ์ฑ์ ์ด๊ธฐํ ์ด์ธ์๋ AppDelegate ํด๋์ค์์ ์ด๋ฃจ์ด์ง๋ ๊ฒ๋ค์ ์ฌ์ฉํ๊ณ ์ถ์๋๊ฐ ์์ ๊ฒ์ด๋ค.
์ด๋ UIApplicationDelegate์ UIApplicationDelegateAdaptor๋ฅผ ์ด์ฉํ์ฌ ์์๋ก AppDelegate๋ฅผ ์์ฑํด์ ์ฌ์ฉํ๋ฉด ๋๋ค.
@main
strcut PushMessageApp: App {
@UIApplicationDeleagteAdaptor(AppDelegate.self) var delegate
let gcmMessageIDKey = "gcm.message_id" // FCM ํต์ ์ ์ํด ํ์ํ Key
var body: some Scene {
WindowGroup {
ContentView()
}
}
}
@UIApplicationDeleagteAdaptor๋ฅผ ํตํด UIKit๊ณผ ๋์ผํ๊ฒ delegate๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ์ค์ ํด์ค๋ค. ์ด ๋ถ๋ถ์ด ์์ด์ผ delegate๋ก ์์์ด ๊ฐ๋ฅํ๋ค.
class AppDelegate: NSObject, UIApplicationDelegate {
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool {
// ์ด๊ธฐํ ๋ถ๋ถ (์ฑ์ด ์คํ๋๊ณ ์ฒ์ ์คํ๋๋ ๋ฉ์๋)
}
...
}
AppDelegate๋ฅผ ์ ์ธํ ๋, NSObject, UIApplicationDelegate ๋ ํ๋กํ ์ฝ์ ์ ์ธํ์ฌ AppDelegate์ ์ญํ ์ ํ ์ ์๊ฒ ๋ง๋ค์ด์ค๋ค.
๊ทธ๋ฆฌ๊ณ ๋ ๋ค์ ๊ธฐ์กด UIKit์์ ์ฌ์ฉํ๋ AppDelegate์ฒ๋ผ ์ฌ์ฉํ๋ฉด ๋๋๊ฒ์ด๋ค. ์ด๊ธฐํ ๋ถ๋ถ์ Push ๊ด๋ จ ํจ์๋ ๋ฉ์๋๋ฑ์ ์ ์ธํ๋ฉด ๋๋ ๊ฒ์ด๋ค. ํธ์ ๊ด๋ จ ์ฝ๋๋ ํ์ด์ด๋ฒ ์ด์ค์ ํด๋ผ์ฐ๋ ๋ฉ์์ง์ ์ฌ์ฉํ๊ธฐ๋๋ฌธ์ ๋ฐ๋ก ์ฝ๋๋ฅผ ๊ฒ์ํ์ง๋ ์๊ฒ ๋ค.
Init()
SwiftUI๋ init()์ ์ฌ์ฉํ ์ ์๊ธฐ ๋๋ฌธ์, AppDelegate๋ฅผ ๋ง๋ค๋ฉด์๊น์ง ๊ตฌํํ ํ์๊ฐ ์๋ค.
@main
struct PushMessageApp: App {
let gcmMessageIDKey = "gcm.message_id"
init() {
// PushService ์ฑ๊ธํค ์ธ์คํด์ค๋ฅผ ์์ฑํ์ฌ ๊ด๋ฆฌ
PushService.shared.initService()
}
var body: some Scene {
WindowGroup {
ContentView()
}
}
}
์ ์ฝ๋์์ ์ฌ์ฉํ Push ๊ด๋ จ ์ด๊ธฐํ๋ ์ฑ๊ธํค์ ์ฌ์ฉํ์ฌ init()์์ ์ด๊ธฐํ ํ ์ ์๊ฒ๋ ์ค์ ํ ๋ฐฉ๋ฒ์ด๋ค.
์ด๋ ๊ฒ ํ๋ฉด ์ฌ์ค ์ ํ์์ ์ํ๋ ๋ฐฉํฅ์ผ๋ก ๊ตฌํํ๊ฒ์ด๋ผ๊ณ ์๊ฐํ๋ค.
์ ์ด์ AppDelegate๋ฅผ ์ฌ์ฉํ์ง๋ง๋ผ๊ณ ์์ด๋๋ฐ, ๋ค์ ๋ง๋๋๊ฒ ์์ฒด๊ฐ ๋ชจ์๊ฐ๋ค.
SwiftUI LifeCycle
@main
struct PushMessageApp: App {
@Environment(\.scenePhase) var scenePhase
var body: some Scene {
WindowGroup {
ContentView()
}.onChange(of: scenePhase) { newScenePhase in
switch newScenePhase {
case .active:
print("active State")
case .background:
print("backgound State")
case .inactive:
print("Inactive State")
default:
print("Default State")
}
}
}
}
iOS 14๋ฒ์ ๋ถํฐ ScenePhase ๋ผ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค.
๊ทธ๋ฆฌ๊ณ SwiftUI์์๋ @Enviroment ์์ฑ ๋ํผ๋ฅผ ์ด์ฉํ์ฌ ๊ฐ์ ๊ฐ์ ธ์ค๊ฒ ๋๋ค.
๊ทธ๋ฆฌ๊ณ onChange() ์์ ์๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ LifeCycle ์ํฉ์ผ๋์ ์์ ์ ์ ์ํ๋ฉด ๋๋ค.
'๐ iOS > SwiftUI' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[SwiftUI] Property Wrapper โก (3) | 2024.03.27 |
---|---|
[SwiftUI] ํ๋กํผํฐ๋ํผ ์ ๋ฆฌ (0) | 2024.03.17 |
[iOS][SwiftUI] @State @Binding (1) | 2024.01.07 |
[iOS][SwiftUI] Save Color in UserDefaults (0) | 2024.01.01 |
[iOS][SwiftUI] @main @UIApplicationMain (0) | 2023.12.28 |