[iOS] AppDelegate, SceneDelegate

Kiwiยท2024๋…„ 4์›” 25์ผ

iOS

๋ชฉ๋ก ๋ณด๊ธฐ
13/15
post-thumbnail

xcode์—์„œ iosApp ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ค๋ฉด ๊ผญ ์ƒ์„ฑ๋˜๋Š” ๋‘ ๋…€์„๋“ค์ด ์žˆ๋‹ค. ๋ฐ”๋กœ AppDelegate.swift์™€ SceneDelegate.swift!

๐ŸŒณ AppDelegate.swift

์ด ํŒŒ์ผ์€ ์•ž์—์„œ ๋งํ–ˆ๋‹ค์‹ถ์ด iOS ์•ฑ์˜ ์ „๋ฐ˜์ ์ธ ์ƒ๋ช…์ฃผ๊ธฐ๋ฅผ ๊ด€๋ฆฌํ•œ๋‹ค๊ณ  ๋ณด๋ฉด ๋œ๋‹ค! (์—ฌ๊ธฐ ์ฐธ๊ณ )

๐ŸŒฟ AppDelegate.swift์˜ ์ฃผ์š” ๋ฉ”์„œ๋“œ:

  • application(_:willFinishLaunchingWithOptions:) : ์•ฑ์ด ๊ตฌ๋™๋˜์–ด ํ•„์š”ํ•œ ์ดˆ๊ธฐ ์‹คํ–‰ ๊ณผ์ •์ด ์™„๋ฃŒ๋˜๊ธฐ ์ง์ „์— ํ˜ธ์ถœ
  • application(_:didFinishLaunchingWithOptions:) : ์•ฑ์ด ์‚ฌ์šฉ์ž์—๊ฒŒ ํ™”๋ฉด์œผ๋กœ ํ‘œ์‹œ๋˜๊ธฐ ์ง์ „์— ํ˜ธ์ถœ
  • applicationDidBecomeActive(_:) : ์•ฑ์ด ํ™œ์„ฑ ์ƒํƒœ๋กœ ์ „ํ™˜๋œ ์งํ›„์— ํ˜ธ์ถœ
  • applicationDidEnterBackground(_:) : ์•ฑ์ด ๋ฐฑ๊ทธ๋ผ์šด๋“œ๋กœ ์ด๋™ํ•œ ์งํ›„์— ํ˜ธ์ถœ
  • applicationWillTerminate(_:) : ์•ฑ์ด ์ข…๋ฃŒ๋˜๊ธฐ ์ง์ „์— ํ˜ธ์ถœ




๐ŸŒณ SceneDelegate.swift

SceneDelegate๋Š” iOS 13๋ถ€ํ„ฐ ์ถ”๊ฐ€๋œ ํด๋ž˜์Šค๋กœ, iOS ์•ฑ์˜ ๋ฉ€ํ‹ฐ ํƒœ์Šคํ‚น๊ณผ ๋‹ค์ค‘ ์ฐฝ ๊ด€๋ จ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•œ๋‹ค. tableViewDelegate๊ฐ€ tableView์˜ ๋™์ž‘๊ณผ ์‚ฌ์šฉ์ž ์ธํ„ฐ๋ ‰์…˜์„ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ SceneDelegate๋Š” Scene์— ๋Œ€ํ•ด ์œˆ๋„์šฐ์™€ ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ๊ด€๋ฆฌํ•œ๋‹ค.

์—ฌ๊ธฐ์„œ ์ž ๊น?
Scene์€ ๋ญ๊ณ  ์œˆ๋„์šฐ๋ž‘ ๋ทฐ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ์ •ํ™•ํžˆ ๋ญ”๋ฐ?

์œˆ๋„์šฐ๋Š” iOS์—์„œ ๋””๋ฐ”์ด์Šค์˜ ์Šคํฌ๋ฆฐ์„ ๋นˆํ‹ˆ์—†์ด ์ฑ„์šฐ๊ธฐ ์œ„ํ•œ ๊ฐ์ฒด๋กœ ํ•ญ์ƒ ์œ ์ € ์ธํ„ฐํŽ˜์ด์Šค์˜ ์ตœ์ƒ์œ„์— ์œ„์น˜ํ•œ๋‹ค. ๋ทฐ์˜ ์ผ์ข…์ด์ง€๋งŒ ์ง์ ‘ ์ฝ˜ํ…์ธ ๋ฅผ ๊ฐ€์ง€์ง€๋Š” ์•Š์œผ๋ฉฐ ์ฝ˜ํ…Œ์ธ ๋ฅผ ๊ฐ€์ง„ ๋ทฐ๋ฅผ ๋‚ด๋ถ€์— ๋ฐฐ์น˜ํ•˜์—ฌ ํ™”๋ฉด์— ์ถœ๋ ฅํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค! ํ™”๋ฉด์ด ์ „ํ™˜๋˜๋„ ์ด ์œˆ๋„์šฐ ๊ฐ์ฒด๋Š” ์ „ํ™˜๋˜์ง€ ์•Š์œผ๋ฉด ๋‚ด๋ถ€์— ๋ฐฐ์น˜ํ•œ ๋ทฐ๊ฐ€ ๋ณ€๊ฒฝ๋œ๋‹ค๋Š”์ ! ๋Œ€๋ถ€๋ถ„์˜ iOSApp์€ life time๋™์•ˆ ํ•˜๋‚˜์˜ window๋งŒ ์ƒ์„ฑํ•˜๊ณ , ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ํ•œ๋‹ค.

์œˆ๋„์šฐ์‹ ์€ ์ด๋Ÿฌํ•œ ์œˆ๋„์šฐ๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ  . ์•ฑ์ด ๋‹ค์ค‘ ์ฐฝ ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰๋  ๋•Œ ๊ฐ ์ฐฝ๋งˆ๋‹ค ๋ณ„๋„์˜ UIWindowScene์ด ํ•„์š”(์•„์ดํŒจ๋“œ์—์„œ ๋ถ„ํ• ํ™”๋ฉด ๋„์šฐ๋Š” ๊ฒƒ๊ณผ ๊ฐ™์ด!)

๋ทฐ๋Š” ํ™”๋ฉด์˜ ์ฝ˜ํ…์ธ ๋ฅผ ๋งํ•œ๋‹ค. ํ•˜๋‚˜์˜ ์œˆ๋„์šฐ์— ์—ฌ๋Ÿฌ ๋ทฐ๊ฐ€ ๊ฐ์ž์˜ ์œ„์น˜์— ๋†“์—ฌ์žˆ์„๊ฒƒ์ด๋‹ค. ํ•œ ํ™”๋ฉด์— topView, bottomView ๋“ฑ๋“ฑ์ด ๊ฐ์ž์˜ ์œ„์น˜์—์„œ ๊ฐ์ž์˜ ์—ญํ• ์„ ํ•˜๊ณ  ์žˆ๋Š”๊ฒƒ!

๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ๋Š” ์œˆ๋„์šฐ์™€ ๋ทฐ๋ฅผ ์—ฐ๊ฒฐํ•ด์ฃผ๋Š” ๊ฐ์ฒด์ด๋‹ค. ๋ทฐ์ปจ์€ ๋ทฐ์˜ ๊ณ„์ธต์„ ๊ด€๋ฆฌํ•˜์—ฌ ์œˆ๋„์šฐ์— ์ „๋‹ฌํ•˜๊ณ , ์‚ฌ์šฉ์ž ์ธํ„ฐ๋ ‰์…˜์„ ์œˆ๋„์šฐ๋กœ๋ถ€ํ„ฐ ์ „๋‹ฌ๋ฐ›์•„ ์ฒ˜๋ฆฌํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค. ์œˆ๋„์šฐ์™€ ๋ทฐ์‚ฌ์ด๋ฅผ ์ค‘๊ณ„ํ•ด์ฃผ๋Š”๊ฒƒ!

๋Œ€๋žต์ ์œผ๋กœ ๊ตฌ์กฐ๋Š” ์ด๋Ÿฌํ•œ๋ฐ, UIWindowScene์ด ์—ฌ๋Ÿฌ UIWindow๋ฅผ ๊ฐ–๋Š” ๊ฒƒ์€ ๊ฐ ์ฐฝ์ด ๋‹ค๋ฅธ UIWindow์— ํ‘œ์‹œ๋  ๋•Œ ๋ฐœ์ƒํ•˜๋ฉฐ, UIScreen์ด ์—ฌ๋Ÿฌ UIWindowScene์„ ๊ฐ–๋Š” ๊ฒƒ์€ iOS ์•ฑ์ด ์—ฌ๋Ÿฌ ์ฐฝ์„ ์ง€์›ํ•  ๋•Œ ๋ฐœ์ƒํ•œ๋‹ค.

์œˆ๋„์šฐ๋Š” ํ•˜๋‚˜์˜ ๋ทฐ์ปจ์„ ๋ฃจํŠธ๋ทฐ๊ฑด์œผ๋กœ ์ง€์ •ํ•˜์—ฌ ์ฐธ์กฐํ•œ๋‹ค. ๋ฃจํŠธ ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ๋กœ ์ง€์ •๋˜์ง€ ๋ชปํ•œ ๋‚˜๋จธ์ง€ ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ๋“ค์€ ๋ฃจํŠธ ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ์˜ ๊ด€๋ฆฌ ๋Œ€์ƒ์œผ๋กœ ์—ฐ๊ฒฐ๋˜๊ฑฐ๋‚˜ ํ˜น์€ ๋‹ค๋ฅธ ๋ฐฉ์‹์œผ๋กœ ์ด์–ด์ง€๊ธฐ๋„ ํ•˜์ง€๋งŒ๏ผŒ์ด๋“ค์€ ์œˆ๋„์šฐ ๊ฐ์ฒด์˜ ์ง์ ‘์ ์ธ ๊ด€๋ฆฌ๋Œ€์ƒ์ด ์•„๋‹ˆ๋‹ค.. ์œˆ๋„์šฐ ๊ฐ์ฒด๋Š” ํ•ญ์ƒ ๋ฃจํŠธ ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ๋งŒ์„ ์ฐธ์กฐํ•œ๋‹ค.

๐ŸŒฟ SceneDelegate.swift์˜ ์ฃผ์š” ๋ฉ”์„œ๋“œ:

scene(:willConnectTo:options:): ์ƒˆ๋กœ์šด Scene์ด ์ƒ์„ฑ๋˜๊ณ  ์œˆ๋„์šฐ๊ฐ€ ์—ฐ๊ฒฐ๋  ๋•Œ ํ˜ธ์ถœ. ์—ฌ๊ธฐ์„œ Scene์— ๋Œ€ํ•œ ์ดˆ๊ธฐ ์„ค์ •์„ ์ˆ˜ํ–‰
sceneDidDisconnect(
:): Scene์ด ์‹œ์Šคํ…œ์—์„œ ๋ถ„๋ฆฌ๋  ๋•Œ ํ˜ธ์ถœ
sceneWillEnterForeground(:): Scene์ด ํฌ๊ทธ๋ผ์šด๋“œ๋กœ ์ง„์ž…ํ•˜๊ธฐ ์ง์ „์— ํ˜ธ์ถœ
sceneDidEnterBackground(
:): Scene์ด ๋ฐฑ๊ทธ๋ผ์šด๋“œ๋กœ ๋“ค์–ด๊ฐˆ ๋•Œ ํ˜ธ์ถœ
sceneDidBecomeActive(:): Scene์ด ํ™œ์„ฑ ์ƒํƒœ๊ฐ€ ๋˜์—ˆ์„ ๋•Œ ํ˜ธ์ถœ.
sceneWillResignActive(
:): Scene์ด ๋น„ํ™œ์„ฑ ์ƒํƒœ๋กœ ์ „ํ™˜๋˜๊ธฐ ์ง์ „์— ํ˜ธ์ถœ





์ฐธ๊ณ 
https://developer.apple.com/documentation/uikit/view_controllers/managing_content_in_your_app_s_windows?ref=noah-ios.dev
https://noah-ios.dev/window-scene/

profile
๐Ÿฃ iOS Developer

0๊ฐœ์˜ ๋Œ“๊ธ€