🍎 아이-였-μ—μŠ€/πŸ“± iOS 개발

[iOS] App Life Cycle: iOS 12κΉŒμ§€ μ•±μ˜ 생λͺ…μ£ΌκΈ°

κ°œλ°œν•˜λŠ” ν›ˆμ΄ 2021. 9. 19. 23:12

appDelegate의 μž„λ¬΄κ°€ λ§‰μ€‘ν–ˆλ˜ ~ iOS 12

iOS 13μ—μ„œ Scene이 μ†Œκ°œλ˜κ³  UI와 κ΄€λ ¨λœ μž‘μ—…μ΄ λͺ¨λ‘ sceneDelegate둜 μ΄λ™λ˜κΈ° μ „κΉŒμ§€, appDelegatesλŠ” μ•±μ˜ μƒνƒœμ™€ UI의 μƒνƒœλ₯Ό λͺ¨λ‘ κ΄€λ¦¬ν–ˆμŠ΅λ‹ˆλ‹€. μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ ν•œ ν”„λ‘œμ„ΈμŠ€λ₯Ό μ‚¬μš©ν•˜λ©΄μ„œ 단 ν•˜λ‚˜μ˜ ν™”λ©΄λ§Œμ„ μ œκ³΅ν–ˆκΈ° λ•Œλ¬Έμ— sceneDelegate의 μ‘΄μž¬κ°€ ν•„μš”ν•˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€. 그럼 μ΄λ•ŒκΉŒμ§€ μ•±μ˜ 생λͺ…μ£ΌκΈ°κ°€ μ–΄λ–»κ²Œ λ˜μ—ˆλŠ”μ§€ ν•œ 번 μ‚΄νŽ΄λ³΄κ² μŠ΅λ‹ˆλ‹€!

 

5개의 μƒνƒœ

https://developer.apple.com/documentation/uikit/app_and_environment/managing_your_app_s_life_cycle

 

iOS 12 κΉŒμ§€μ˜ 앱은 5개의 μƒνƒœλ‘œ λ‚˜λˆ„μ–΄μ§‘λ‹ˆλ‹€. Not running, Inactive, Active, Background, Suspended μž…λ‹ˆλ‹€. 

 

앱이 μ‹œμž‘λ  λ•Œ

μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ μ‹œμž‘λ˜λ©΄ μ‹œμŠ€ν…œμ€ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ Inactiveλ‚˜ background μƒνƒœλ‘œ λ§Œλ“­λ‹ˆλ‹€. 두 μƒνƒœλŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ UIκ°€ 화면에 λ‚˜νƒ€λ‚˜λŠ”μ§€ 여뢀에 λ”°λΌμ„œ λ‹¬λΌμ§‘λ‹ˆλ‹€. λ§Œμ•½ μ‹€ν–‰ν•œ 직후에 λ°±κ·ΈλΌμš΄λ“œμ—μ„œ 계속 μ‹€ν–‰λ˜λŠ” 앱이라면, Background μƒνƒœκ°€ 되고, 화면이 μ „ν™˜λ˜μ–΄ 앱이 화면에 λ³΄μ΄κ²Œλ˜λŠ” 앱이라면 Inactive μƒνƒœκ°€ 되겠죠?

 

Active <-> Inactive

그리고 화면에 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ 그렀지고 Inactive μƒνƒœκ°€ 된 μ΄ν›„μ—λŠ” Active 와 Inactive μƒνƒœκ°€ 반볡되며 μ‹€ν–‰λ©λ‹ˆλ‹€. μ‹œλ¦¬κ°€ λΆˆλ¦¬κ±°λ‚˜, μ „ν™”λ₯Ό λ°›λŠ” λ“±, 화면에 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ μ˜¬λΌμ™€ μžˆμ§€λ§Œ, λ‹€λ₯Έ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄λ‚˜ μ‹œμŠ€ν…œμ— μ˜ν•΄ μ‚¬μš©μžμ™€ μƒν˜Έμž‘μš©ν•  수 μ—†λŠ” μƒνƒœκ°€ 되면 Inactive μƒνƒœλ‘œ μ „ν™˜λ©λ‹ˆλ‹€.

 

Suspended <-> Background <-> Inactive

화면이 μ‚¬μš©μžμ— μ˜ν•΄ λ°±κ·ΈλΌμš΄λ“œλ‘œ μ΄λ™ν•˜λ©΄ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ μƒνƒœλ„ Background μƒνƒœκ°€ λ©λ‹ˆλ‹€. Background μƒνƒœλŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ 화면에 λ‚˜νƒ€λ‚˜μ§€λŠ” μ•Šμ§€λ§Œ, μ—¬μ „νžˆ μ‹€ν–‰λ˜κ³  μžˆλŠ” μƒνƒœλ₯Ό μ˜λ―Έν•©λ‹ˆλ‹€. 그리고 이 μƒνƒœμ—μ„œ 앱이 μΌμ •μ‹œκ°„λ™μ•ˆ 더 이상 μ‹€ν–‰λ˜μ§€ μ•ŠμœΌλ©΄  Suspended μƒνƒœλ‘œ μ „ν™˜λ©λ‹ˆλ‹€.

 

ν•˜μ§€λ§Œ Suspended μƒνƒœκ°€ μ•±μ˜ μ’…λ£Œλ₯Ό μ˜λ―Έν•˜μ§€λŠ” μ•ŠμŠ΅λ‹ˆλ‹€. Suspended μƒνƒœμ— 있던 앱이 μ‚¬μš©μžκ°€ 화면을 λ‹€μ‹œ μ „ν™˜μ‹œν‚€λ©΄ Inactive μƒνƒœλ‘œ 화면에 λ‚˜νƒ€λ‚  수 μžˆμŠ΅λ‹ˆλ‹€. 이 λ•Œλ¬Έμ— μœ„ κ·Έλ¦Όμ—μ„œλ„ Suspendedμ—μ„œ Inactive둜 κ°€λŠ” ν™”μ‚΄ν‘œκ°€ μžˆλŠ” 것이죠!

 

앱이 μ’…λ£Œλ˜λŠ” μ‹œμ μ€ μ‚¬μš©μžκ°€ 직접 앱을 μ’…λ£Œμ‹œν‚€κ±°λ‚˜, λ©”λͺ¨λ¦¬ 관리λ₯Ό μœ„ν•΄ suspended μƒνƒœμ— 있던 앱을 iOS μ‹œμŠ€ν…œμ΄ μ’…λ£Œμ‹œμΌ°μ„ λ•Œμž…λ‹ˆλ‹€! 

마무리

iOS 13μ—μ„œμ˜ 생λͺ…μ£ΌκΈ°λ₯Ό μ •λ¦¬ν•΄μ„œ κ·ΈλŸ°μ§€ 거의 μΌμΉ˜ν•˜λŠ” κ°œλ…μ— μš©μ–΄λ§Œ μ‘°κΈˆμ”© λ‹¬λΌμ Έμ„œ 큰 어렀움없이 이해할 수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€. iOS 12 μ΄μ „μœΌλ‘œ 앱을 κ°œλ°œν•  상황이 μžˆμ„μ§€ λͺ¨λ₯΄κ² μ§€λ§Œ(이제 iOS 15κ°€ 곧 λ‚˜μ˜€λ‹ˆκΉŒμš”) κ·Έλž˜λ„ μ•Œμ•„λ‘λ©΄ μ–Έμ  κ°€ μ“Έ 데가 있겠죠! μ˜€λŠ˜λ„ μ½μ–΄μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€!