ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

์•ˆ๋…•ํ•˜์„ธ์š”?

๋„ˆ๊ตฌ๋ฆฌ์ž…๋‹ˆ๋‹ค.

 

์˜ค๋Š˜์€ ์•ฑ์˜ ๋ผ์ดํ”„ ์‚ฌ์ดํด์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋ คํ•ฉ๋‹ˆ๋‹ค.

 

App Life Cycle์ด๋ž€?

life cycle์ด๋ž€ ์‚ฌ์ „์ •์˜๋กœ ์ƒ๋ช…์ฃผ๊ธฐ ์ž…๋‹ˆ๋‹ค.

์‚ฌ๋žŒ์œผ๋กœ ์น˜๋ฉด ํƒœ์–ด๋‚˜์„œ ์ฃฝ๊ธฐ๊นŒ์ง€์˜ ๊ณผ์ •์ธ๊ฑฐ์ฃ 

 

๊ทธ๋Ÿผ App Life Cycle์€ ์•ฑ์˜ ์ƒ๋ช…์ฃผ๊ธฐ ์ž…๋‹ˆ๋‹ค.

์•ฑ์„ ํด๋ฆญํ•ด์„œ ์•ฑ์ด ์‹คํ–‰ ๋˜๊ณ  ์™„์ „ํžˆ ์ข…๋ฃŒ๋˜๊ธฐ ๊นŒ์ง€์˜ ๊ณผ์ •์ž…๋‹ˆ๋‹ค.

 

 

App Based vs Scene Based

life cycle ์„ค๋ช…ํ•˜๋‹ค ๋ง๊ณ  ๊ฐ‘์ž๊ธฐ ๋ฌด์Šจ ์ฃผ์ œ๋ƒ?

๋ผ๊ณ  ๋งํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ 

 

์œ„์˜ ์ƒํƒœ์— ๋”ฐ๋ผ์„œ ์ƒ๋ช…์ฃผ๊ธฐ์˜ ์ผ๋ถ€ ๊ณผ์ •๊ณผ ํ˜ธ์ถœ๋˜๋Š” ๋ฉ”์„œ๋“œ์˜ ๊ฐ์ฒด๊ฐ€ ๋‹ฌ๋ผ์ง‘๋‹ˆ๋‹ค.

์ž ์‹œ ์•Œ์•„๋ณด๊ณ  ๊ฐˆ๊ฒŒ์š”!

 

iOS13์„ ๊ธฐ์ ์œผ๋กœ iOS ์•ฑ์— ๋ณ€ํ™”๊ฐ€ ์ฐพ์•„์˜ต๋‹ˆ๋‹ค.(ํ•ญ์ƒ ๋ณ€ํ™”๊ฐ€ ์ฐพ์•„์˜ต๋‹ˆ๋‹ค๋งŒ..ใ…Ž)

iPadOS์™€ macOS๋ฅผ ํฌํ•จํ•˜์—ฌ iOS13 ์ดํ›„๋กœ ๋ฉ€ํ‹ฐ ์œˆ๋„์šฐ๊ฐ€ ์ง€์›๋˜๊ธฐ ์‹œ์ž‘ํ–ˆ๋Š”๋ฐ์š”.

๋‚ด๋ถ€์ ์œผ๋กœ ๋ญ๊ฐ€ ๋‹ฌ๋ผ์กŒ๋Š”์ง€ ๊ทธ๋ฆผ์„ ํ™•์ธํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

iOS 12 ์ด์ „

 

iOS 12 ์ด์ „๊นŒ์ง€๋Š” AppDelegate์—์„œ Process Lifecycle๊ณผ UI Lifecycle์„ ํฌํ•จํ•˜์—ฌ

์•ฑ์˜ ์ƒ๋ช…์ฃผ๊ธฐ๋ฅผ ๋ชจ๋‘ ๋‹ค๋ฃจ์—ˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์„ ๊ณต์‹๋ฌธ์„œ์—์„œ๋Š” App Based Lifecycle ์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

 

 

iOS 13 ์ดํ›„

iOS12(์™ผ) iOS13์ดํ›„(์˜ค)

 

์œ„์—์„œ ๋ง์”€๋“œ๋ฆฐ๋Œ€๋กœ iOS 13์ดํ›„ ๋ฉ€ํ‹ฐ ์œˆ๋„์šฐ๊ฐ€ ์ง€์›๋˜๊ธฐ ์‹œ์ž‘ํ–ˆ๊ณ 

์ด ํ™”๋ฉด(Scene)์„ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด

 

UI Lifecycle์„ App Delegate์—์„œ ๋ถ„๋ฆฌํ•œ ํ›„ Scene Delegate๋ฅผ ์ƒˆ๋กœ ๋งŒ๋“ค์–ด UI Lifecycle์„ ๊ด€๋ฆฌํ•˜๋„๋ก ๋งŒ๋“ค์—ˆ๊ณ ,

Scene Delegate์˜ session์„ ๊ด€๋ฆฌํ•˜๋Š” Session Lifecycle์„ App Delegate์— ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด ๊ณผ์ •์„ Scene Base Lifecycle์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

 

Scene์€ ๊ธฐ๊ธฐ์—์„œ ๋‚˜ํƒ€๋‚˜๋Š” App ํ™”๋ฉด์˜ ๋‹จ์œ„์ด๋ฉฐ Scene์„ ์ง€์›ํ•  ๊ฒฝ์šฐ ๊ฐ ํ™”๋ฉด๋งˆ๋‹ค lifecycle์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

Scene๊ตฌํ˜„์€ ์„ ํƒ์‚ฌํ•ญ์œผ๋กœ info.plist์—์„œ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

ํ•œ๋ฒˆ ์ •๋ฆฌ๋ฅผ ํ•˜๋ฉด

  •  iOS13 ๋ฐฐํฌ ํ›„ ๋ฉ€ํ‹ฐ ์œˆ๋„์šฐ ์ง€์›์œผ๋กœ lifecycle์˜ ํšจ์œจ์ ์ธ ๊ด€๋ฆฌ๊ฐ€ ํ•„์š”
  • App Delegate(process + UI) -> App Delegate(process + session) + Scene Delegate(UI)๋กœ ์ฒด์ œ ๋ณ€๊ฒฝ

 

Scene Base App Lifecycle

๋ณด์—ฌ๋“œ๋ฆด ๊ทธ๋ฆผ์€ Scene Delegate์˜ 

๋จผ์ € ๊ทธ๋ฆผ์„ ๋ณด๊ณ  ์„ค๋ช…๋“œ๋ฆด๊ฒŒ์š”

 

 

Unattached

UIKit์ด scene์„ ์•„์ง session์— ์—ฐ๊ฒฐ์‹œํ‚ค์ง€ ์•Š์€ ์ƒํƒœ์ž…๋‹ˆ๋‹ค. ์•„์ง UI๊ฐ€ ํ™”๋ฉด์— ๋ณด์ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

 

 

Foreground

UI๊ฐ€ ํ™”๋ฉด์— ๋ณด์ด๋Š” ์ƒํƒœ์ž…๋‹ˆ๋‹ค. ์ƒํƒœ๋Š” active, inactive ๋กœ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

active ์ƒํƒœ์—์„œ๋Š” ์‚ฌ์šฉ์ž์™€์˜ ์ธํ„ฐ๋ ‰์…˜, UI ์—…๋ฐ์ดํŠธ, ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์ž‘์—…์„ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

inactive ์ƒํƒœ์—์„œ๋Š” ํ™”๋ฉด์€ ๋ณด์ด์ง€๋งŒ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์ž‘์—…, ์‚ฌ์šฉ์ž์™€์˜ ์ธํ„ฐ๋ ‰์…˜์„ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

 

์œ„์˜ ์‚ฌ์ง„์—์„œ ๋ณด๋ฉด 2๊ฐ€์ง€์˜ ์ƒํƒœ๋ณ€ํ™” ๊ณผ์ •์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

Unattatched -> Foreground-Inactive -> Foreground-Active

์ด ๊ณผ์ •์—์„œ๋Š” Scene์ด session์— ์—ฐ๊ฒฐ๋˜๊ณ , ์‚ฌ์šฉ์ž์™€ ์ธํ„ฐ๋ž™์…˜์„ ์œ„ํ•ด

UI๊ฐ€ ์ดˆ๊ธฐํ™” ๋˜๊ณ , task ์ˆ˜ํ–‰์„ ์œ„ํ•ด ๊ธฐ๋ณธ ์ž‘์—…์ด ์ˆ˜ํ–‰๋œ ํ›„ 

ํ™”๋ฉด์ด ๊ธฐ๊ธฐ์— ๋‚˜ํƒ€๋‚˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

 Foreground-Active -> Foreground-Inactive -> Bacground

์ด ๊ณผ์ •์€ ์—ฌ๋Ÿฌ ์ผ€์ด์Šค๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. 

๊ฐ‘์ž๊ธฐ ์ „ํ™”๊ฐ€ ์˜ค๊ฑฐ๋‚˜ ์•Œ๋žŒ์ด ์šธ๋ฆฌ๋˜์ง€, ์‚ฌ์šฉ์ž๊ฐ€ ๋ฐฐ๊ฒฝํ™”๋ฉด์œผ๋กœ ๊ฐ„๋‹ค๋˜์ง€

์ด๋•Œ๋Š” ์‚ฌ์šฉ์ž์˜ ์ธํ„ฐ๋ ‰์…˜์ด๋‚˜ ์ž‘์—…์„ ๋ฐ›์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

 

Background

 ์•ฑ์ด ํ™”๋ฉด์— ๋ณด์ด์ง€ ์•Š๋Š” ์ƒํƒœ์ž…๋‹ˆ๋‹ค.

ํ•ด๋‹น ์ƒํƒœ์—์„œ๋Š” ์•ฑ์ด ์‹คํ–‰๋  ์ˆ˜ ์žˆ์ง€๋งŒ ์ตœ์†Œํ•œ์˜ ์ž‘์—…๋งŒ ํ—ˆ์šฉ๋ฉ๋‹ˆ๋‹ค.

ํ•ด๋‹น ๊ณผ์ •์—์„œ๋Š” ์•ฑ์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ตœ๋Œ€ํ•œ ์ •๋ฆฌํ•˜๊ณ  ์Šค๋ƒ…์ƒท์„ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.

 

Suspended

Scene์ด session์— ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์ง€ ์•Š์€ ์ƒํƒœ์ž…๋‹ˆ๋‹ค.

background์˜ ์ž‘์—…๋„ ๋ชจ๋‘ ์ข…๋ฃŒ๋˜์–ด ์•„๋ฌด ์ž‘์—…๋„ ํ•˜์ง€ ์•Š์€ ์ƒํƒœ์ด๋ฉฐ

๊ธฐ๊ธฐ์˜ ๋ฆฌ์†Œ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ƒํƒœ์ž…๋‹ˆ๋‹ค.

 

Background vs Suspended

๋‘๊ฐœ์˜ ๊ฐœ๋…์ด ๋น„์Šทํ•ด ๋ณด์ผ ์ˆ˜ ์žˆ์ง€๋งŒ ์•ฝ๊ฐ„ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

 

Background์ƒํƒœ์—์„œ ์ตœ์†Œ ์ž‘์—…์ด ๋๋‚˜๊ฑฐ๋‚˜,

์•„๋ฌด ์ž‘์—…๋„ ํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ Suspended ์ƒํƒœ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

 

๊ธฐ๊ธฐ์—์„œ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋ถ€์กฑํ•  ๊ฒฝ์šฐ

Suspended ์ƒํƒœ์— ์žˆ๋Š” ์•ฑ๋“ค์„ ์šฐ์„ ์ ์œผ๋กœ 

๋ฉ”๋ชจ๋ฆฌ ํ•ด์ œ๋ฅผ ์‹œํ‚ต๋‹ˆ๋‹ค.

 

 

App Base App Lifecycle

 

App Base ์—์„œ๋„ ๋‚˜์˜จ ์ƒํƒœ๋Š” ํฌ๊ฒŒ ๋‹ค๋ฅด์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

 

๋‹ค๋งŒ ๋ชจ๋“  ์ƒ๋ช…์ฃผ๊ธฐ ๊ณผ์ •์„ AppDelegate์—์„œ ์ฒ˜๋ฆฌํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์—

Not Running ์ƒํƒœ๊ฐ€ ์žˆ์–ด ์•ฑ ์‹คํ–‰์— ๊ด€๋ จ๋œ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

 

 

 

๊ธ€์— ๋Œ€ํ•œ ํ”ผ๋“œ๋ฐฑ์€ ์–ธ์ œ๋‚˜ ํ™˜์˜์ž…๋‹ˆ๋‹คใ…Žใ…Ž

๊ธ€ ์ฝ์–ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

 

 

์ฐธ๊ณ ์ž๋ฃŒ

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

 

Managing your app’s life cycle | Apple Developer Documentation

Respond to system notifications when your app is in the foreground or background, and handle other significant system-related events.

developer.apple.com

https://developer.apple.com/documentation/uikit/app_and_environment/scenes/preparing_your_ui_to_run_in_the_foreground

 

Preparing your UI to run in the foreground | Apple Developer Documentation

Configure your app to appear onscreen.

developer.apple.com

https://developer.apple.com/documentation/uikit/app_and_environment/scenes/preparing_your_ui_to_run_in_the_background

๋Œ“๊ธ€
๊ณต์ง€์‚ฌํ•ญ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
์ตœ๊ทผ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€
Total
Today
Yesterday
๋งํฌ
ยซ   2024/05   ยป
์ผ ์›” ํ™” ์ˆ˜ ๋ชฉ ๊ธˆ ํ† 
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
๊ธ€ ๋ณด๊ด€ํ•จ