ํฐ์คํ ๋ฆฌ ๋ทฐ
[iOS] iOS Application LifeCycle (iOS ์ฑ ์๋ช ์ฃผ๊ธฐ) ์์๋ณด๊ธฐ
ir.__.si 2022. 12. 22. 16:47์ค๋์ ๊ฐ๋ฐ์ ํ ๋, ๋ง์ด ๋ค์ด๋ณธ ์ฑ์ ์๋ช ์ฃผ๊ธฐ๋ ๋ฌด์์ธ์ง ๊ฐ๋จํ๊ฒ ์์๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
(๊ฐ์ธ์ ์ผ๋ก ๊ณต๋ถ ํ ๋ด์ฉ์ ๋ฐํ์ผ๋ก ๊ธฐ๋กํ๊ธฐ์ํด ์์ฑํ๋ ๊ธ์ด๊ธฐ ๋๋ฌธ์, ์ค๋ฅ๊ฐ ์์ ์ ์์ต๋๋ค. )
.
.
.
์ผ๋จ ๊ธฐ๋ณธ์ ์ผ๋ก iOS์์ ์๋ช ์ฃผ๊ธฐ์ ๋ํ ์ด์ผ๊ธฐ๋ฅผ ํ ๋ iOS 13.0 ๋ฒ์ ์ด์ ๊ณผ ์ดํ๋ก ๋๋์ด์ ์ค๋ช ์ ํ๊ฒ ๋ฉ๋๋ค.
๊ทธ ์ด์ ๋ ์๋์ ๊ฐ์๋ฐ,
iOS 13.0 ์ด์ ์๋ Scene์ด๋ผ๋ ๊ฐ๋ ์ด App์ผ๋ก ๋ถํฐ ๋ถ๋ฆฌ๊ฐ ๋์ง ์์์ง๋ง, ์ดํ ๋ฒ์ ๋ถํฐ๋ AppDelegate์ SceneDelegate๋ก ๋ถ๋ฆฌ๋์ด ์๋ก ๋น์ทํ์ง๋ง ๋ค๋ฅธ ๊ฐ๋ ์ ๊ฐ์ง๊ฒ ๋๋ค.
์ด์ฒ๋ผ AppDelegate์ SceneDelegate๊ฐ ํ๋ ์ญํ ์ด ๋ถ๋ฆฌ๊ฐ ๋์๊ธฐ ๋๋ฌธ์,
์ ๋ 13.0๋ฒ์ ์ดํ๋ฅผ ๊ธฐ์ค์ผ๋ก ์์ฑํ๊ฒ ์ต๋๋ค.
์๋ช ์ฃผ๊ธฐ๋?
์๋ช ์ฃผ๊ธฐ๋, ์คํ๋ถํฐ ์ข ๋ฃ๋๊ธฐ ๊น์ง์ ์ฃผ๊ธฐ๋ฅผ ์๋ฏธํ๋ฉฐ App๊ณผ ์ฐ๊ด๋ ์๋ช ์ฃผ๊ธฐ๋ AppDelegate์์ ์ฒ๋ฆฌ๋ฅผ ํ๊ณ
Scene๊ณผ ์ฐ๊ด๋ ์๋ช ์ฃผ๊ธฐ๋ SceneDelegate์์ ์ฒ๋ฆฌ๋ฅผ ํ๊ฒ ๋ฉ๋๋ค.
1) ๋ชจ๋ฐ์ผ ์ฑ์ ํ๋ฉด์ ํฌ๊ธฐ๊ฐ ์๊ธฐ ๋๋ฌธ์ ํ๋์ ํ๋ฉด์ ํ๋์ ViewController๋ง์ ๊ฐ์ง๊ฒ ๋ฉ๋๋ค.
2) ๊ทธ๋ ๊ฒ ์ฌ๋ฌ๊ฐ์ ViewController๊ฐ ๋ชจ์ฌ์ ํ๋์ Application์ ๋ง๋ค๊ฒ ๋๋๋ฐ,
3) ์ด๋ ๊ฐ ๊ฐ์ ViewController๋ ์์ ๋ง์ ์๋ช ์ฃผ๊ธฐ๋ฅผ ๊ฐ์ง๊ณ ์๊ณ
4) ํด๋น ์๋ช ์ฃผ๊ธฐ๋ฅผ ํ์ฉํ์ฌ View์ ์ ํ๊ณผ ๊ฐ์ Control์ ํ๊ฒ ๋ฉ๋๋ค.
Application Lifecycle๊ณผ ๊ด๋ จ๋ ์ฉ์ด ์ ๋ฆฌ
์๋ช ์ฃผ๊ธฐ์ ๋ํด ๊ณต๋ถ๋ฅผ ํ๋ค๋ณด๋ฉด, Delegate์ ๊ฐ์ด, ๋ค์ด๋ ๋ดค์ง๋ง ์๋ฏธ๋ฅผ ์ ์์ง ๋ชปํ๋ ์ฌ๋ฌ ์ฉ์ด๋ฅผ ์ ํ๊ฒ ๋ฉ๋๋ค.
๋ฐ๋ผ์ ํด๋น ์ฉ์ด๋ค์ ๋ํ ๊ฐ๋จํ ์ ๋ฆฌ๋ฅผ ํด๋ณด์์ต๋๋ค.
.
.
Delegate๋?
Delegate pattern์ ๋ํ ๋ด์ฉ์ ๋๋ฌด ๋ฐฉ๋ํ์ฌ
๋ฐ๋ก ๊ฐ๋จํ ์์์ ํจ๊ป ์ ๋ฆฌํ์ฌ ๊ธ์ ์์ฑํ์์ต๋๋ค!
.
.
.
Scene์ด๋?
๊ฐ๋จํ๊ฒ ๋งํ๋ฉด, ๊ธฐ๊ธฐ์์ ์คํ์ค์ธ ์ฑ UI์ ์ธ์คํด์ค๋ฅผ ์๋ฏธํฉ๋๋ค.
Scene์๋ UI์ ํ๋์ ์ธ์คํด์ค๋ฅผ ๋ํ๋ด๋ windows์ ViewController๊ฐ ๋ค์ด์์ต๋๋ค.
๋ํ, ๊ฐ Scene์๋ UIKit๊ณผ App๊ฐ์ ์ํธ์์ฉ์ ์ํUIWindowSceneDelegate๊ฐ์ฒด๋ฅผ ๊ฐ์ง๊ณ ์๊ณ
ํ๋์ App์ ์ฌ๋ฌ๊ฐ์ Scene์ ๋์ผํ ๋ฉ๋ชจ๋ฆฌ ๋ฐ app process๊ณต๊ฐ์ ๊ณต์ ํ๊ฒ ๋ฉ๋๋ค.
์ด๋ฅผ ํตํด, ํ๋์ Application์ ๋์์ ๋ค์ํ ์ฅ๋ฉด์ ํ์ฑํ ํ ์ ์์ต๋๋ค.
Application Lifecycle ์ด๋?
์ฑ ์๋ช ์ฃผ๊ธฐ๋ App์ ์คํ ๋ถํฐ ์ข ๋ฃ๊น์ง์ ์ฃผ๊ธฐ๋ฅผ ๋งํ๋๋ฐ,
1) ์ ํ๊ฐ ์์ ๋์ ๊ฐ์ด App์ด ํ๋ฉด์์์ ์๋ณด์ด๋ BackGround์ํ,
2) ํ๋ฉด์ ์ฌ๋ผ์์๋ ForeGround์ ๊ฐ์ ์ํ๋ค์ ์ ์ํ ๊ฒ์ ๋๋ค.
์ด์ ๋ฐ๋ผ์ ์์คํ ์๋ฆผ์ ์๋ตํ๊ณ ๋ค๋ฅธ ์ค์ํ ์์คํ ๊ด๋ จ๋ ์ด๋ฒคํธ๋ฅผ ์ฒ๋ฆฌํ๊ฒ ๋๊ณ ,
App์ ์ํ๊ฐ ๋ฐ๋ ๋ UIKit์ ์ ์ ํ Delegate๊ฐ์ฒด์ method๋ฅผ ํธ์ถํ์ฌ ์ฐ๋ฆฌ์๊ฒ ์๋ ค์ค๋๋ค.
UISceneDelegate
- iOS 13.0์ด์ ๋ฒ์ ์์ ์ฌ์ฉ
- Scene-based life-cycle event์ ์๋ต
UIApplicationDelegate
- iOS 12.0์ดํ ๋ฒ์ ์์ ์ฌ์ฉ
- App-based Lifecycle event์ ์๋ต
AppDelegate & SceneDelegate
[iOS 12.0 ์ด์ ]
iOS 12์ ๊ทธ ์ด์ ์ AppDelegate๋ 2๊ฐ์ ์ญํ ์ ๊ฐ์ง๊ณ ์์์ต๋๋ค.
Process Lifecycle
Process ์์ค์์์ event๋ฅผ ์๋ ค์ค๋๋ค. ๊ทธ๋์ system์ AppDelegate์๊ฒ process๊ฐ ์คํ์ํ์ธ์ง, ์๋๋ฉด ์ข ๋ฃํ๋ ค๊ณ ํ๋์ง์ ๊ฐ์ ์ ๋ณด๋ฅผ ์๋ ค์ค๋๋ค.
UI Lifecycle
UI์ State๋ฅผ ์๊ฒ ํด์ค๋๋ค. ๊ทธ๋์ didEnterForeground()์ ๊ฐ์ method๋ฅผ ํตํด์ ์์คํ ์ UI์ State๋ฅผ ์๋ ค์ฃผ๊ฒ ๋ฉ๋๋ค.
์ด๋ฌํ ๊ตฌ์กฐ๋ ํ๋์ ์ฑ์ด ํ๋์ Process์ ํ๋์ UI๊ฐ์ฒด์๋ง match๋์๋
iOS 12.0 ์ด์ ๊น์ง๋ ๊ด์ฐฎ์์ต๋๋ค....
[iOS 13.0 ์ดํ]
ํ์ง๋ง, iOS 13.0์ดํ ๋ถํฐ๋ App๋ค์ ์ด์ ์ฒ๋ผ 1๊ฐ์ process๋ฅผ ์ฌ์ฉํ๊ธด ํ์ง๋ง,
๋ค์์ UI๊ฐ์ฒด๋ scene session๋ค์ ๊ฐ์ง๊ฒ ๋์์ต๋๋ค.
์ด ๋ง์ด ๋ฌด์จ ๋ง์ด๋ ํ๋ฉด, ํ๋์ ์ดํ์ ์คํ ํ๋๋ผ๋ multiple window๋ฅผ ์ง์ํ๊ฒ ๋๋ฉด์
์ฌ๋ฌ๊ฐ์ scene session์ ๊ฐ์ง๊ฒ ๋์๋ค๋ ์๋ฏธ์ ๋๋ค!
์ด ๋ง์, AppDelegate์ ์ญํ ๋ณํ๊ฐ ํ์ํ๋ค๋ ์๋ฏธ์ด๊ณ
๊ทธ ๊ฒฐ๊ณผ AppDelegate๋ Process Lifecycle์ ์ญํ ์ ๊ทธ๋๋ก ์ ์งํ์ง๋ง,
UI์ ๊ด๋ จ๋ ๋ชจ๋ ์์ ์๋ํ UI Lifecycle์ ์ญํ ์ SceneDelegate์๊ฒ ๋๊ฒจ์ฃผ๊ฒ ๋ฉ๋๋ค.
๋ฐ๋ผ์ iOS 13์ดํ๋ถํฐ app์ด ์๋ก์ด Scene lifecycle์ ์ฑํํ๊ฒ ๋๋ค๋ฉด,
UIKit์ AppDelegate๋ก๋ถํฐ UI state๊ด๋ จ method๋ฅผ ํธ์ถํ์ง ์๊ฒ ๋๊ฒ ์ฃ ?
๋์ , ์๋ ์ฌ์ง์ ์๋ ์๋ก์ด SceneDelegate ํจ์๋ค์ ํธ์ถํ๊ฒ ๋ฉ๋๋ค!!
๊ทธ๋ ๋ค๋ฉด ๊ณผ์ฐ iOS 12์ด์ ์ ์ฑ๋ค์ ์ง์์ ์ค๋จํด์ผ ํ ๊น??
๊ทธ๋ ์ง ์๋ค์ต๋๋ค. ๋ค์ ๋ฐฐํฌ๋ฅผ ํ ๋ ์์ 2๊ฐ์ง ๊ฒฝ์ฐ์ ๋ํด ๋ชจ๋ ์์ฑ์ ํ๊ณ ์ ์งํ๋ฉด,
UIKit์ด ์์์ Runtime์ค์ ์๋ง์ method๋ฅผ ํธ์ถํ ๊ฒ์ด๋ค.
.
.
.
์, ์ ๋ฆฌ๋ ๋ด์ฉ์ ๋ณด๋ฉด UI Lifecycle์ญํ ์ SceneDelegate๊ฐ ํ๊ฒ ๋์๋ค๊ณ ํ์ฃ ?
๊ทธ๋ฆฌ๊ณ AppDelegate๋ SceneSession์ ํตํด Scene์ ๋ํ ์ ๋ณด๋ฅผ ์ ๋ฐ์ดํธ ํ๋ Session Lifecycle์ด ์ถ๊ฐ๋์๋๋ฐ ์ด SceneSession์ ๊ณผ์ฐ ๋ฌด์์ผ๊น์??
SceneSession์ด๋?
UISceneSession ๊ฐ์ฒด๋ Scene์ ๊ณ ์ ํ ๋ฐํ์ ์ธ์คํด์ค๋ฅผ ๊ด๋ฆฌํ๊ฒ๋ฉ๋๋ค.
user๊ฐ App์ ์๋ก์ด Scene์ ์ถ๊ฐํ๋ฉด ์์คํ ์ ํด๋น Scene์ trackingํ๊ธฐ ์ํ session๊ฐ์ฒด๋ฅผ ์์ฑํ๊ฒ ๋๋๋ฐ,
์ด๋ฌํ session์๋ ํด๋น scene์ ๋ํ ๊ณ ์ ์๋ณ์์ ์ธ๋ถ๊ตฌ์ฑ์ ๋ณด๊ฐ ํฌํจ๋์ด์์ต๋๋ค.
๋ํ, UIKit์ scene ์์ฒด์ Lifetime ๋์ session์ ์ ๋ณด๋ฅผ ์ ์งํ๋ฉฐ, scene์ ๋ซ๊ฒ ๋๋ฉด session์ ์ญ์ ํ๊ฒ ๋ฉ๋๋ค.
์ด ๋, ์ด๋ฌํ session์ user๊ฐ ์์ฑํ๋ ๊ฒ์ด ์๋๋ผ, UIKit์ ์ํด ์๋์ผ๋ก scene์ trackingํ์ฌ ์์ฑํ๊ฒ ๋๋ค.
๋ง์ฝ, ๊ฐ๋ฐ์๊ฐ ์ง์ Scene์ด๋ Session์ ์์ฑํ๊ณ ์ถ๋ค๋ฉด,
UIApplication์
requestSceneSessionActivation(_:userActivity:options:errorHandler:)
ํจ์๋ฅผ ํตํด์ UIKit์๊ฒ ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ์์ผ๋ก ์๋ก์ด Scene๊ณผ Session์ ์์ฑ์ ์์ฒญํ ์ ์์ต๋๋ค!
iOS 13 ์ดํ, AppDelegate์ ์ญํ
1) ์ฑ์ ์ค์ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ์ด๊ธฐํ
2) ์ฑ์ scene์ ๊ตฌ์ฑ (configuration)
3) ์ฑ ๋ฐ์์ ๋ฐ์ํ ์๋ฆผ(๋ฐฐํฐ๋ฆฌ ๋ถ์กฑ, ๋ค์ด๋ก๋ ์๋ฃ ๋ฑ)์ ๋์
4) ์ฑ์ scenes, views, view controller์ ํ์ ๋์ง ์๊ณ ์ฑ ์ค์ค๋ก๋ฅผ ํ๊ฒํ๋ ์ด๋ฒคํธ์ ๋์
5) ์ฑ์ด ์์ํ ๋ ์๊ตฌ๋๋ ๋ชจ๋ ์๋น์ค๋ฅผ ๋ฑ๋ก