๐ŸŽ ์•„์ด-์˜ค-์—์Šค/๐Ÿ“ฑ iOS ๊ฐœ๋ฐœ

[iOS - WWDC2019] UISceneDelegate: Multiple Window๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์•ฑ์˜ ์„ค๊ณ„

๊ฐœ๋ฐœํ•˜๋Š” ํ›ˆ์ด 2021. 9. 19. 17:53
๐ŸŽ WWDC19 ์„ธ์…˜์„ ๋ฒˆ์—ญํ•˜๋ฉฐ ๊ณต๋ถ€ํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค! ์˜์—ญ์ด๋‚˜ ์˜ค์—ญ์ด ์žˆ์„ ์ˆ˜ ์žˆ์œผ๋‹ˆ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์„ธ์…˜ ์˜์ƒ์„ ์ฐธ๊ณ ํ•ด์ฃผ์„ธ์š”!

App Delegate์™€ Scene Delegate

iOS 12๊นŒ์ง€์˜ App Delegate ์˜ ์—ญํ• ์„ ๋จผ์ € ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. App Delegate๋Š” ๋‘ ๊ฐ€์ง€ ์ฃผ์š”ํ•œ ์—ญํ• ์„ ๋‹ด๋‹นํ•˜๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ฒซ๋ฒˆ์งธ๋Š” ํ”„๋กœ์„ธ์Šค ๋ ˆ๋ฒจ์˜ ์ด๋ฒคํŠธ๋ฅผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์•Œ๋ฆฌ๋Š” ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‹œ์ž‘๋˜๊ฑฐ๋‚˜, ์ข…๋ฃŒ๋  ๋•Œ, AppDelegate๋ฅผ ํ†ตํ•ด ์ด๋ฒคํŠธ๋“ค์ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ „๋‹ฌ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‘๋ฒˆ์งธ ์—ญํ• ์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ž์‹ ์˜ UI์˜ ์ƒํƒœ๋ฅผ ์•Œ ์ˆ˜ ์žˆ๊ฒŒ๋” ํ•˜๋Š” ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

DidEnterForeGround, WillResignActive์™€ ๊ฐ™์€ ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ์‹œ์Šคํ…œ์€UI์˜ ์ƒํƒœ๋ฅผ ์•Œ ์ˆ˜ ์žˆ์—ˆ์ฃ . App Delegate์˜ ์ด๋Ÿฐ ์—ญํ• ์€ iOS 12๊นŒ์ง€๋Š” ํฐ ๋ฌธ์ œ๊ฐ€ ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ฐ€์ง€๊ณ , ์ด ํ”„๋กœ์„ธ์Šค๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํ•˜๋‚˜์˜ UI๋ฅผ ๊ฐ€์กŒ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

์—ฌ๋Ÿฌ๋ถ„๋“ค์ด ์‚ฌ์šฉํ•˜๋˜ AppDelegate๋Š” ์•„๋งˆ๋„ ์ด๋ ‡๊ฒŒ ๊ตฌ์„ฑ๋˜์–ด์žˆ๊ฒ ์ฃ  ์˜ˆ๋ฅผ ๋“ค์–ด, didFinishingLaunchingWithOptions ์—๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์—ฐ๊ฒฐํ•˜๊ณ  UI๋ฅผ ์„ค์ •ํ•˜๋Š”, ์ตœ์ดˆ 1ํšŒ๋งŒ ์‹คํ–‰ํ•˜๋Š” ์ž‘์—…๋“ค์ด ์ •์˜๋˜์–ด ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด๋Ÿฐ ํŒจํ„ด์€ iOS 12๊นŒ์ง€๋Š” ์•„์ฃผ์•„์ฃผ ๊ดœ์ฐฎ์•˜์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ iOS 13๋ถ€ํ„ฐ๋Š” ๋ถˆ๊ฐ€๋Šฅํ•˜์ฃ .

์™œ๋ƒํ•˜๋ฉด ์ด์ œ๋ถ€ํ„ฐ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์—ฌ์ „ํžˆ ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๋งŒ์„ ์‚ฌ์šฉํ•˜์ง€๋งŒ, ์—ฌ๋Ÿฌ๊ฐœ์˜ Scene ์„ธ์…˜์ด๋‚˜ UI ์ธ์Šคํ„ด์Šค๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๊ฒŒ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ App Delegate๋Š” ๋” ์ด์ƒ UI ์ƒ๋ช…์ฃผ๊ธฐ์™€ ๊ด€๋ จ๋œ ์ž‘์—…๋“ค์„ ์ฑ…์ž„์งˆ ์ˆ˜ ์—†๊ฒŒ๋ฉ๋‹ˆ๋‹ค. ๋Œ€์‹ , UISceneDelegate๋ฅผ ํ†ตํ•ด์„œ UI์™€ ๊ด€๋ จ๋œ ์ž‘์—…์„ ํ•˜๋„๋ก ๋ณ€๊ฒฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ์—ฌ๋Ÿฌ๋ถ„๋“ค์ด App Delegate์—์„œ ์ •์˜ํ–ˆ๋˜ UI์ž‘์—…๋“ค์„ ๊ทธ์™€ ๋Œ€์‘๋˜UISceneDelegate ์ด๋™ํ•ด์•ผํ•œ๋‹ค๋Š” ๋œป์ž…๋‹ˆ๋‹ค.

๋” ์ด์ƒ iOS๋Š” App Delegate์— ์กด์žฌํ•˜๋Š” UI๊ด€๋ จ๋œ ๋ฉ”์„œ๋“œ๋ฅผ ์‹คํ–‰ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด iOS 13์„ ์œ„ํ•ด ๊ตฌํ˜„ํ•˜๋ฉด iOS 12๋Š” ํ˜ธํ™˜ํ•˜์ง€ ๋ชปํ•˜๋Š”๊ฑธ๊นŒ์š”? ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค. UIApplicationDelegate์™€ UISceneDelegate๋ฅผ ๋ชจ๋‘ ๊ตฌํ˜„ํ•ด๋‘๋ฉด, ๋ฐฐํฌํ•˜๋Š” ๋ฒ„์ „์— ๋งž์ถ”์–ด UIKit์ด ์‹คํ–‰์ค‘์— ์ž์‹ ์—๊ฒŒ ๋งž๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ์ฐพ์•„๊ฐ‘๋‹ˆ๋‹ค.

AppDelegate๋Š” ์ถ”๊ฐ€์ ์ธ ์—ญํ• ์„ ํ•˜๋‚˜ ๋” ๋ถ€์—ฌ๋ฐ›์Šต๋‹ˆ๋‹ค. ์ด์ œ ์ƒˆ๋กœ์šด Scene Session์ด ์‹œ์ž‘๋˜๊ฑฐ๋‚˜ ์ข…๋ฃŒ๋˜๋ฉด AppDelegate๋Š” ์ด์— ๋Œ€ํ•œ ์•Œ๋ฆผ์„ ๋ฐ›๊ฒŒ๋ฉ๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์— ๋ณด์ด๋Š” ํŒŒ๋ž€์ƒ‰ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ฒ˜์Œ๋ถ€ํ„ฐ ์‹คํ–‰ํ•ด๋ณธ๋‹ค๊ณ  ํ•ฉ์‹œ๋‹ค.

๊ฐ€์žฅ ๋จผ์ € App Delegate๊ฐ€ didFinishLaunching์„ ๋ฐ›์Šต๋‹ˆ๋‹ค. ์—ฌ์ „ํžˆ UI๊ณผ ๊ด€๋ จ๋˜์–ด ์žˆ์ง€ ์•Š์€ ์ดˆ๊ธฐ ์„ค์ •๋“ค์€ ์ด๊ณณ์—์„œ ํ•ด์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ณง๋ฐ”๋กœ ์‹œ์Šคํ…œ์ด Scene Session์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ์‹ค์ œ๋กœ UI Scene ์„ ์ƒ์„ฑํ•˜๊ธฐ ์ „์—, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—๊ฒŒ UIScene Configuration์„ ์‹œ์Šคํ…œ์ด ์š”๊ตฌํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ Configuration์€ ์–ด๋–ค ์Šคํ† ๋ฆฌ๋ณด๋“œ๋‚˜, Scene delegate, scene์˜ ์„œ๋ธŒํด๋ž˜์Šค๋“ค์„ Scene๊ณผ ํ•จ๊ป˜ ์ƒ์„ฑํ• ์ง€ ๊ฒฐ์ •ํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

 

์—ฌ๊ธฐ๊นŒ์ง€ ์‹คํ–‰๋˜๋ฉด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์‹คํ–‰๋˜๊ณ  Scene Session์ด ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์•„์ง UI๋Š” ๋ณผ ์ˆ˜ ์—†์ฃ . ์ด ์‹œ์ ์—์„œ SceneDelegate๊ฐ€ Scene Session๊ณผ ์—ฐ๊ฒฐ๋˜๋Š” ์ž‘์—…์ด ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค.

UISceneDelegate์—์„œ๋Š” ์ „๋‹ฌ๋œ UIScene ์„ ํ†ตํ•ด UIWindow๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋” ์ค‘์š”ํ•œ ๊ฒƒ์€ ์ƒ์„ฑ๋œ window์™€ ๊ด€๋ จ๋œ ์‚ฌ์šฉ์ž์˜ ํ™œ๋™์ด๋‚˜ ์ƒํƒœ ๋ณต์›์„ ํ™•์ธํ•ด์•ผํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ƒํƒœ๋ฅผ ๋ณต์›ํ•˜๋Š” ๋‚ด์šฉ์€ ์ž ์‹œ ๋’ค์— ๋” ์ž์„ธํžˆ ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์ด์ œ ์šฐ๋ฆฌ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ™”๋ฉด์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค!

์ด์ œ ์—ฌ๊ธฐ์„œ ์‚ฌ์šฉ์ž๊ฐ€ ์Šค์™€์ดํ”„ํ•ด์„œ ํ™ˆ์œผ๋กœ ๋‹ค์‹œ ์ด๋™ํ•˜๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ์š”?
์ด์ „์ฒ˜๋Ÿผ willResignActive์™€ didEnterBackground ๊ฐ€ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์–ผ๋งˆ ์ •๋„์˜ ์‹œ๊ฐ„์ด ์ง€๋‚˜๋ฉด ์‹คํ–‰๋˜์—ˆ๋˜ Scene์˜ ์—ฐ๊ฒฐ์ด ๋Š์–ด์ง‘๋‹ˆ๋‹ค.

์—ฐ๊ฒฐ์ด ๋Š์–ด์ง„๋‹ค๋Š” ๊ฒƒ์€ ์–ด๋–ค ๊ฒƒ์„ ์˜๋ฏธํ• ๊นŒ์š”? Scene ์ด ๋ฉ”๋ชจ๋ฆฌ์—์„œ ํ•ด์ œ๋จ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด๋Š” ๊ณง sceneDelegate๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ํ•ด์ œ๋˜๊ณ  ์ด sceneDelegate๋กœ ์ƒ์„ฑํ–ˆ๋˜ window ๊ณ„์ธต๊ณผ ๋ทฐ ๊ณ„์ธต๋“ค์ด ๋ชจ๋‘ ํ•จ๊ป˜ ํ•ด์ œ๋จ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฐ ๋ฐฉ์‹์€ ํ•ด๋‹น Scene๊ณผ ๊ด€๋ จ๋˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ฐจ์ง€ํ•˜๊ณ  ์žˆ๋˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ฆฌ์†Œ์Šค๋ฅผ ํ•ด์ œํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋‚˜์ค‘์— ํ•ด๋‹น Scene ์ด ๋‹ค์‹œ ์‹œ์ž‘๋„๋ฆฌ ์ˆ˜๋„ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉ์ž ์ •๋ณด๋‚˜ ์ƒํƒœ๋ฅผ ์˜๊ตฌ์ ์œผ๋กœ ์‚ญ์ œํ•ด๋ฒ„๋ฆฌ๋ฉด ์•ˆ๋˜๊ฒ ์ฃ .

์ด๋ฒˆ์—๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์•ฑ์„ ์œ„๋กœ ์Šค์™€์ดํ”„ํ•ด์„œ ์™„์ „ํžˆ ์ข…๋ฃŒํ•˜๊ณ ์ž ํ•œ๋‹ค๋ฉด ์–ด๋–จ๊นŒ์š”? ์‹œ์Šคํ…œ์€ App Delegate ์˜ didDiscardSceneSession์„ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ์šฐ๋ฆฌ๋Š” ์‚ฌ์šฉ์ž๋ฐ์ดํ„ฐ๋‚˜ ์ƒํƒœ๋ฅผ ์™„์ „ํžˆ ์ง€์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฉ”๋ชจ ์•ฑ์—์„œ ์ž„์‹œ์ €์žฅ๋œ ์ •๋ณด๋ฅผ ์‚ญ์ œํ•˜๋Š” ๊ฒƒ ์ฒ˜๋Ÿผ์š”.

๋˜ ๋‹ค๋ฅธ ๊ฒฝ์šฐ์—๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์•ฑ ์Šค์œ„์ณ๋ฅผ ์—ด์–ด์„œ ์‹ค์ œ๋กœ๋Š” ์‹คํ–‰์ค‘์ด์ง€ ์•Š๋Š” ์•ฑ์„ ์ข…๋ฃŒํ•˜๊ณ ์ž ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๋งŒ์•ฝ ๊ทธ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‹คํ–‰์ค‘์ด์ง€ ์•Š๋‹ค๋ฉด, ์‹œ์Šคํ…œ์€ Discarded Session์„ ๊ทธ๋Œ€๋กœ ์ถ”์ ํ•˜๊ณ  ์žˆ๋‹ค๊ฐ€, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋‹ค์Œ์— ๋‹ค์‹œ ์‹คํ–‰๋์„ ๋•Œ ๋‹ค์‹œ ํ˜ธ์ถœํ•˜๊ฒŒ๋ฉ๋‹ˆ๋‹ค. (๊ฐœ์ธ์  ๊ฒฌํ•ด -> ๋ถˆํ•„์š”ํ•˜๊ฒŒ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋‹ค์‹œ ์‹คํ–‰ํ•˜๋Š” ์ž‘์—…์„ ํ•˜์ง€ ์•Š๊ณ  ๋‹ค์Œ๋ฒˆ์— ์‹คํ–‰๋˜์—ˆ์„ ๋•Œ ์ดˆ๊ธฐํ™”ํ•˜๋Š” ๊ณผ์ •์„ ์ง„ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด์„œ๊ฐ€ ์•„๋‹๊นŒ์š”..? ๋ช…ํ™•ํ•œ ์ด์œ ๋ฅผ ์•„์‹œ๋Š” ๋ถ„์ด ๊ณ„์‹œ๋ฉด ๋Œ“๊ธ€ ๋ถ€ํƒ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹คใ… )

์ƒํƒœ ๋ณต์›ํ•˜๊ธฐ

iOS13 ์—์„œ๋Š” Scene์„ ๊ธฐ๋ฐ˜์œผ๋กœํ•œ ์ƒํƒœ ๋ณต์›์ด ์•„์ฃผ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ์™œ ์ค‘์š”ํ•œ์ง€ ํ•œ๋ฒˆ ์•Œ์•„๋ณผ๊ฒŒ์š”.

์•ฑ ์Šค์œ„์ณ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌํ–‰์€ ์ค€๋น„ํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— 4๊ฐœ์˜ ๋ฌธ์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„ธ์…˜์„ ์‹คํ–‰ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋งŒ์•ฝ ์ œ๊ฐ€ ์—ฌํ–‰์ค€๋น„๋ฌผ ๋ฆฌ์ŠคํŠธ์™€ ์ผ์ •์— ์ง‘์ค‘ํ•˜๊ณ  ์‹ถ๋‹ค๊ณ  ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

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

์ด ๋ฌธ์ œ๋ฅผ ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ• ๊นŒ์š”? iOS13 ์€ ์ƒˆ๋กœ์šด Scene ๊ธฐ๋ฐ˜ ์ƒํƒœ๋ณต์› API๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์‚ฌ์šฉํ•˜๊ธฐ์— ์•„์ฃผ ๋‹จ์ˆœํ•˜์ฃ . ์ด์ œ ๋” ์ด์ƒ ๋ทฐ๊ณ„์ธต์„ ์ธ์ฝ”๋”ฉํ•  ํ•„์š”๊ฐ€ ์—†์ด window๋ฅผ ๋‹ค์‹œ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•œ ์ƒํƒœ๋ฅผ ์ธ์ฝ”๋”ฉํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด๋Š” NSUserActivity๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋งŒ์•ฝ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด handoff๋‚˜ spotlight ๊ฒ€์ƒ‰์„ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ์ด ํ™œ๋™๋“ค์„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ƒํƒœ๋กœ ์ธ์ฝ”๋”ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ƒํƒœ๋ณต์›์„ ์œ„ํ•œ ์•„์นด์ด๋ธŒ๋Š” ๋‹ค๋ฅธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๋“ค๊ณผ ๋™์ผํ•œ ๋ ˆ๋ฒจ์˜ ๋ณดํ˜ธ๋“ฑ๊ธ‰์„ ์‹œ์Šคํ…œ์— ์ œ๊ณตํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

์ฝ”๋“œ๋กœ๋Š” ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์„๊นŒ์š”? Scene Delegate์—์„œ ์šฐ๋ฆฌ๋Š” Scene์— ๋Œ€ํ•œ ์ƒํƒœ๋ณต์›์„ ๊ตฌํ˜„ํ•˜๊ณ  ํ˜„์žฌ window์—์„œ ๊ฐ€์žฅ ํ™œ๋ฐœํ•œ ์‚ฌ์šฉ์ž ํ™œ๋™์„ ์ฐพ๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด ํ™œ๋™์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

์‹œ๊ฐ„์ด ์ง€๋‚˜๊ณ  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋‹ค์‹œ foreground๋กœ ๋“ค์–ด์˜ค๋ฉด ํ•ด๋‹น sessiondl ์ƒํƒœ ๋ณต์› ํ™œ๋™์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ ์žˆ๋‹ค๋ฉด, ํ•ด๋‹น ํ™œ๋™์„ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•˜๊ณ , ์—†๋‹ค๋ฉด ์ƒˆ๋กœ์šด window๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

์ด๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ์ž๋“ค์€ ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ scene์ด ํ•ด์ œ๋˜์—ˆ๋Š”์ง€ ์•Œ ์ˆ˜ ์—†๊ฒŒ๋ฉ๋‹ˆ๋‹ค.

Scene๊ฐ„ ๋ฐ์ดํ„ฐ ๋™๊ธฐํ™”

๋งˆ์ง€๋ง‰์œผ๋กœ scene ๊ฐ„์˜ ๋™๊ธฐํ™”๋ฅผ ์–ด๋–ป๊ฒŒ ๋งž์ถ”๋Š”์ง€ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.


์ด๋ ‡๊ฒŒ ๋‘ ๊ฐœ์˜ scene์ด ์žˆ๊ณ  ๊ฐ scene์€ ์„œ๋กœ ๋‹ค๋ฅธ ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ์™€ scene ์ธ์Šคํ„ด์Šค๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๊ณ  ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ด๋ฉด, ํ•œ์ชฝ์—๋งŒ ์—…๋ฐ์ดํŠธ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

์™œ ์ด๋Ÿด๊นŒ์š”?

๋งŽ์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๋“ค์ด ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ตฌ์กฐ์ฒ˜๋Ÿผ, ๋ฒ„ํŠผ์ด๋‚˜ ์–ด๋–ค ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ, ์ด ์ด๋ฒคํŠธ๋“ค์€ ๋ทฐ์ปจํŠธ๋กค๋Ÿฌ์— ์ „๋‹ฌ๋˜๊ณ , ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ๋Š” ์ž์‹ ์ด ๊ฐ€์ง€๊ณ  ์žˆ๋Š” UI๋งŒ ์—…๋ฐ์ดํŠธํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

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

์ด๋Ÿฐ ๊ตฌ์กฐ๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ช‡๊ฐ€์ง€ ๋ฐฉ๋ฒ•๋“ค์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. delegate๋‚˜ notification์„ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ๊ณ , combine์„ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ์—ฌ๊ธฐ์„œ๋Š” ๊ฐ€๋ณ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์˜ˆ์ œ๋ฅผ ์‚ฌ์šฉํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

์ด ๋ฉ”์„œ๋“œ๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ์ „์†กํ•˜๋Š” ๋ฒ„ํŠผ์ด ๋ˆŒ๋ ธ์„ ๋•Œ์˜ ์ž‘์—…์„ ์ •์˜ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฉ”์‹œ์ง€ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ๋ทฐ๋ฅผ ์—…๋ฐ์ดํŠธ ํ•œ ๋’ค์— ๋ชจ๋ธ ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๊ด€ํ•˜๋„๋ก ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๊ฐ€ ๋จผ์ € ํ•ด์•ผํ•  ์ผ์€ ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ์ž๊ธฐ ์ž์‹ ์˜ ๋ทฐ ์ƒํƒœ๋ฅผ ๋ฐ”๊พธ์ง€ ๋ชปํ•˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ง€๊ธˆ์€ ์ผ๋‹จ ํ•ด๋‹น ์ฝ”๋“œ๋ฅผ ์ง€์šฐ๊ณ  ์ž ์‹œ ๋’ค์— ๋‹ค์‹œ ๋Œ์•„์˜ค๊ฒ ์Šต๋‹ˆ๋‹ค.

์ด์ œ๋Š” ๋ชจ๋ธ ์ปจํŠธ๋กค๋Ÿฌ์˜ add ๋ฉ”์„œ๋“œ๊ฐ€ ์–ด๋–ค ์—ญํ• ์„ ํ•˜๋Š”์ง€ ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋‹จ์ˆœํ•˜๊ฒŒ ์ƒˆ๋กœ์šด ๋ฉ”์‹œ์ง€๋ฅผ ์ €์žฅํ•˜๋„๋ก ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ์ด์ œ ๋ชจ๋ธ ์ปจํŠธ๋กค๋Ÿฌ๋Š” ๋‹ค๋ฅธ ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ๋‚˜ ์—ฐ๊ฒฐ๋œ scene์ด ์—…๋ฐ์ดํŠธ ๋˜๋„๋ก ์•Œ๋ฆผ์„ ๋ณด๋‚ด๋„๋ก ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿผ ์–ด๋–ป๊ฒŒ ์•Œ๋ฆผ์„ ๋ณด๋‚ผ ์ˆ˜ ์žˆ์„ ๊นŒ์š”? ์šฐ๋ฆฌ๋Š” ๋””๋ฒ„๊น…๊ณผ ํ…Œ์ŠคํŒ…์ด ๊ฐ€๋Šฅํ•œ ๊ตฌ์กฐํ™”๋œ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ ์ƒˆ๋กœ์šด ํƒ€์ž…์„ ๋งŒ๋“ค์–ด์„œ ์—…๋ฐ์ดํŠธ ์ด๋ฒคํŠธ๊ฐ€ ์ƒ๊ฒผ์„ ๋•Œ ์‚ฌ์šฉํ•ด๋ด…์‹œ๋‹ค.

์Šค์œ„ํ”„ํŠธ์˜ enum๊ณผ associated value๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด์ œ ์ƒˆ๋กœ์šด ๋ฉ”์‹œ์ง€ ํƒ€์ž…์ด ์ƒ๊ฒผ์Šต๋‹ˆ๋‹ค. ์ด ํƒ€์ž…์€ ๋ชจ๋ธ ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ์ƒ์„ฑํ•˜๊ณ  ๊ด€๋ จ๋œ ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ๋‚˜ scene์— ์ „์†ก๋ฉ๋‹ˆ๋‹ค.

์ด ๊ฐ์ฒด์˜ ์ „์†ก์„ ์œ„ํ•ด์„œ NSNotificationCenter๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. post ๋ฉ”์„œ๋“œ๋ฅผ ์ •์˜ํ•˜๊ณ  ๊ตฌ๋…์ž๋“ค์—๊ฒŒ ์•Œ๋ฆผ์„ ๋ณด๋ƒ…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด๋•Œ, ์ž๊ธฐ์ž์‹ ์„ ๋ฐœ์‹ ์ž๋กœ ์ •์˜ํ•ด์„œ ์•Œ๋ฆผ์„ ๋ณด๋ƒ…๋‹ˆ๋‹ค.

์ด์ œ ๋ชจ๋ธ ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ์ƒˆ๋กœ์šด ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ›์œผ๋ฉด, ์ด ๋ฉ”์‹œ์ง€๋ฅผ ์ €์žฅํ•œ ๋’ค์— ์ƒˆ๋กœ์šด ์ด๋ฒคํŠธ๋ฅผ ์ƒ์„ฑํ•ด ๋ฐœํ–‰ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

์•„๊นŒ ๋ฏธ๋ค„๋‘์—ˆ๋˜ ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์ˆ˜์ •ํ•ด๋ด…์‹œ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ƒˆ๋กœ์šด ์˜ต์ €๋ฒ„๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ํ•ธ๋“ค๋Ÿฌ ๋ฉ”์„œ๋“œ๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ํ•ธ๋“ค๋Ÿฌ ๋ฉ”์„œ๋“œ๋Š” Notification ๊ฐ์ฒด๋ฅผ ๋ฐ›์Šต๋‹ˆ๋‹ค.

์ด๋ฒคํŠธ๋ฅผ ๋ฐœํ–‰ํ•  ๋•Œ ์ƒˆ๋กœ์šด ์ด๋ฒคํŠธ ์ž์ฒด๊ฐ€ ๋ฐœ์‹ ์ž๊ฐ€ ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋‹จ์ˆœํžˆ ๋ฐœ์‹ ์ž๋ฅผ ํ™•์ธํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์ด๋ฒคํŠธ๋ฅผ ๋ฐ›์•„์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  associated value๋ฅผ ๊บผ๋‚ด์˜ค๋ฉด ์ƒˆ๋กœ์šด ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ๊ฒŒ๋ฉ๋‹ˆ๋‹ค. ์ด์ œ UI๋ฅผ ์—…๋ฐ์ดํŠธ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿผ ๋‹ค์‹œ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ด๋ณผ๊นŒ์š”? ์–‘์ชฝ์— ๋ชจ๋‘ ์—…๋ฐ์ดํŠธ๊ฐ€ ๋˜๋„ค์š”!

์˜ค๋Š˜์€ App Delegate์™€ Scene Delegate์˜ ์ฑ…์ž„๊ณผ ์ฐจ์ด์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•ด๋ดค์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  iOS13 ์—์„œ์˜ ์ƒํƒœ๋ณต์›์ด ์™œ ์ค‘์š”ํ•œ์ง€ ์˜๋…ผํ–ˆ์ฃ . ๊ทธ๋ฆฌ๊ณ  scene๋“ค์„ ๋™๊ธฐํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•๊นŒ์ง€ ์•Œ์•„๋ดค์Šต๋‹ˆ๋‹ค.

Scene Delegate์™€ ๋ฐฑ๊ทธ๋ผ์šด๋“œ์— ๋“ค์–ด๊ฐˆ ๋•Œ ์ƒํƒœ๊ฐ€ ์–ด๋–ค์‹์œผ๋กœ ์œ ์ง€๋˜๋Š”์ง€ ์ž˜ ๋ชฐ๋ž์—ˆ๋Š”๋ฐ ์—ฌ๋Ÿฌ๋ชจ๋กœ ๊ณต๋ถ€๊ฐ€ ๋งŽ์ด ๋˜์—ˆ๋˜ ์„ธ์…˜์ด์—ˆ์Šต๋‹ˆ๋‹ค! ๊ฐœ์ธ์ ์œผ๋กœ ๋ฒˆ์—ญํ•˜๋ฉด์„œ ๋‚ด์šฉ์„ ์ •๋ฆฌํ•œ ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ์˜์—ญ์ด๋‚˜ ์˜ค์—ญ์ด ์žˆ์„ ์ˆ˜ ์žˆ์–ด์š”! ์ž˜๋ชป๋œ ๋‚ด์šฉ์ด ์žˆ๋‹ค๋ฉด ์•Œ๋ ค์ฃผ์„ธ์š”~! ์ฝ์–ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!