์ƒ์„ธ ์ปจํ…์ธ 

๋ณธ๋ฌธ ์ œ๋ชฉ

[ iOS ์•ฑ๊ฐœ๋ฐœ ์ž…๋ฌธ 1์ฃผ์ฐจ ] Xcode ๋นŒ๋“œ - ์•ฑ ์ƒ๋ช…์ฃผ๊ธฐ(App Life Cycle) / AppDelegate & SceneDelegate

๐ŸŽ iOS/Xcode

by AHN.Jihyeon 2024. 6. 19. 11:52

๋ณธ๋ฌธ

์ปดํŒŒ์ผ(Compile) & ๋นŒ๋“œ(Build)

  • ์ปดํŒŒ์ผ :๊ฐœ๋ฐœ์ž๊ฐ€ ์ž‘์„ฑํ•œ High Level์–ธ์–ด์ธ Swift ์ฝ”๋“œ๋ฅผ ์ปดํ“จํ„ฐ๊ฐ€ ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์šด ๋ฐ”์ด๋„ˆ๋ฆฌ ํŒŒ์ผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ณผ์ •
  • ๋นŒ๋“œ : ์†Œ์Šค ์ฝ”๋“œ ํŒŒ์ผ์„ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ์†Œํ”„ํŠธ์›จ์–ด ์‚ฐ์ถœ๋ฌผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ณผ์ •

 

 


UIKit ์•ฑ ์ƒ๋ช…์ฃผ๊ธฐ(App Life Cycle)

์•ฑ์„ ์‹œ์ž‘ํ•˜๊ณ  ์ข…๋ฃŒ๋˜๊ธฐ ์ „๊นŒ์ง€์˜ ์—ฌ๋Ÿฌ ์ƒํƒœ๋“ค

Scene State

Unattache(= Not Running)

์•ฑ์„ ์‹คํ–‰ ์ค‘์ด์ง€ ์•Š์€ ์ƒํƒœ

UI๋ฅผ ๋‹ด๋‹นํ•˜๋Š” Scene์ด ์•„์ง ์•ฑ์— ์—ฐ๊ฒฐ๋˜์ง€ ์•Š์€ ์ƒํƒœ

์•ฑ์— UI๊ฐ€ ๋ณด์ด์ง€ ์•Š๋Š” ์ƒํƒœ 

 

 

Foreground Inactive

Scene์ด ์•ฑ์— ์—ฐ๊ฒฐ๋˜์–ด UI๋ฅผ ๋ณด์—ฌ์ฃผ๊ณ  ์žˆ์ง€๋งŒ ์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ ์ด๋ฒคํŠธ๋ฅผ ๋ฐ›์„ ์ˆ˜ ์—†๋Š” ์ƒํƒœ

์•ฑ์„ ์™„์ „ํžˆ ํ™œ์„ฑํ™”ํ•˜๊ธฐ ์ด์ „ ๋‹จ๊ณ„

์˜ˆ) ์‹œ์Šคํ…œ์— ์•Œ๋ฆผ ์˜ค๊ฑฐ๋‚˜ ์ œ์–ด์„ผํ„ฐ๋ฅผ ๋‚ด๋ฆฌ๊ฑฐ๋‚˜ ์‚ฌ์šฉํ•˜๋˜ ์•ฑ์„ ๋ฐ”๊ฟ€ ๋•Œ 

 

 

Foreground Active

์•ฑ์„ ์‹คํ–‰ํ–ˆ๊ณ  ์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ ์ด๋ฒคํŠธ๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ์ƒํƒœ

๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ ์•ฑ์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ์ƒํƒœ

 

 

Background

์•ฑ์„ ์‹คํ–‰ํ•˜๊ณ  ์žˆ์ง€๋งŒ UI๊ฐ€ ๋ณด์ด์ง€ ์•Š๋Š” ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์ƒํƒœ 

ํ™ˆ ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ ๋ฐ–์œผ๋กœ ๋‚˜๊ฐ”์„ ๋•Œ์˜ ์ƒํƒœ

๊ทธ๋ž˜๋„ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ผ๊ฐ€ ์žˆ๋Š” ์ƒํƒœ

์˜ˆ) ๋ฉœ๋ก  ์•ฑ์ด ํ™ˆ ํ™”๋ฉด์—์„œ๋„ ์Œ์•…์„ ๊ณ„์† ์žฌ์ƒํ•˜๊ณ  ์žˆ๋Š” ์ƒํƒœ

 

 

Suspend

๋ฐฑ๊ทธ๋ผ์šด ์ƒํƒœ์—์„œ ์•ฑ์ด ํŠน๋ณ„ํ•œ ์ž‘์—…์„ ํ•„์š”๋กœ ํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ ์ ‘์–ด๋“œ๋Š” ์ƒํƒœ

OS๊ฐ€ ํŒ๋‹จํ•˜์—ฌ Background -> Suspend ์ƒํƒœ๋กœ ๋ณ€ํ™˜ ์‹œํ‚จ๋‹ค. 

์˜ˆ) ์—ฌ๋Ÿฌ ์•ฑ์„ ๋™์‹œ์— ํ‚ค๋Š” ๊ธฐ๊ธฐ ๋ฉ”๋ชจ๋ฆฌ์— ๋ถ€๋‹ด์Šค๋Ÿฌ์šด ์ƒํ™ฉ์ด๋ผ๋ฉด ์ดˆ๋ฐ˜์— ์‹คํ–‰ํ•œ ์•ฑ๋“ค์€

๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ Suspend ์ƒํƒœ๋กœ ๋„˜์–ด๊ฐ€๊ณ  ๋Œ์•„๊ฐ”์„ ๋•Œ ์•ฑ์ด ์žฌ์‹คํ–‰๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค. 

 

 

 

 


AppDelegate & SceneDelegate

UIKit์œผ๋กœ ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•˜๋ฉด ์ž๋™์œผ๋กœ ์ƒ์„ฑ์ด ๋˜๋Š” ํด๋ž˜์Šค์ด๋‹ค. 

iOS13 ์ด์ „ ๋ฒ„์ „๊นŒ์ง€๋Š” AppDelegate๊ฐ€ ๋ผ์ดํ”„์‚ฌ์ดํด์„ ๊ด€๋ฆฌํ–ˆ์ง€๋งŒ,

iOS13 ์ดํ›„๋ถ€ํ„ฐ๋Š” ์•ฑ ์ƒํƒœ์— ๊ด€ํ•œ ์ฑ…์ž„์€ SceneDelegate๊ฐ€, ์•ฑ์˜ ์‹œ์ž‘ ์งํ›„/ ์ข…๋ฃŒ ์ง์ „์€ AppDelegate๊ฐ€ ๊ด€๋ฆฌํ•œ๋‹ค. 

 

 

 

AppDelegate

  • App Lifecycle ๊ด€๋ จ ๋ฉ”์„œ๋“œ ์ œ๊ณต
  • ์•ฑ์˜ ์ƒํƒœ ๋ณ€ํ™”(์ƒ๋ช…์ฃผ๊ธฐ)์— ๋”ฐ๋ฅธ ๋‹ค์–‘ํ•œ ๋ฉ”์„œ๋“œ๋“ค์„ ์ง€์›ํ•ด์ฃผ๋Š” ํด๋ž˜์Šค

 

  • didFinishLaunchingWithOptions ๋ฉ”์„œ๋“œ : ์•ฑ์ด ์‹คํ–‰๋˜์—ˆ์„ ๋•Œ(๋Ÿฐ์นญ์ด ๋๋‚ฌ์„ ๋•Œ) ๋งจ ์ฒ˜์Œ ๋ถˆ๋ฆฌ๋Š” ๋ฉ”์„œ๋“œ 
    ์•ฑ์ด ์‹œ์ž‘๋˜๋Š” ๊ทน ์ดˆ๋ฐ˜์— ์„ธํŒ…ํ•ด์ฃผ๊ณ  ์‹ถ์€ ์ฝ”๋“œ๋“ค์ด ์žˆ์„ ๋•Œ ์ด ์•ˆ์— ์ž‘์„ฑํ•ด์ฃผ๋ฉด ๋จ.

 

์ž๋™์™„์„ฑ๋˜๋Š” ๋ฉ”์„œ๋“œ๋กœ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค. 

์•ฑ์ด InActive์—์„œ Active(์•ฑ์ด ์‹คํ–‰์ด ๋˜๊ณ  ์žˆ๋Š” ์ƒํƒœ)ํ•œ ์ƒํƒœ๊ฐ€ ๋  ๋•Œ ๋งˆ๋‹ค ๋ถˆ๋ฆฌ๋Š” ๋ฉ”์„œ๋“œ

์˜ˆ) ์•ฑ์ด ๋ฐฑ๊ทธ๋ผ์šด๋“œ์— ๊ฐ”๋‹ค๊ฐ€ ๋Œ์•„์˜ฌ ๋•Œ๋งˆ๋‹ค ํ™”๋ฉด์— ๋ณด์ด๋Š” ์ •๋ณด๋“ค์„ ์—…๋ฐ์ดํŠธ ํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉ

 

SceneDelegate 

  • Scene ๊ด€๋ จ ๋ฉ”์„œ๋“œ๋ฅผ ์ œ๊ณตํ•˜๋Š” ํด๋ž˜์Šค
  • iOS13์ด์ „ ๊นŒ์ง€๋Š” AppDelegate๊ฐ€ SceneDelegate ์—ญํ• ๊นŒ์ง€ ์ˆ˜ํ–‰
  • ๋ฉ€ํ‹ฐ ์œˆ๋„์šฐ ํ™˜๊ฒฝ์—์„œ ๋‹ค์ค‘ Scene์˜ ๊ฐœ๋…์ด ์ƒ๊ฒจ๋‚จ
  • ์•„์ดํŒจ๋“œ์—์„œ ๊ฐ€๋กœ ๋ชจ๋“œ, ํ™”๋ฉด ๋ถ„ํ• ์„ ํ•˜๋ฉด ๊ฐ ๋ถ„ํ• ๋œ ํ™”๋ฉด์ด Scene์„ ์˜๋ฏธ 

 

 

ํ”„๋กœ์ ํŠธ ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๊ณ  SceneDelegate ํŒŒ์ผ์„ ๋ณด๋ฉด ์•ฑ ์ƒํƒœ์— ๋”ฐ๋ฅธ ๋ฉ”์„œ๋“œ๋“ค์ด ํ˜ธ์ถœ๋œ๋‹ค. 

 

 

 

 

https://velog.io/@rookie0031/iOS-App-Life-Cycle

๊ด€๋ จ๊ธ€ ๋”๋ณด๊ธฐ