์๋ ํ์ธ์~
์ค๋์ App Lifecycle์ ๋ํด์ ์ ๋ฆฌํ๋ ค๊ณ ํฉ๋๋ค.
๊ฐ์ฅ ๋จผ์ ์์๋์ด์ผ ํ ๊ฒ์ด ์์ต๋๋ค.
1. iOS 12์ ๊ทธ ์ด์ ๋ฒ์ ์์๋ UIApplicationDelegate ๊ฐ์ฒด๋ฅผ ํตํด์ ๋ผ์ดํ ์ฌ์ดํด ์ด๋ฒคํธ์ ๋์ํฉ๋๋ค.
2. iOS 13๋ถํฐ๋ Scene-based ์ฑ์์๋ UISceneDelegate ๊ฐ์ฒด๋ฅผ ํตํด์ ๋ผ์ดํ ์ฌ์ดํด ์ด๋ฒคํธ์ ๋์ํฉ๋๋ค.
ํ์ฌ iOS 12 ์ดํ์ ๋ฒ์ ์ ๊ฑฐ์ ์ฌ์ฉ๋์ง ์๊ณ ์๊ธฐ ๋๋ฌธ์
Scene์ ์ด์ ์ ๋ง์ถฐ ์ ๋ฆฌํด ๋ณด๊ฒ ์ต๋๋ค.
1. App Lifecycle (์ฑ์ ์๋ช ์ฃผ๊ธฐ)
์ฑ์ด ์คํ๋๋ฉด, ์์คํ ์ SceneDelegate๋ฅผ ํตํด SceneSession์ ์์ฑํ๊ณ
SceneSession์ ์ฑ์ ๊ฐ๊ฐ์ Scene๊ณผ ์ฐ๊ฒฐ๋๋ฉฐ, SceneDelegate๋ SceneSession์ Configuration์ ์ฒ๋ฆฌํฉ๋๋ค.
์ดํ Scene๊ณผ Window๊ฐ ์ฐ๊ฒฐ๋๊ณ , SceneDelegate๋ Scene์ ๋ผ์ดํ์ฌ์ดํด์ ์ถ์ ํฉ๋๋ค. ( ์ฌ๊ธฐ์ ๋งํ๋ Scene์ ์ฑ UI์ ์ธ์คํด์ค ํ๋๋ฅผ ์๋ฏธํฉ๋๋ค. )
SceneDelegate๋ฅผ ์ฌ์ฉํ์ฌ iOS ์ฑ์ ๋ผ์ดํ์ฌ์ดํด์ ๊ด๋ฆฌํ๋ฉด, Appdelegate๋ฅผ ์ฌ์ฉํ ๋๋ณด๋ค ๋์ฑ ์ธ๋ฐํ๊ฒ ๋ผ์ดํ์ฌ์ดํด์ ๊ด๋ฆฌํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ์ฌ๋ฌ ๊ฐ์ Scene์ ๋ค๋ฃจ๋ ๋ค์ค Scene ์ฑ์ ๋ง๋ค ๊ฒฝ์ฐ, SceneDelegate๋ฅผ ์ด์ฉํ์ฌ ๊ฐ Scene์ ๋ผ์ดํ์ฌ์ดํด์ ๊ฐ๋ณ์ ์ผ๋ก ๊ด๋ฆฌํ ์ ์์ต๋๋ค.
โป ์ฐธ๊ณ ์ฌํญ
๋ค์ค Scene์ ๊ฒฝ์ฐ, opt-in ๊ธฐ๋ฅ์ผ๋ก ์ค์ ์ ํด์ฃผ์ด์ผ ์ฌ์ฉ์ด ๊ฐ๋ฅํฉ๋๋ค.
๋ฐ๋ผ์ ๊ธฐ๋ณธ ์ค์ ์ ํ์ฑํํ๊ธฐ ์ํด์๋ info.plist์์ ์๋์ ํด๋นํ๋ ์ค๋ช ์ ๋ฐ๋ผ ์ค์ ํด์ผ ํฉ๋๋ค.
1. Xcode ํ๋ก์ ํธ๋ฅผ ์ฝ๋๋ค.
2. ์ค์ ์ผ๋ก ์ด๋( App Target )
3. Supports multiple windows๋ฅผ ์ฒดํฌํฉ๋๋ค.
2. SceneDelegate๋ฅผ ์ฌ์ฉํด Lifecycle์ ๊ด๋ฆฌํ๋ ๋ฐฉ๋ฒ
SceneDelegate๋ฅผ ์ฌ์ฉํ์ฌ iOS ์ฑ์ ๋ผ์ดํ์ฌ์ดํด์ ๊ด๋ฆฌํ๋ ค๋ฉด, ๋ค์๊ณผ ๊ฐ์ ๋ฉ์๋๋ฅผ ๊ตฌํํด์ผ ํฉ๋๋ค.
์์ ์ด๋ฏธ์ง๋ฅผ ์ฐธ๊ณ ํ์๋ฉด ์ข์ ๊ฒ ๊ฐ์ต๋๋ค.
(1) scene(_:willConnectTo:options:)
์ฑ์ด ์ฒ์ ์คํ๋๊ฑฐ๋ ์๋ก์ด Scene์ด ์์ฑ๋ ๋ ํธ์ถ๋๋ ๋ฉ์๋์ ๋๋ค.
์ด ๋ฉ์๋์์๋ Scene๊ณผ Window๋ฅผ ์์ฑํ๊ณ ์ฐ๊ฒฐํ๋ฉฐ ์ต์ด UI๋ฅผ ๊ตฌ์ฑํฉ๋๋ค.
๋ํ, Scene์ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ์ต๋๋ค.
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
// Scene๊ณผ Window ์์ฑ
guard let windowScene = (scene as? UIWindowScene) else { return }
let window = UIWindow(windowScene: windowScene)
self.window = window
// View Controller ์์ฑ ๋ฐ RootViewController๋ก ์ค์
let viewController = MyViewController()
window.rootViewController = viewController
// Window ํ์
window.makeKeyAndVisible()
}
(2) sceneDidDisconnect(_:)
Scene์ด ์ค๋จ๋๊ณ ํด์ ๋ ๋ ํธ์ถ๋๋ ๋ฉ์๋์ ๋๋ค.
์ด ๋ฉ์๋์์๋ Scene์์ ์ฌ์ฉ๋์๋ ๋ฆฌ์์ค๋ฅผ ํด์ ํ๋ ๋ฑ์ ์์ ์ ์ํํฉ๋๋ค.
func sceneDidDisconnect(_ scene: UIScene) {
// Scene์์ ์ฌ์ฉ๋์๋ ๋ฆฌ์์ค ํด์
// ํ์ํ ๊ฒฝ์ฐ ์ถ๊ฐ ์์
์ํ
}
(3) sceneDidBecomeActive(_:)
Scene์ด ํ์ฑํ๋์ด ์ฌ์ฉ์์ ์ํธ์์ฉํ ์ค๋น๊ฐ ์๋ฃ๋์์ ๋ ํธ์ถ๋๋ ๋ฉ์๋์ ๋๋ค.
์ฌ์ฉ๋๋ ๊ฒฝ์ฐ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
1. windows๋ฅผ ๋ณด์ฌ์ผ ํ๋ ๊ฒฝ์ฐ
2. ViewController๋ฅผ ์ ํํด์ผ ํ๋ ๊ฒฝ์ฐ
3. ๋ทฐ์ ์ปจํธ๋กค๋ฌ์ ๋ฐ์ดํฐ ๊ฐ๊ณผ ์ํ๋ฅผ ์ ๋ฐ์ดํธํด์ผ ํ๋ ๊ฒฝ์ฐ
4. ์ผ์ ์ค์ง๋ ์ํ๋ฅผ ๋ค์ ์ฌ๊ฐํด์ผ ํ๋ ๊ฒฝ์ฐ ( ๊ฒ์, ์ด๋ฏธ์ง ๋ค์ด๋ก๋ ๋ฑ)
func sceneDidBecomeActive(_ scene: UIScene) {
// Scene์ด ํ์ฑํ๋จ
// ํ์ํ ๊ฒฝ์ฐ ์ถ๊ฐ ์์
์ํ
}
(4) sceneWillResignActive(_:)
Scene์ด ๋นํ์ฑํ๋์ด ์ฌ์ฉ์์ ์ํธ์์ฉํ ์ ์๊ฒ ๋ ๋ ํธ์ถ๋๋ ๋ฉ์๋์ ๋๋ค.
func sceneWillResignActive(_ scene: UIScene) {
// Scene์ด ๋นํ์ฑํ๋จ
// ํ์ํ ๊ฒฝ์ฐ ์ถ๊ฐ ์์
์ํ
}
(5) sceneWillEnterForeground(_:)
Scene์ด ๋ฐฑ๊ทธ๋ผ์ด๋์์ ํฌ๊ทธ๋ผ์ด๋๋ก ์ด๋ํ ๋ ํธ์ถ๋๋ ๋ฉ์๋์ ๋๋ค.
func sceneWillEnterForeground(_ scene: UIScene) {
// Scene์ด ํฌ๊ทธ๋ผ์ด๋๋ก ์ด๋ํจ
// ํ์ํ ๊ฒฝ์ฐ ์ถ๊ฐ ์์
์ํ
}
(6) sceneDidEnterBackground(_:)
Scene์ด ๋ฐฑ๊ทธ๋ผ์ด๋๋ก ์ด๋ํ ๋ ํธ์ถ๋๋ ๋ฉ์๋์ ๋๋ค.
์ด๋, ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์ ํ๊ณ ๋ณด์ ํ๊ณ ์๋ ๊ณต์ ๋ฆฌ์์ค๋ค์ ํด์ ํฉ๋๋ค.
func sceneDidEnterBackground(_ scene: UIScene) {
// Scene์ด ๋ฐฑ๊ทธ๋ผ์ด๋๋ก ์ด๋ํจ
// ํ์ํ ๊ฒฝ์ฐ ์ถ๊ฐ ์์
์ํ
}
โป ํด๋น ๋ด์ฉ์ ์ ํ์ ๊ฐ๋ฐ์ ๋ฌธ์๋ฅผ ๊ธฐ์ค์ผ๋ก ์์ฑํ์์ต๋๋ค.
์์ง๊น์ง ์ ๋๋ก ์ฌ์ฉํด ๋ณธ ์ ์ ์์ง๋ง
์ฌ์ฉํ๊ฒ ๋๋ค๋ฉด ๋ด์ฉ์ ๋ณด์ถฉํด ๋ณด๊ฒ ์ต๋๋ค.
๊ทธ๋ผ ์ด๋ง ๐๐ป ๐๐ป ๐๐ป