λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
🍎 iOS

[UIKit] UIApplication

by hyebin (Helia) 2022. 3. 24.
λ°˜μ‘ν˜•

UIApplication

iOSμ—μ„œ μ‹€ν–‰λ˜λŠ” μ•±μ˜ μ œμ–΄μ™€ μ‘°μ •μ˜ 쀑심점

μ„ μ–Έ
@MainActor class UIApplication : UIResponder

λͺ¨λ“  iOS μ•±μ—λŠ” 단 ν•˜λ‚˜μ˜ UIApplication μΈμŠ€ν„΄μŠ€κ°€ μ‘΄μž¬ν•©λ‹ˆλ‹€.

앱이 μ‹œμž‘λ˜λ©΄ μ‹œμŠ€ν…œμ€ UIApplicationMain(_: _: _: _:) ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•©λ‹ˆλ‹€.

이 ν•¨μˆ˜λŠ” UIApplication 객체의 싱글턴을 μƒμ„±ν•˜λŠ” μž‘μ—…μ„ ν•©λ‹ˆλ‹€.

κ·Έλ‹€μŒ shared 클래슀 λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•΄ μ‹±κΈ€ν„΄ 객체에 μ ‘κ·Όν•  수 μžˆμŠ΅λ‹ˆλ‹€.

 

application 객체의 μ£Όμš” 역할은 μ‚¬μš©μž μ΄λ²€νŠΈλ‘œλΆ€ν„°μ˜ 초기 λΌμš°νŒ…μ„ μ²˜λ¦¬ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.

application κ°μ²΄λŠ” UIControl 클래슀의 μΈμŠ€ν„΄μŠ€μΈ control객체가 μ „λ‹¬ν•œ action λ©”μ‹œμ§€λ₯Ό target 객체에 μ „λ‹¬ν•©λ‹ˆλ‹€.

application κ°μ²΄λŠ” 'open' μƒνƒœμ˜ UIWindow 객체 리슀트λ₯Ό μœ μ§€ν•˜λ©°, μ•± λ‚΄ UIView 객체듀을 κ²€μƒ‰ν•˜λŠ” 데 μ‚¬μš©ν•©λ‹ˆλ‹€.

 

UIApplication ν΄λž˜μŠ€λŠ” UIApplicationDelegate ν”„λ‘œν† μ½œμ„ μ€€μˆ˜ν•˜κ³  delegateλ₯Ό μ •μ˜ν•©λ‹ˆλ‹€.

application κ°μ²΄λŠ” delegateμ—κ²Œ μ€‘μš”ν•œ λŸ°νƒ€μž„ 이벀트λ₯Ό μ•Œλ¦¬κ³  적절히 응닡할 기회λ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€.

 

앱은 openURL(_:) λ©”μ„œλ“œλ₯Ό ν†΅ν•΄μ„œ μ΄λ©”μΌμ΄λ‚˜ 이미지 파일과 같은 λ¦¬μ†ŒμŠ€λ₯Ό κ³΅λ™μœΌλ‘œ μ²˜λ¦¬ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

 

이 클래슀의 APIλ₯Ό μ‚¬μš©ν•˜λ©΄ 기기별 λ™μž‘μ„ 관리할 수 μžˆμŠ΅λ‹ˆλ‹€.

UIApplication 객체λ₯Ό μ‚¬μš©ν•˜μ—¬ λ‹€μŒμ„ μˆ˜ν–‰ν•©λ‹ˆλ‹€.

  • λ“€μ–΄μ˜€λŠ” ν„°μΉ˜ 이벀트 μΌμ‹œ 쀑단(beginIgnoringInteractionEvents()) 
    • 더 이상 μ‚¬μš©λ˜μ§€ μ•ŠμŒ
  • 원격 μ•Œλ¦Ό 등둝(registerForRemoteNotifications())
    • ν‘Έμ‹œ μ•Œλ¦Ό μ„œλΉ„μŠ€λ₯Ό 톡해 원격 μ•Œλ¦Όμ„ μˆ˜μ‹ ν•˜λ„λ‘ 등둝
  • μ‹€ν–‰ μ·¨μ†Œ UI 트리거(applicationSupportsShakeToEdit)
    • μž₯치λ₯Ό 흔듀면 μ‹€ν–‰ μ·¨μ†Œ- λ‹€μ‹œ μ‹€ν–‰ μ‚¬μš©μž μΈν„°νŽ˜μ΄μŠ€κ°€ ν‘œμ‹œλ˜λŠ” μ—¬λΆ€λ₯Ό κ²°μ •ν•˜λŠ” Bool κ°’
  • URL μŠ€ν‚€λ§ˆλ₯Ό μ²˜λ¦¬ν•˜λ„λ‘ λ“±λ‘λœ μ„€μΉ˜λœ 앱이 μžˆλŠ”μ§€ 확인(canOpenURL(_:))
    • 앱이 URL 체계λ₯Ό μ²˜λ¦¬ν•  수 μžˆλŠ”μ§€ μ—¬λΆ€λ₯Ό λ‚˜νƒ€λ‚΄λŠ” Bool 값을 λ°˜ν™˜
  • λ°±κ·ΈλΌμš΄λ“œμ—μ„œ μž‘μ—…μ„ μ™„λ£Œν•  수 μžˆλ„λ‘ μ•± μ‹€ν–‰ ν™•μž₯
    • beginBackgroundTask(expirationHandler:): 앱이 λ°±κ·ΈλΌμš΄λ“œλ‘œ μ „ν™˜λ˜λŠ” 경우 κ³„μ†λ˜μ–΄μ•Ό ν•˜λŠ” μž‘μ—…μ˜ μ‹œμž‘ ν‘œμ‹œ
    • beginBackgroundTask(withName:expirationHandler:): 앱이 λ°±κ·ΈλΌμš΄λ“œλ‘œ μ „ν™˜λ˜λŠ” 경우 κ³„μ†λ˜μ–΄μ•Ό ν•˜λŠ” μ‚¬μš©μž μ§€μ • μ΄λ¦„μœΌλ‘œ μž‘μ—…μ˜ μ‹œμž‘μ„ ν‘œμ‹œ
  • 둜컬 μ•Œλ¦Ό μ˜ˆμ•½κ³Ό μ·¨μ†Œ
    • scheduleLocalNotification(_:) → 더이상 μ‚¬μš©λ˜μ§€ μ•ŠμŒ
    • cancelLocalNotification(_:) → 더이상 μ‚¬μš©λ˜μ§€ μ•ŠμŒ
  • μ›κ²©μ œμ–΄ 이벀트의 μˆ˜μ‹  μ‘°μ •
    • beginReceivingRemoteControlEvents(): 원격 μ œμ–΄ 이벀트 μˆ˜μ‹ μ„ μ‹œμž‘ν•˜λ„λ‘ 앱에 μ§€μ‹œ
    • endReceivingRemoteControlEvents(): 원격 μ œμ–΄ 이벀트 μˆ˜μ‹ μ„ μ€‘μ§€ν•˜λ„λ‘ 앱에 μ§€μ‹œ
  • μ„œλΈŒ ν΄λž˜μ‹±

 

μ„œλΈŒ ν΄λž˜μ‹± λ…ΈνŠΈ

λŒ€λΆ€λΆ„μ˜ 앱듀은 UIApplication을 μ„œλΈŒ ν΄λž˜μ‹± ν•  ν•„μš”κ°€ μ—†μŠ΅λ‹ˆλ‹€.

λŒ€μ‹ μ— App delegateλ₯Ό μ‚¬μš©ν•΄μ„œ μ‹œμŠ€ν…œκ³Ό μ•±κ°„μ˜ μƒν˜Έμž‘μš©μ„ κ΄€λ¦¬ν•©λ‹ˆλ‹€.

λ§Œμ•½  앱이 μ‹œμŠ€ν…œλ³΄λ‹€ λ“€μ–΄μ˜€λŠ” 이벀트λ₯Ό λ¨Όμ € μ²˜λ¦¬ν•΄μ•Ό ν•œλ‹€λ©΄ μ»€μŠ€ν…€ 이벀트 λ˜λŠ” action 전솑 λ©”μ»€λ‹ˆμ¦˜μ„ 직접 κ΅¬ν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
이λ₯Ό μœ„ν•΄μ„œ UIApplication을 μ„œλΈŒν΄λž˜μ‹±ν•˜κ³  sendEvent(_:)λ‚˜ sendAction(_:to:from:for:)κΉŒμ§€λ„ μ˜€λ²„λΌμ΄λ“œ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • sendEvent(_:): μ•±μ˜ μ μ ˆν•œ μ‘λ‹΅μž 객체에 이벀트 전달
  • sendAction(_:to:from:for:): μ„ νƒκΈ°λ‘œ μ‹λ³„λœ μž‘μ—… λ©”μ„Έμ§€λ₯Ό μ§€μ •λœ λŒ€μƒμœΌλ‘œ 보냄
κ°€λ‘œμ±„λŠ” λͺ¨λ“  μ΄λ²€νŠΈμ— λŒ€ν•΄μ„œ 이벀트 처리λ₯Ό ν•œ ν›„ super.sendEvent(_:)λ₯Ό ν˜ΈμΆœν•΄μ„œ μ‹œμŠ€ν…œμœΌλ‘œ μ „μ†‘ν•˜μ„Έμš”.
이벀트λ₯Ό κ°€λ‘œμ±„λŠ” 것은 거의 ν•„μš”ν•˜μ§€ μ•ŠμœΌλ©° κ°€λŠ₯ν•˜λ‹€λ©΄ ν”Όν•΄μ•Ό ν•©λ‹ˆλ‹€.
λ°˜μ‘ν˜•

'🍎 iOS' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[UIKit] UIView(3)  (0) 2022.03.30
[UIKit] UIView(2)  (0) 2022.03.28
[UIKit] UIView(1)  (0) 2022.03.25
[UIKit] μ•±μ˜ 라이프 사이클  (0) 2022.03.22
UIKit  (0) 2022.03.21