[iOS] AppDelegate vs SceneDelegate ์ฐจ์ด

Madeline๐Ÿ‘ฉ๐Ÿปโ€๐Ÿ’ปยท2024๋…„ 1์›” 3์ผ
0

iOS study

๋ชฉ๋ก ๋ณด๊ธฐ
27/50

๐ŸŽ„
์˜ค๋Š˜์€ AppDelegate์™€ SceneDelegate์˜ ์ฐจ์ด์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž!
์ด ์ด์•ผ๊ธฐ๋ฅผ ํ•˜๊ธฐ์— ์•ž์„œ์„œ ์•ฑ์˜ ์ƒ๋ช…์ฃผ๊ธฐ๋ฅผ ์•Œ์•„์•ผ ํ•œ๋‹ค.

์•ฑ์˜ ์ƒ๋ช…์ฃผ๊ธฐ?

Lifecycle์ด๋ผ๊ณ ๋„ ๋ถ€๋ฅด๋Š” ์•ฑ์˜ ์ƒ๋ช…์ฃผ๊ธฐ๋Š”
์˜ˆ๋ฅผ ๋“ค์–ด ์•„์ดํฐ์—์„œ ์„ค์ • > ๋ฐฐํ„ฐ๋ฆฌ๋ฅผ ๋ณด๋ฉด, ์‹ค์ œ๋กœ ์•ฑ์„ ๋ช‡์‹œ๊ฐ„ ์ผ๊ณ , ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์–ด๋–ป๊ฒŒ ๋™์ž‘๋˜์—ˆ๋Š”์ง€ ๋‚˜์˜จ๋‹ค.

๋ฐฐํ„ฐ๋ฆฌ์— ๋Œ€ํ•œ ์• ํ”Œ ๊ณต์‹ ๋ฌธ์„œ์—๋„ "๋ฐฑ๊ทธ๋ผ์šด๋“œ"๋ผ๋Š” ๋ง์ด ๋‚˜์˜ค๋Š”๋ฐ, ์‰ฝ๊ฒŒ ์„ค๋ช…ํ•˜์ž๋ฉด ์šฐ๋ฆฌ๊ฐ€ ๋ฉœ๋ก ์•ฑ์—์„œ ์Œ์•…์„ ์žฌ์ƒํ•˜๊ณ , ์œ ํŠœ๋ธŒ ์ž‘์€ํ™”๋ฉด์œผ๋กœ ์˜์ƒ์„ ๋ณด๋Š” ๊ฒƒ์„ ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.

์šฐ๋ฆฌ๋Š” ์•ฑ์— ์ง„์ž…ํ–ˆ๋Š”์ง€, ์œ ์ €๊ฐ€ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š”์ง€์— ๋Œ€ํ•œ ์—ฌ๋ถ€๋ฅผ ํ†ตํ•ด ์•ฑ์˜ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•œ๋‹ค. ์•ฑ์˜ ์ƒํƒœ ๊ด€๋ฆฌ๋Š” 5๊ฐ€์ง€๋กœ ๋‚˜๋‰œ๋‹ค.

๐Ÿฅย 1. Not Running

  • ์•ฑ์„ ์‹œ์ž‘ํ•˜๊ธฐ ์ „ ์ƒํƒœ๋ฅผ ๋งํ•œ๋‹ค.

  • ์œ ์ €๊ฐ€ ์•ฑ์— ์ง„์ž…ํ•˜๋ฉด, Active, Inactive ์ƒํƒœ๊ฐ€ ๋œ๋‹ค. ์ด๋ฅผ Foreground๋กœ ๋“ค์–ด์™”๋‹ค๊ณ  ํ•œ๋‹ค.

๐Ÿฅย  2. Active(Foreground)

  • ์•ฑ์ด ํ™”๋ฉด์—์„œ ์‹คํ–‰์ค‘์ธ ์ƒํƒœ๋ฅผ ๋งํ•œ๋‹ค.
  • ์•„์ดํฐ์—์„œ active ์ƒํƒœ์ธ ์•ฑ์€ ํ•ญ์ƒ 1๊ฐœ๋‹ค.

๐Ÿฅย  3. Inactive(Foreground)

  • ์•ฑ์ด ํ™”๋ฉด์—์„œ ์‹คํ–‰์ค‘์ด๋‚˜ ์–ด๋–ค ์‹ ํ˜ธ๋„ ๋ฐ›์ง€ ์•Š๋Š” ์ƒํƒœ๋ฅผ ๋งํ•œ๋‹ค.

๐Ÿฅย  4. Background

  • ์•ฑ์ด ํ™”๋ฉด์— ๋ณด์ด์ง€ ์•Š์ง€๋งŒ, ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ์žˆ๋Š” ์ƒํƒœ๋ฅผ ๋งํ•œ๋‹ค.

๐Ÿฅย  5. Suspend

  • ์•ฑ์ด ๊ณง ์ข…๋ฃŒ๋  ์ƒํƒœ๋ฅผ ๋งํ•œ๋‹ค.

์ƒ๊ฐํ•ด๋ณด๋ฉด, ๋ฐฑ๊ทธ๋ผ์šด๋“œ์— ์žˆ๋Š” ์•ฑ์„ ๋‹ค์‹œ ํ‚ค๋ฉด, ๋‹ค์‹œ LaunchScreen ๋ถ€ํ„ฐ ๋œฐ ๋•Œ๊ฐ€ ์žˆ๊ณ , ๋‚ด๊ฐ€ ์ด์ „์— ์“ฐ๋˜ ํ™”๋ฉด๋ถ€ํ„ฐ ์ผœ์งˆ ๋•Œ๊ฐ€ ์žˆ๋‹ค.

โ†’ ๊ฐ ์•ฑ์— ๋”ฐ๋ผ ํ•„์š”ํ•œ ์‹œ์ ์— ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋งŽ์ด ํ•„์š”ํ•˜๋ฉด ์•Œ์•„์„œ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์ •๋ฆฌ(Suspendโ†’Not Running์œผ๋กœ)๋ฅผ ํ•  ๋•Œ๊ฐ€ ์žˆ๋‹ค.

๋”ฐ๋ผ์„œ ์•ฑ์„ ๊ฐœ๋ฐœํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์•ฑ์˜ ์ƒํƒœ ์ข…๋ฅ˜๋ฅผ ์•Œ์•„์•ผ ํ•œ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ด๊ฑธ ๊ด€๋ฆฌํ•˜๋Š”๊ฒŒ AppDelegate!!!

xcode๋กœ ์ƒˆ ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ค๋ฉด(Storyboard) ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ธฐ๋ณธ ํŒŒ์ผ๋“ค์ด ์ƒ์„ฑ๋œ๋‹ค.

AppDelegate? SceneDelegate?

์ฐธ๊ณ ๋กœ iOS 13 ์ด์ „ ๋ฒ„์ „ ์•ฑ์€ SceneDelegate๊ฐ€ ์—†์„ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ ์ดํ›„์— ๋‚˜์˜จ๊ฑฐ๋ผ AppDelegate๋งŒ ์กด์žฌํ•  ์ˆ˜ ์žˆ๋‹ค.
AppDelegate๊ฐ€ ์•ฑ์˜ ์ƒ๋ช…์ฃผ๊ธฐ(์•ฑ์˜ ์‹คํ–‰๊ณผ ์ข…๋ฃŒ, ...) ๋ฐ UI์˜ ์ƒ๋ช…์ฃผ๊ธฐ(๋ฐฑ๊ทธ๋ผ์šด๋“œ ์ƒํƒœ ๋กœ์ง, ...)๋ฅผ ๋ชจ๋‘ ์ฒ˜๋ฆฌํ–ˆ๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด SceneDelegate๋Š” ์™œ ๋‚˜์™”๋‚˜?

iOS13์—์„œ ์ฒ˜์Œ์œผ๋กœ iPadOS๊ฐ€ ๋“ฑ์žฅํ–ˆ๋‹ค.
์ด์ „์— ์•„์ดํŒจ๋“œ๋Š” ์žˆ์—ˆ๋Š”๋ฐ iOS๊ฐ€ ๋“ค์–ด๊ฐ”๊ฑฐ๋“ .
(ํ•œ 4๋…„์ „๋งŒํ•ด๋„ ์•„์ดํฐ, ์•„์ดํŒจ๋“œ ์œ ์‚ฌํ•˜๊ฒŒ ๋™์ž‘ํ•จ.)

๊ทธ๋ž˜์„œ ๊ฐœ์„ ๋œ ์•„์ดํŒจ๋“œ์— ์ ํ•ฉํ•œ ๊ธฐ๋Šฅ์„ ์œ„ํ•ด(์•„์ดํŒจ๋“œ ๊ธฐ๋Šฅ ์ค‘ splitview - ์•ฑ 2๊ฐœ๋ฅผ ๋™์‹œ์— ๋„์šธ ์ˆ˜ ์žˆ์Œ, ๋ฉ€ํ‹ฐ์œˆ๋„์šฐ) iPadOS๋ฅผ ๋งŒ๋“ ๊ฑฐ๋‹ค.
spitview๋งŒํ•ด๋„ active์ธ ์ƒํƒœ๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์•„์ง€์ž–์•„. UI์˜ ์ƒ๋ช…์ฃผ๊ธฐ๊ฐ€ ๋‹ค์–‘ํ•ด์ง€๋ฉด์„œ ์ด๊ฑธ ๊ด€๋ฆฌํ•ด์ค„ ๊ฐ์ฒด๊ฐ€ ํ•„์š”ํ•ด์กŒ๋‹ค.
๊ทธ๋ž˜์„œ UI์˜ ์ƒํƒœ๋งŒ์„ ๊ด€๋ฆฌํ•˜๋Š” SceneDelegate๊ฐ€ ๋”ฐ๋กœ ์ƒ๊ธด๊ฑฐ๋‹ค.
๊ทธ๋ž˜์„œ ๊ฐ™์€ ์•ฑ์„ ์—ฌ๋Ÿฌ ๊ฐœ ์‹คํ–‰ํ•  ์ˆ˜๋„ ์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค!

๐Ÿ’ก ์ •๋ฆฌ

  • iOS 12 and earlier
    App Delegate์—์„œ Process, UI์˜ ์ƒ๋ช…์ฃผ๊ธฐ ๋ชจ๋‘ ๊ด€๋ฆฌํ–ˆ์Œ
  • iOS 13
    App Delegate: Process Lifecycle
    Scene Delegate: UI Lifecycle

๊ทธ๋ž˜์„œ ์ด์ „์— AppDelegate์—์„œ ๋‹ด๋‹นํ•˜๋˜ background, foreground ๋“ฑ์˜ UI ์ƒ๋ช…์ฃผ๊ธฐ๋ฅผ SceneDelegate์—์„œ ๋‹ด๋‹นํ•œ๋‹ค. ๊ทธ๋ ‡๊ฒŒ SceneDelegate์—์„œ Scene์ด ์ƒˆ๋กญ๊ฒŒ ์ƒ์„ฑ๋˜๊ณ  ์ข…๋ฃŒ๋˜๋Š” ํŠธ๋ฆฌ๊ฑฐ๋ฅผ AppDelegate์—๊ฒŒ ์•Œ๋ ค์คŒ์œผ๋กœ์จ AppDelegate๊ฐ€ ์•ฑ์˜ ์ƒ์„ฑ๊ณผ ์ข…๋ฃŒ ์‹œ์ ์„ ํ†ต์ œํ•  ์ˆ˜ ์žˆ๋‹ค.

๋”์ด์ƒ App Delegate์—์„œ UI์˜ ์ƒ๋ช…์ฃผ๊ธฐ๋ฅผ ๊ด€๋ฆฌํ•˜์ง€ ์•Š๊ฒŒ ๋œ๊ฑฐ๋‹ค!

๋ฐฐ๊ฒฝ์ง€์‹์„ ์•Œ์•˜์œผ๋‹ˆ ์ด์ œ AppDelegate์™€ SceneDelegate์— ๋Œ€ํ•ด ๋” ์ž์„ธํžˆ ์•Œ์•„๋ณด์ž.

AppDelegate

AppDelegate์˜ ๊ธฐ๋ณธ ํŒŒ์ผ์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

ํฌ๊ฒŒ 3๊ฐœ์˜ application ํ•จ์ˆ˜๊ฐ€ ๋ณด์ด๋Š”๋ฐ,

  • ์ฒซ๋ฒˆ์งธ function์€ ๋Ÿฐ์น˜์Šคํฌ๋ฆฐ๋•Œ ์ž‘๋™ํ•œ๋‹ค. ๊ทธ๋ž˜์„œ ๋Ÿฐ์น˜์Šคํฌ๋ฆฐ์˜ ์‹œ๊ฐ„์„ ๋Š˜๋ฆฌ๊ฑฐ๋‚˜ ํ•˜๋Š” ์ž‘์—…(sleep)์„ ์—ฌ๊ธฐ์—์„œ ์‹คํ–‰ํ•œ๋‹ค.

  • ๋‘๋ฒˆ์งธ๋Š” SceneDelegate๋ž‘ ์—ฐ๊ฒฐํ•˜๋Š” ์ž‘์—…์„ ํ•œ๋‹ค. connectingSceneSession์ด๋Ÿฐ ๋‹จ์–ด๋ฅผ ๋ณด๋ฉด ์ง๊ด€์ ์œผ๋กœ ์•Œ ์ˆ˜ ์žˆ๋‹ค.
    ์ƒˆ๋กœ์šด Scene์ด ํ•„์š”ํ• ๋•Œ๋งˆ๋‹ค ํ˜ธ์ถœ๋˜๊ณ , Scene์ด ์ถ”๊ฐ€๋˜๋ฉด UISceneSession ๋ผ์ดํ”„ ์‚ฌ์ดํด์—์„œ scene(_:willConnectTo:options:)๊ฐ€ ํ˜ธ์ถœ๋œ๋‹ค.

  • ์„ธ๋ฒˆ์งธ๋Š” discard, ๋๋‚ด๋Š” ์ž‘์—…๊ณผ ๊ด€๋ จ์ด ์žˆ๋‹ค.
    Called when the user discards a scene session.

์—ฌ๊ธฐ์—์„œ ๋˜ application ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด๋ณด๋ฉด ์ด๋ ‡๊ฒŒ ์•„๋ž˜์™€ ๊ฐ™์€ ํ•จ์ˆ˜๊ฐ€ ์ž๋™์™„์„ฑ์œผ๋กœ ๋œฌ๋‹ค.
์‚ฌ์ง„์— ๋ณด์ด๋Š” applicationDidEnterBackground์™€ ๊ฐ™์€ ํ•จ์ˆ˜๊ฐ€ ๋ฐ”๋กœ iOS 13๋ฒ„์ „ ์ด์ „์— ์žˆ๋˜๊ฑฐ๋‹ค. SceneDelegate์—†์ด UI ์ƒ๋ช…์ฃผ๊ธฐ ํ†ต์ œํ•˜๋Š” ์—ญํ• ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.

SceneDelegate

๋งˆ์ฐฌ๊ฐ€์ง€๋กœ SceneDelegate๋„ ๊ธฐ๋ณธ ์ฝ”๋“œ๊ฐ€ ์ž‘์„ฑ๋˜์–ด ์žˆ์„๊ฑฐ๋‹ค.
์ฃผ์„์—๋„ ์ž์„ธํžˆ ์„ค๋ช…์ด ๋˜์–ด์žˆ์ง€๋งŒ,

์•„๋ž˜์— ์žˆ๋Š” ํ•จ์ˆ˜ sceneDidEnterBackground()๋Š” Foreground -> background๋กœ ์ง„์ž…ํ•  ๋•Œ ์‹คํ–‰๋œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์œ ํˆฌ๋ธŒ ํ”„๋ฆฌ๋ฏธ์—„ ๊ฒฐ์ œ ์—ฌ๋ถ€์— ๋”ฐ๋ผ ๊ฒฐ์ œํ•œ ์‚ฌ๋žŒ์€ ์˜์ƒ์„ ๊ณ„์† ์žฌ์ƒํ•˜๊ฒŒ ํ•˜๊ณ , ์•ˆํ•œ ์‚ฌ๋žŒ์€ ์žฌ์ƒ ๋ง‰๋Š” ๊ธฐ๋Šฅ์„ ์—ฌ๊ธฐ์—์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

sceneWillEnterForeground()๋Š” ์•ฑ์ด ๋‹ค์‹œ Foreground๋กœ ์ง„์ž…ํ•  ๋•Œ, ๊ธˆ์œต, ๋ณด์•ˆ์ด ์ค‘์š”ํ•œ ์€ํ–‰์•ฑ์ธ ๊ฒฝ์šฐ, ๋‹ค์‹œ ์ธ์ฆํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๋„ฃ์„ ์ˆ˜ ์žˆ๋‹ค. ๋˜ ์นดํ†ก ์ž ๊ธˆ ๊ธฐ๋Šฅ ์„ค์ •์‹œ ์ž ๊ธˆํ™”๋ฉด ๋„์›Œ์ฃผ๋Š” ๊ธฐ๋Šฅ, ์œ ํŠญ ํ”„๋ฆฌ๋ฏธ์—„ ์•„๋‹Œ ์‚ฌ๋žŒ๋“คํ•œํ…Œ ๊ฒฐ์ œํ•˜์‹ค?ํ•˜๋Š” ํŒ์—… ๋„์šธ ์ˆ˜๋„ ์žˆ๊ฒ ๋‹ค.

iOS ๋ฒ„์ „ 12๋กœ ๋‚ฎ์ถ”๋ฉด ์ƒ๊ธฐ๋Š” ์ผ..

๊ทธ๋ž˜์„œ iOS ๋ฒ„์ „ 13์ด์ƒ์ธ ์•ฑ๋“ค์€ ์œ„์™€ ๊ฐ™์ด Process์™€ UI์˜ ์ƒ๋ช…์ฃผ๊ธฐ๋ฅผ ๋”ฐ๋กœ ๊ด€๋ฆฌํ•œ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด iOS ๋ฒ„์ „์ด 12๋ณด๋‹ค ์ด์ „์ด๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ?


SceneDelegate๊ฐ€ ๋ญ๋ƒ๊ณ  ๋ง‰ ์ด๋ ‡๊ฒŒ ์—๋Ÿฌ๊ฐ€ ๋œฌ๋‹ค.
์–ด๋–ป๊ฒŒ ๋Œ€์‘ํ•˜๋ƒ๋ฉด, ์•„๋ž˜ ์—๋Ÿฌ ๋‚ด์šฉ์ฒ˜๋Ÿผ available์„ ์“ฐ๋ฉด ๋œ๋‹ค.

์•„๋ž˜ ์‚ฌ์ง„๊ณผ ๊ฐ™์ด ์š”๋ ‡๊ฒŒ ํ•˜๋ฉด ๊ฐ ํ•จ์ˆ˜๋“ค์„ 13๋ฒ„์ „ ์ด์ƒ์ผ๋•Œ๋งŒ ์“ฐ๋ผ๋Š” ๋œป์ด๋‹ค.
์ด๊ฑธ AppDelegate์™€ SceneDelegate ์—๋Ÿฌ ๋‚œ ๋ถ€๋ถ„์— ์“ฐ๋ฉด ๋˜๊ฒ ๋‹ค.

@available(iOS 13.0, *)

์•„๋ž˜ ์‚ฌ์ง„์ฒ˜๋Ÿผ ์š”๋ ‡๊ฒŒ ํ•˜๋ฉด ํ•œ๋ฒˆ์— ๋˜์ง€~

<์‹ฌํ™” ํ•™์Šต ํ‚ค์›Œ๋“œ>

๐Ÿ”‘ @available

@available

@available(iOS 13.0, *)
  • ๋ฒ„์ „ ๋ช‡ ์ด์ƒ๋ถ€ํ„ฐ ์‹คํ–‰ํ•˜๋ผ๋Š” ๋œป์ž„
  • ํ•จ์ˆ˜(๋ฉ”์†Œ๋“œ), ํด๋ž˜์Šค ๋˜๋Š” ํ”„๋กœํ† ์ฝœ์—์„œ ์‚ฌ์šฉ๋œ๋‹ค.
@available(iOS 10.0, macOS 10.12, *)
// ์š”๋ ‡๊ฒŒ ์—ฌ๋Ÿฌ๊ฐœ์˜ ํ”Œ๋žซํผ์— ์ ์šฉ ๊ฐ€๋Šฅ
์ถœ์ฒ˜: https://zeddios.tistory.com/647 [ZeddiOS:ํ‹ฐ์Šคํ† ๋ฆฌ]

@unavailable

  • ์ง€์ •๋œ ํ”Œ๋žซํผ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Œ
@available(macOS, unavailable)
์ถœ์ฒ˜: https://zeddios.tistory.com/647 [ZeddiOS:ํ‹ฐ์Šคํ† ๋ฆฌ]

#available

#available(iOS 13.0, *)
  • ์–˜๋„ ๋ฒ„์ „ ๋ช‡ ์ด์ƒ๋ถ€ํ„ฐ ์‹คํ–‰ํ•˜๋ผ๋Š” ๋œป์ž„
  • if, guard๋ฌธ์—์„œ ์‚ฌ์šฉ๋œ๋‹ค. Bool์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
if #available(iOS 13.0, *) {
	// ์š”๋Ÿฐ์‹์œผ๋กœ ์‚ฌ์šฉํ•จ
}

๐Ÿ”‘ UIWindow

// SceneDelegate.swift
var window: UIWindow?

SceneDelegate์— ์œ„์™€ ๊ฐ™์€ ์ฝ”๋“œ๊ฐ€ ์žˆ๋‹ค.
์ด ์–˜๊ธฐ๋ฅผ ์ข€ ํ•˜์ž๋ฉด, ๊ฐ viewController์— entry point๋ฅผ ์ง€์ •ํ•ด์ฃผ๋ฉด ํ™”๋ฉด์— ์•ฑ ์ง„์ž…์ง€์ ์œผ๋กœ ์ž‘์šฉํ•˜๋Š” ๊ฑธ ์ƒ๊ฐํ•ด๋ณด์ž.
๊ทผ๋ฐ ๊ทธ ํ™”๋ฉด์„ ๋ฐ”๋กœ ์•„์ดํฐ display์— ๋„์šฐ๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ, ์‚ฌ์‹ค์ƒ ์•„์ดํฐ ํ™”๋ฉด์—๋Š” Window๋ผ๋Š”๊ฒŒ ๋„์›Œ์ง€๊ณ , viewController๋Š” Window์— ๋“ค์–ด๊ฐ€๋Š”๊ฑฐ๋‹ค.
๊ทธ๋Ÿฌ๋‹ˆ๊น ์šฐ๋ฆฌ๊ฐ€ ๋งŒ๋“ค์–ด๋†“์€ ํ™”๋ฉด์„ ์œˆ๋„์šฐ์— ๋†“์œผ๋ฉด, ์•„์ดํฐ ํ™”๋ฉด์—๋Š” ์œˆ๋„์šฐ๋งŒ ๋”ฑ ๋ณด์—ฌ์ค€๋‹ค๋Š” ๋ง์ž„!

๊ทธ๋ž˜์„œ SceneDelegate์— UIWindow๊ฐ€ ์žˆ๋Š” ์ด์œ ๋‹ค.
์Šคํ† ๋ฆฌ๋ณด๋“œ์—์„œ ๋‚ด๋ถ€์ ์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์งœ์„œ, Window์— ๋„์šฐ๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ.
๊ฒฐ๋ก : ์‹ค์งˆ์ ์œผ๋กœ ํ™”๋ฉด์— ๋„์šฐ๋Š”๊ฑด UIWindow!

๊ทผ๋ฐ ๐Ÿ‘ฟ ๋ฌธ์ œ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค.

iOS13์ด์ƒ์ผ ๋•Œ์—๋งŒ SceneDelegate ์ž‘๋™ํ•˜๊ฒŒ ํ•˜๋ฉด, iOS12์ดํ•˜์—๋Š” UIWindow๊ฐ€ ์—†๊ฒ ์ง€?? ๊ทธ๋ž˜์„œ ๋Œ๋ ค๋ณด๋ฉด ๊นŒ๋งŒํ™”๋ฉด๋งŒ ๋œฌ๋‹ค.
๐ŸšจAppDelegate์—์„œ ์ด ๊ธฐ๋Šฅ ๊ตฌํ˜„ํ•ด์ค˜์•ผ๋จ.๐Ÿšจ
(๊ฐ€๋” ์ฑ„์šฉ๊ณผ์ œ์— ๋‚˜์˜จ๋‹ค๊ณ  ํ•œ๋‹ค)

profile
Major interest in iOS ๐Ÿ€ & ๐ŸŽ

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