iOS 12 ์ด์ ์ appDelegate์ ์ญํ
1. ํ๋์ ์ฑ์ ํ๋์ window๊ฐ ์กด์ฌ!
iOS 13 ์ดํ์ appDelegate์ scenceDelegate์ ์ญํ
1. window ๊ฐ๋ ์ด scene์ผ๋ก ๋์ฒด๋๊ณ ํ๋์ ์ฑ์ ์ฌ๋ฌ scene์ ๊ฐ์ง์ ์๊ฒ ๋์๋ค.
2. UILifecycle์ ๋์ด์ ApplDelegate์์ ๊ด๋ฆฌํ์ง ์๋๋ค.
3. AppDelegate์ Session Lifecycle ์ญํ ์ด ์ถ๊ฐ๋์๋ค.
Scene Session์ด ์์ฑ(created)๋๊ฑฐ๋ ์ญ์ (discarded)๋ ๋ Appdelegate์ ์๋ฆฌ๋ ๋ฉ์๋(Scene Session)๊ฐ ์ถ๊ฐ๋์๋ค.
Scene Session์ ์ฑ์์ ์์ฑํ ๋ชจ๋ scene์ ์ ๋ณด๋ฅผ ๊ด๋ฆฌํ๋ค.
Scene์ด๋?
๊ธฐ์กด์ window ๊ฐ๋ ์์ ํ์ฅ๋ ๋ฒ์ ์ธ๊ฑฐ ๊ฐ๋ค. ๊ธฐ์กด ์ฑ์ window ํ๋๋ฐ์ ๊ฐ์ง์ง ๋ชปํ์ผ๋ ๋ฉํฐ ๋ทฐ๊ฐ ๊ฐ๋ฅํด์ก๊ธฐ ๋๋ฌธ!
app switcher๋ฅผ ํตํด ์ฌ๋ฌ scene์ ํ์ธํ ์ ์๋ค.
Scene์๋ UI ํ๋์ ์ธ์คํด์ค๋ฅผ ๋ํ๋ด๋ window์ viewController๊ฐ ๋ค์ด์๋ค.
Scene๋ค์ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ์ ์ฑ ํ๋ก์ธ์ค ๊ณต๊ฐ์ ๊ณต์ ํ๋ฉฐ ์๋ก ๋์์ ์คํ๋๋ค.
Scene Session์ด๋?
scene ๊ณ ์ ์ ๋ฐํ์ ์ธ์คํด์ค๋ฅผ ๊ด๋ฆฌํ๋ค. ์ฌ์ฉ์๊ฐ ์ฑ์ ์๋ก์ด scene์ ์ถ๊ฐํ๊ฑฐ๋ ํ๋ก๊ทธ๋๋ฐ์ ์ผ๋ก scene ์์ฒญํ๋ฉด ์์คํ ์ ๊ทธ scene์ ์ถ์ ํ๋ session๊ฐ์ฒด๋ฅผ ์์ฑํ๋ค. ๊ทธ session์ ๊ณ ์ ์๋ณ์์ scene์ ๊ตฌ์ฑ ์ธ๋ถ์ฌํญ์ด ๋ค์ด์๋ค.
uikit๋ session ์ ๋ณด๋ฅผ ๊ทธ scene ์์ฒด์ ์์ ๋์ ์ ์งํ๊ณ app switcher์์ ์ฌ์ฉ์๊ฐ ๊ทธ scene์ ํด๋ก์งํ๋ ๊ฒ์ ๋์ํ์ฌ ๊ทธ session์ ํ๊ดดํ๋ค. session๊ฐ์ฒด๋ ์ง์ ์์ฑํ์ง ์๊ณ uikit๊ฐ ์ฑ์ ์ฌ์ฉ์ ์ธํฐํ์ด์ค์ ๋์ํ์ฌ ์์ฑ๋๋ค.
appDelegate๊ฐ ํ๋ ์ผ
์ฐ์ appDelegate.swift๋ฅผ ์ดํด๋ณด์
class AppDelegate: UIResponder, UIApplicationDelegate {
...
}
UIApplicationDelegate๋ฅผ ํ๋กํ ์ฝ๋ก ์ฑํํ๊ณ ์๋ค.
์์ ์ฑ์ ์๋ช ์ฃผ๊ธฐ์ ๊ด๋ จ๋ ๋ฉ์๋๋ค์ ๋ณด๋ฉด
didFinishLaunchingWithOptions
//์ ํ๋ฆฌ์ผ์ด์
์ด ์คํ๋ ์งํ ์ฌ์ฉ์์ ํ๋ฉด์ ๋ณด์ฌ์ง๊ธฐ ์ง์ ์ ํธ์ถ
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool
willFinishLaunchingWithOptions
//์ ํ๋ฆฌ์ผ์ด์
์ด ์ต์ด ์คํ๋ ๋ ํธ์ถ๋๋ ๋ฉ์๋
func application(_ application: UIApplication, willFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool
applicationWillResignActive
//์ ํ๋ฆฌ์ผ์ด์
์ด InActive ์ํ๋ก ์ ํ๋๊ธฐ ์ง์ ์ ํธ์ถ
func applicationWillResignActive(_ application: UIApplication)
applicationDidEnterBackground
//์ ํ๋ฆฌ์ผ์ด์
์ด ๋ฐฑ๊ทธ๋ผ์ด๋ ์ํ๋ก ์ ํ๋ ์งํ ํธ์ถ
func applicationDidEnterBackground(_ application: UIApplication)
applicationWillEnterForeground
//์ ํ๋ฆฌ์ผ์ด์
์ด Active ์ํ๊ฐ ๋๊ธฐ ์ง์ , ํ๋ฉด์ ๋ณด์ฌ์ง๊ธฐ ์ง์ ์ ํธ์ถ
func applicationWillEnterForeground(_ application: UIApplication)
applicationDidBecomeActive
//์ ํ๋ฆฌ์ผ์ด์
์ด Active ์ํ๋ก ์ ํ๋ ์งํ ํธ์ถ
func applicationDidBecomeActive(_ application: UIApplication)
applicationWillTerminate
//์ ํ๋ฆฌ์ผ์ด์
์ด ์ข
๋ฃ๋๊ธฐ ์ง์ ์ ํธ์ถ
func applicationWillTerminate(_ application: UIApplication)
์ด ๋ฉ์๋๋ค์ ์ฑ์ ์ํ ๋ณํ์ ๊ดํ ๋ฉ์๋๋ค์ด๋ค.
UIApplicationDelegate ํ๋กํ ์ฝ ๋ด์ ๋ค์ด์์ผ๋ฉฐ ์ด๋ฅผ AppDelegate๊ฐ ํ๋กํ ์ฝ๋ก ์ฑํํ๊ณ ์๋ค. ์ฆ ์ฑ ์ํ ๋ณํ์ ๊ดํ ์์ ๋ค์ ์ฑ ์ ๋ฐ์ ์ธ ๋ถ๋ถ์ ๊ด์ฌํ๋ Appdelegate ๊ฐ์ฒด์๊ฒ ์๋ฆด ์ ์๋๋ก ์ํธ์์ฉํ๊ณ ์๋ค. ์ฌ๊ธฐ๊น์ง๋ ์ํ๋ณํ๋ฅผ ๊ด๋ฆฌํ๋ UIApplicationDelegate์ ์ฑ ์ ๋ฐ์ ๋ถ๋ถ์ ๊ด์ฌํ๋ Appdelegate์ ๊ดํ ๊ด๊ณ์ด๋ค.
์์์๋ ๋ณด์๋ค์ํผ ios 13์ดํ์๋ app ๊ธฐ๋ฐ -> scene ๊ธฐ๋ฐ์ผ๋ก ํ์ฅ๋์๋๋ฐ
์ด์๋ํ UIApplicationDelegate์ด ์ํํ๋ ์ฑ์ ์๋ช ์ฃผ๊ธฐ์ ๋ํด App ๊ธฐ๋ฐ๊ณผ Scene๊ธฐ๋ฐ์ ๊ฐ๊ฐ ์ดํด๋ณด๊ณ ๊ทธ ์ฐจ์ด์ ์ ๋ํ AppDelegate์ Session LifeCycle์ด ์ถ๊ฐ๋ ์ด์ ์ SceneDelegate์ UILifeCycle์ด ์ถ๊ฐ๋ ์ด์ ๋ฅผ ์ฐพ์๋ณด์
1) ios 12 ์ด์ - ์ฑ ๊ธฐ๋ฐ ๋ผ์ดํ ์ฌ์ดํด ์ด๋ฒคํธ
- iOS 12 ๋ฐ ์ด์ ๋ฒ์ ์์๋ UIApplicationDelegate ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ์ฌ ์๋ช ์ฃผ๊ธฐ ์ด๋ฒคํธ์ ์๋ตํ๋ค.
AppDelegate๋ ๋ณ๋ ํ๋ฉด์ ํ์๋ ์ฐฝ์ ํฌํจํ์ฌ ๋ชจ๋ ์ฑ์ ์ฐฝ์ ๊ด๋ฆฌํ๋ ์ญํ ์ ์ํํ๋ฉฐ ๋ฐ๋ผ์ ์ฑ์ ์ํ ์ ํ์ ๋ฐ๋ผ ์ฑ ์ ์ฒด์ UI๊ฐ ๋ฐ๋๋๋ก ์ํธ์์ฉํ๋ค.
์คํ ํ UI๊ฐ ํ๋ฉด์ ํ์๋ ์ง ์ฌ๋ถ์ ๋ฐ๋ผ์ ์์คํ ์ด ์ฑ์ ๋นํ์ฑ์ํ ๋๋ ๋ฐฑ๊ทธ๋ผ์ด๋์ํ๋ก ์ ํํ๋ค.
foreground ๋ก ์์ํ ๋ ์์คํ ์ ์ฑ์ ์๋์ผ๋ก active ์ํ๋ก ์ ํํ๋ค.
๊ทธ ํ์ ์ํ๋ ์ฑ์ด ์ข ๋ฃ๋ ๋๊น์ง ํ์ฑ/ ๋นํ์ฑ/ ๋ฐฑ๊ทธ๋ผ์ด๋๋ก๋ง ๋ณํ๋ค.
- not running - ์์ง ์คํํ์ง ์๋ ์ํ์ด๊ฑฐ๋ ์คํ์ค์ธ๋ฐ ์์คํ ์ ์ํด ์ข ๋ฃ๋ ์ํ
- inActive - ์ฑ์ด foreground ์ํ๋ก ๋์๊ฐ์ง๋ง ์ด๋ฒคํธ๋ ๋ฐ์ง ์๋ ์ํ, ์ฑ์ ์ํ ์ ํ ๊ณผ์ ์์ ์ ๊น ๋จธ๋ฌด๋ ๋จ๊ณ
- Active - ์ด๋ฒคํธ๋ฅผ ๋ฐ๋ ๋จ๊ณ/ ์ผ๋ฐ์ ์ผ๋ก ์ฑ์ด ๋์๊ฐ๋ ์ํ
- background - ์ฑ์ด suspended๋ก ์ง์ ํ๊ธฐ ์ ์ํ, ์์ ํ๋ ์ค (์ฌ์ค์ ์ฑ์ ์ข ๋ฃ) ๋๋ถ๋ถ ์ฑ์ suspended์ํ๋ก ์ดํํ๋ ๋์ค์ ์ผ์์ ์ผ๋ก ์ด ์ํ์ ์ง์ ํ์ง๋ง ํ์ผ ๋ค์ด๋ก๋, ์ ๋ก๋ ๋ฑ ํน์ ์๊ฐ๋์ ์ด ์ํ๋ก ๋จ์์๊ฒ ๋๋ ๊ฒฝ์ฐ๋ ์์
- suspended - ์ฑ์ด background ์ํ์ ์์ง๋ง ์๋ฌด ์ฝ๋๋ ์คํํ์ง ์๋ ์ํ, ์์คํ ์ด ์์๋ก background ์ํ์ ์ฑ์ suspended ์ํ๋ก ๋ง๋ ๋ค. (not running)
2) iOS 13 ์ดํ - ์ฌ ๊ธฐ๋ฐ ๋ผ์ดํ ์ฌ์ดํด ์ด๋ฒคํธ
- iOS 13 ์ด์์์๋ UISceneDelegate ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ์ฌ ์ฅ๋ฉด ๊ธฐ๋ฐ ์ฑ์ ์๋ช ์ฃผ๊ธฐ ์ด๋ฒคํธ์ ์๋ตํ๋ค.
SceneDelegate๊ฐ ํ๋ ์ผ
์ฑ ์๋ช ์ฃผ๊ธฐ์ ๊ด์ฌํ๋ ์ญํ ์ sceneDelegate๊ฐ ๋ ๋งก๊ฒ ๋์๋ค ! ๋ฐ๋ผ์ ์ฌ ๊ธฐ๋ฐ ๋ผ์ดํ ์ฌ์ดํด์ ๋ด๋นํ๋ค.
sceneDelegate.swift์ ์๋ ๋ฉ์๋๋ค์ ๋ํด ํ๋์ฉ ์ดํด๋ณด์
class SceneDelegate: UIResponder, UIWindowSceneDelegate {
...
}
์ฐ์ SceneDelegate๋ UIWindowSceneDelegate ํ๋กํ ์ฝ์ ์ฑํํ๊ณ ์๊ณ ์ฌ๊ธฐ์ ์ด๋ฆ์ผ๋ก ์ ์ถํ ์ ์๋ฏ์ด window ํ๋ฉด ๊ทธ๋ฆฌ๋๋ฐ ๊ด๋ จ๋ ์์ ์ ์ํํ๋ ๊ฒ์ ์ ์ ์๋ค.
willConnectTo
//iOS 12์ application (_ : didFinishLaunchingWithOptions :) ๊ฐ์ ๊ธฐ๋ฅ
// scene์ด ์ฑ์ ์ถ๊ฐ๋ ๋ ํธ์ถ
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions)
sceneDidDisconnect
//scene์ ์ฐ๊ฒฐ์ด ํด์ ๋ ๋ ํธ์ถ
func sceneDidDisconnect(_ scene: UIScene)
sceneDidBecomeActive
//app switcher์์ ์ ํ๋๋ฉด inActive ์ํ์์ active์ํ๋ก ์ ํ
func sceneDidBecomeActive(_ scene: UIScene)
sceneWillResignActive
//active์ํ์์ inactive๋ก ์ ํ์
func sceneWillResignActive(_ scene: UIScene)
sceneWillEnterForeground
//background์์ foreground๋ก ์ ํ์
func sceneWillEnterForeground(_ scene: UIScene)
sceneDidEnterBackground
//foreground์์ backgRound๋ก ์ ํ์
func sceneDidEnterBackground(_ scene: UIScene)
์ฑ์ด scene์ ์ง์ํ๋ฉด์ uikit๋ ๋ชจ๋ ๋ผ์ดํ ์ฌ์ดํด ์ด๋ฒคํธ๋ฅผ UIapplicationDelegate๋ก ์ ๋ฌํ๋ ๊ฒ์ด ์๋๋ผ ๊ฐ๊ฐ์ ๋ํด ๋ณ๋ ๋ผ์ดํ ์ฌ์ดํด์ ์ ๊ณตํ๋๋ก ํ๋ค.
scene์ ๊ธฐ๊ธฐ์์ ์คํ ์ค์ธ ์ฑ UI์ ํ ์ธ์คํด์ค๋ก ์ ์ ๋ ๊ฐ ์ฑ์ ๋ํด ์ฌ๋ฌ scene์ ๋ง๋ค๊ณ ์ด๋ฅผ ๊ฐ๋ณ์ ์ผ๋ก ํ์ํ๊ฑฐ๋ ์จ๊ธธ ์ ์๋ค.
๊ฐ scene๋ง๋ค ๊ณ ์ ํ ๋ผ์ดํ์ฌ์ดํด์ด ์๊ธฐ ๋๋ฌธ์ ๊ฐ scene๋ง๋ค ๋ค๋ฅธ ์คํ ์ํ๊ฐ ๋ ์ ์๋ค.
1. Unattached : ์ ์ ๋ ์์คํ ์ด ์ฑ์ ์๋ก์ด scene์ ์์ฒญํ๋ฉด UIKit์ ์ด๋ฅผ ์์ฑํ๊ณ ์ฐ๊ฒฐ๋์ง ์์ ์ํ๋ก ๋๋ค.
2. Forground Inactive/ Active : ์ฌ์ฉ์๊ฐ ์์ฒญํ๋ Scene์ ๋น ๋ฅด๊ฒ foreground๋ก ์ด๋ํ๋ค.
3. Background : ์์คํ ์ด ์์ฒญํ Scene์ ์ด๋ฒคํธ๋ฅผ ์ฒ๋ฆฌํ ์ ์๋๋ก background๋ก ์ด๋ํ๋ค.
4. Suspended : ์ ์ ๊ฐ ์ฑ์ ๋ซ์ผ๋ฉด UIKit์ ๊ด๋ จ scene์ ๋ฐฑ๊ทธ๋ผ์ด๋ ์ํ๋ก ์ด๋ํ๊ณ ๊ฒฐ๊ตญ suspended ๋ฉ๋๋ค.
์ฆ ์ฌ์ฉ์๊ฐ ์ฑ์ UI๋ฅผ ํด์ ํ๋ฉด UIKit์ ์ฐ๊ฒฐ๋ ์ฅ๋ฉด์ background ์ํ๋ก, ๊ฒฐ๊ตญ์๋ suspended ์ํ๋ก ์ ํํ๋ค. UIKit์ ์ธ์ ๋ ์ง background ๋๋ suspended๋ Scene์ ์ฐ๊ฒฐ์ ๋์ด Scene์ ์ฐ๊ฒฐ๋์ง ์์ ์ํ๋ก ๋๋๋ฆด ์ ์๋ค.
Scene์ ๊ฐ๋ ๋๋ถ์ AppDelegate์ configurationForConnecting์ didDiscardSceneSessions ๋ฉ์๋๋ฅผ ํ์๋ก ๊ตฌํํด์ผํ๋ค.
configurationForConnecting
//์ Scenea ๋ง๋ค๋ UIKit๋ฅผ ์ํ configuration data๋ฅผ ๊ฐ์ ธ์จ๋ค.
optional func application(_ application: UIApplication,
configurationForConnecting connectingSceneSession: UISceneSession,
options: UIScene.ConnectionOptions) -> UISceneConfiguration
didDiscardSceneSessions
//์ฌ์ฉ์๊ฐ app switcher์์ ํ๋ ์ด์์ ์ฑ Scene์ ๋ซ์์์ Appdelegate์๊ฒ ์ ๋ฌ
optional func application(_ application: UIApplication,
didDiscardSceneSessions sceneSessions: Set<UISceneSession>)
์ด์ ์ผ ์ฑ์ ์ ๋ฐ์ ์ธ ํ๋ก์ธ์ค๋ฅผ ๊ณต๋ถํ๋ค๋ ..
์ดํดํ๊ธฐ ์ด๋ ค์ ์ฌ๋ฌ ๋ธ๋ก๊ทธ๋ค์ ๋ง์ด ์ฐธ๊ณ ํ๋ค. ์กฐ๊ธ์ ์๊ฒ ๊ฐ๊ธฐ๋ ํ๊ณ ๋ด์ผ ๋ ๋ด์ผ๊ฒ ์ง๋ง ์ง๊ธ ๋๋ผ๋ ๋ฐ๋ก๋ ๊ฐ๊ฐ์ ์ญํ ์ ๋ง๊ฒ๋ ๋ถ๋ด๋์ด ์๋ก์ ์์น์ delegate๋ฅผ ํตํด ์ํธ์์ฉํ๊ณ ์ ํ๊ณ ์๊ตฌ๋ ์ ๋ ์๊ฒ ๊ฐ๋ค.
์ฐธ๊ณ ์๋ฃ
๊ณต์ ๋ฌธ์
developer.apple.com/documentation/uikit/app_and_environment/managing_your_app_s_life_cycle
๋ธ๋ก๊ทธ
shoveller.tistory.com/entry/App-and-Scenes
medium.com/@jgj455/์ค๋์-swift-์์-์ฑ-์๋ช ์ฃผ๊ธฐ-878dfe51d182
'IOS๐ > iOS+Swift' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[iOS] Layout ์ ๋ฆฌ (0) | 2021.04.27 |
---|---|
[iOS] UIScene, UIWindowScene, UISceneSession (0) | 2021.04.16 |
[Swift] Closure์ ๋ํด ์์๋ด ์๋ค. (0) | 2021.04.16 |
[iOS] Notification๊ณผ NotificationCenter (0) | 2021.04.16 |
[Swift] Property - stored, computed, type / Observer (0) | 2021.04.13 |
๋๊ธ