UIApplication ๐ŸŽ

YaR Labยท2023๋…„ 6์›” 23์ผ
0

iOSย ๐ŸŽ

๋ชฉ๋ก ๋ณด๊ธฐ
1/26
post-thumbnail

1๏ธโƒฃ ์ •์˜

iOS์—์„œ ์‹คํ–‰๋˜๋Š” ์•ฑ๋“ค์˜ ์ง‘์ค‘๋œ ์ œ์–ด ๋ฐ ์กฐ์ • ์ง€์ 

@MainActor
class UIApplication : UIResponder

2๏ธโƒฃ ์„ค๋ช…

  • ๋ชจ๋“  iOS ์•ฑ์€ ์ •ํ™•ํžˆ ํ•˜๋‚˜์˜ UIApplication ์ธ์Šคํ„ด์Šค(๋˜๋Š” ๋งค์šฐ ๋“œ๋ฌผ๊ฒŒ UIApplication์˜ ํ•˜์œ„ ํด๋ž˜์Šค)๋ฅผ ๊ฐ€์ง
  • ์•ฑ์ด ์‹œ์ž‘๋  ๋•Œ ์‹œ์Šคํ…œ์€ UIApplicationMain(_:_:_:_:) ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•จ
  • ์ด ํ•จ์ˆ˜๋Š” ๋‹ค๋ฅธ ์ž‘์—…๋“ค๊ณผ ํ•จ๊ป˜ ์‹ฑ๊ธ€ํ†ค UIApplication ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋ฉฐ, ์ด ๊ฐ์ฒด๋Š” shared๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Œ
  • ์ด ๊ฐ์ฒด๋Š” ๋“ค์–ด์˜ค๋Š” ์‚ฌ์šฉ์ž ์ด๋ฒคํŠธ์˜ ์ดˆ๊ธฐ ๋ผ์šฐํŒ…์„ ์ฒ˜๋ฆฌํ•จ.

    ๋ผ์šฐํŒ…

    • ์ •๋ณด๋‚˜ ๋ฐ์ดํ„ฐ๋ฅผ ํŠน์ •ํ•œ ๊ฒฝ๋กœ๋‚˜ ๋ฐฉํ–ฅ์œผ๋กœ ์ด๋™์‹œํ‚ค๋Š” ๊ณผ์ •
  • ์ด ๊ฐ์ฒด๋Š” ์ œ์–ด ๊ฐ์ฒด(UIControl ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค)์— ์˜ํ•ด ์ „๋‹ฌ๋œ ์ž‘์—… ๋ฉ”์‹œ์ง€๋ฅผ ์ ์ ˆํ•œ ๋Œ€์ƒ ๊ฐ์ฒด๋กœ ๋ณด๋‚ด๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋จ
  • UIControl์€ ์‚ฌ์šฉ์ž ์ด๋ฒคํŠธ๋ฅผ ๊ฐ์ง€ํ•˜๊ณ , ํ•ด๋‹น ์ด๋ฒคํŠธ์— ๋Œ€ํ•œ ์•ก์…˜ ๋ฉ”์‹œ์ง€๋ฅผ UIApplication์—๊ฒŒ ์ „๋‹ฌํ•จ
    UIApplication์€ ์ด๋Ÿฌํ•œ ์•ก์…˜ ๋ฉ”์‹œ์ง€๋ฅผ ์ ์ ˆํ•œ ๋Œ€์ƒ ๊ฐ์ฒด๋กœ ๋ณด๋‚ด์–ด ์ด๋ฒคํŠธ์— ๋Œ€ํ•œ ์‹ค์ œ ์ฒ˜๋ฆฌ๋ฅผ ๋‹ด๋‹นํ•จ
  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐ์ฒด๋Š” ์—ด๋ฆฐ ์ฐฝ ๋ชฉ๋ก์„ ์œ ์ง€ํ•จ
  • ์ด ์ฐฝ ๋ชฉ๋ก์—๋Š” UIWindow ๊ฐ์ฒด๋“ค์ด ํฌํ•จ๋˜์–ด ์žˆ์Œ
  • ์ด ์ฐฝ ๋ชฉ๋ก์„ ์‚ฌ์šฉํ•˜์—ฌ ์•ฑ ๋‚ด์˜ UIView ๊ฐ์ฒด ์ค‘ ์–ด๋Š ๊ฒƒ์ด๋“  ํ•„์š”ํ•  ๋•Œ ์ฐพ์„ ์ˆ˜ ์žˆ์Œ
  • UIApplication์€ ์•ฑ ๋‚ด์—์„œ UIView ๊ฐ์ฒด๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ  ์ฐฝ(Window)์„ ํ†ตํ•ด ์ด๋Ÿฌํ•œ UIView ๊ฐ์ฒด์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Œ
  • UIView ๊ฐ์ฒด๋Š” ์•ฑ์˜ ํ™”๋ฉด ์š”์†Œ๋ฅผ ๋‚˜ํƒ€๋‚ด๋ฉฐ, ์ด๋ฅผ ํ†ตํ•ด ํ™”๋ฉด์— ํ‘œ์‹œ๋˜๋Š” ๋‚ด์šฉ์„ ์กฐ์ž‘ํ•˜๊ณ  ์ œ์–ดํ•  ์ˆ˜ ์žˆ์Œ
  • UIApplication์€ ํŠน์ • ์ด๋ฒคํŠธ์— ๋Œ€ํ•œ ์‘๋‹ต์œผ๋กœ ํŠน์ • ์ฐฝ(Window)์„ ์‹๋ณ„ํ•˜๊ณ , ๊ทธ ์ฐฝ์— ํฌํ•จ๋œ UIView ๊ฐ์ฒด๋ฅผ ์ฐพ์•„ ํ•ด๋‹น ์ด๋ฒคํŠธ์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Œ
  • UIApplication ํด๋ž˜์Šค๋Š” UIApplicationDelegate ํ”„๋กœํ† ์ฝœ์„ ์ค€์ˆ˜ํ•˜๋Š” ๋ธ๋ฆฌ๊ฒŒ์ดํŠธ๋ฅผ ์ •์˜ํ•˜๋ฉฐ, ํ”„๋กœํ† ์ฝœ์˜ ์ผ๋ถ€ ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•ด์•ผ ํ•จ
  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐ์ฒด๋Š” ๋ธ๋ฆฌ๊ฒŒ์ดํŠธ์—๊ฒŒ ์ค‘์š”ํ•œ ๋Ÿฐํƒ€์ž„ ์ด๋ฒคํŠธ๋ฅผ ์•Œ๋ ค์คŒ
  • ์˜ˆ๋ฅผ ๋“ค์–ด ์•ฑ ์‹œ์ž‘, ๋‚ฎ์€ ๋ฉ”๋ชจ๋ฆฌ ๊ฒฝ๊ณ , ์•ฑ ์ข…๋ฃŒ์™€ ๊ฐ™์€ ์ด๋ฒคํŠธ๊ฐ€ ์žˆ์œผ๋ฉฐ, ์ด๋ฅผ ํ†ตํ•ด ๋ธ๋ฆฌ๊ฒŒ์ดํŠธ๋Š” ์ ์ ˆํ•˜๊ฒŒ ๋Œ€์‘ํ•  ์ˆ˜ ์žˆ์Œ
  • ์•ฑ์€ open(_:options:completionHandler:) ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ์ด๋ฉ”์ผ์ด๋‚˜ ์ด๋ฏธ์ง€ ํŒŒ์ผ๊ณผ ๊ฐ™์€ ์ž์›์„ ํ˜‘๋ ฅ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Œ
  • ์˜ˆ๋ฅผ ๋“ค์–ด ์ด ๋ฉ”์„œ๋“œ๋ฅผ ์ด๋ฉ”์ผ URL๊ณผ ํ•จ๊ป˜ ํ˜ธ์ถœํ•˜๋Š” ์•ฑ์€ Mail ์•ฑ์„ ์‹คํ–‰ํ•˜๊ณ  ๋ฉ”์‹œ์ง€๋ฅผ ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ์Œ

๐Ÿ“Œ UIApplication ๊ฐ์ฒด ์‚ฌ์šฉ

์ด ํด๋ž˜์Šค์˜ API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ธฐ๊ธฐ๋ณ„ ๋™์ž‘์„ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๊ณ , ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด UIApplication ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•จ

  • ๋“ค์–ด์˜ค๋Š” ํ„ฐ์น˜ ์ด๋ฒคํŠธ๋ฅผ ์ผ์‹œ์ ์œผ๋กœ ์ค‘๋‹จํ•˜๊ธฐ (beginIgnoringInteractionEvents())
  • ์›๊ฒฉ ์•Œ๋ฆผ์— ๋“ฑ๋กํ•˜๊ธฐ (registerForRemoteNotifications())
  • ์‹คํ–‰ ์ทจ์†Œ ๋ฐ ๋‹ค์‹œ ์‹คํ–‰ UI๋ฅผ ํŠธ๋ฆฌ๊ฑฐํ•˜๊ธฐ (applicationSupportsShakeToEdit)
  • ํŠน์ • URL scheme์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ๋“ฑ๋ก๋œ ์„ค์น˜๋œ ์•ฑ์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ (canOpenURL(_:))
  • ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์ž‘์—…์„ ์™„๋ฃŒํ•  ์ˆ˜ ์žˆ๋„๋ก ์•ฑ์˜ ์‹คํ–‰์„ ํ™•์žฅํ•˜๊ธฐ (beginBackgroundTask(expirationHandler:) ๋ฐ beginBackgroundTask(withName:expirationHandler:))
  • ๋กœ์ปฌ ์•Œ๋ฆผ์„ ์˜ˆ์•ฝํ•˜๊ณ  ์ทจ์†Œํ•˜๊ธฐ (scheduleLocalNotification(:), cancelLocalNotification(:))
  • ์›๊ฒฉ ์ œ์–ด ์ด๋ฒคํŠธ์˜ ์ˆ˜์‹ ์„ ์กฐ์ •ํ•˜๊ธฐ (beginReceivingRemoteControlEvents(), endReceivingRemoteControlEvents())
  • ์•ฑ ์ˆ˜์ค€์˜ ์ƒํƒœ ๋ณต์› ์ž‘์—… ์ˆ˜ํ–‰ํ•˜๊ธฐ (Managing state restoration task group ๋‚ด์˜ ๋ฉ”์„œ๋“œ๋“ค)

๐Ÿ“Œ Subclassing notes

  • ๋Œ€๋ถ€๋ถ„์˜ ์•ฑ์€ UIApplication์„ ์„œ๋ธŒํด๋ž˜์Šคํ™”ํ•  ํ•„์š”๊ฐ€ ์—†์Œ
  • ๋Œ€์‹  ์‹œ์Šคํ…œ๊ณผ ์•ฑ ๊ฐ„ ์ƒํ˜ธ์ž‘์šฉ์„ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์•ฑ ๋ธ๋ฆฌ๊ฒŒ์ดํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋จ
  • ์‹œ์Šคํ…œ๋ณด๋‹ค ๋จผ์ € ๋“ค์–ด์˜ค๋Š” ์ด๋ฒคํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ (๋งค์šฐ ๋“œ๋ฌธ ์ƒํ™ฉ), ์‚ฌ์šฉ์ž ์ •์˜ ์ด๋ฒคํŠธ ๋˜๋Š” ์ž‘์—… ๋””์ŠคํŒจ์น˜ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Œ
  • ์ด๋ฅผ ์œ„ํ•ด์„œ๋Š” UIApplication์„ ์„œ๋ธŒํด๋ž˜์Šคํ™”ํ•˜๊ณ  sendEvent(_:), ๊ทธ๋ฆฌ๊ณ /๋˜๋Š” sendAction(_:to:from:for:) ๋ฉ”์„œ๋“œ๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋“œํ•˜์„ธ์š”. ๊ฐ€๋กœ์ฑˆ ๊ฐ ์ด๋ฒคํŠธ์— ๋Œ€ํ•ด ์ฒ˜๋ฆฌ๋ฅผ ์™„๋ฃŒํ•œ ํ›„ ์‹œ์Šคํ…œ์œผ๋กœ ์ด๋ฒคํŠธ๋ฅผ ๋‹ค์‹œ ๋ณด๋‚ด๊ธฐ ์œ„ํ•ด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ˜ธ์ถœํ•ด์•ผํ•จ
super.sendEvent(event)
  • ์ด๋ฒคํŠธ ๊ฐ€๋กœ์ฑ„๊ธฐ๋Š” ๋“œ๋ฌผ๊ฒŒ ํ•„์š”ํ•˜๋ฉฐ ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด ํ”ผํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Œ

์ถœ์ฒ˜๐Ÿ“š

๐ŸŽApple Docs: UIApplication

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

๊ด€๋ จ ์ฑ„์šฉ ์ •๋ณด