iOS/πŸ›  μ΄μŠˆμ™€ ꢁ금증

iOS) `Scene-based` 와 `Scene-support` 의 차이점

woozzang 2021. 2. 2. 07:39
κ΄€λ ¨ κΈ€: Managing Your App's Life Cycle - UIKit

 

μœ„ 글을 μ •λ¦¬ν•˜λ©΄μ„œ 곡식 λ¬Έμ„œμ—μ„œ λΉ„μŠ·ν•˜κ²Œ 생긴 두 μš©μ–΄ λ•Œλ¬Έμ— ν˜Όλ™μ΄ 생겨 μ •λ¦¬ν•˜κ²Œ λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

 

κ·Έ 두 μš©μ–΄κ°€ λ°”λ‘œ `Scene-based` μ™€ `Scene-support` μž…λ‹ˆλ‹€.

 

μž„μ˜λ‘œ 생각해보면, `Scene-based` 앱이라면 μžλ™μœΌλ‘œ `Scene-support` λ₯Ό ν•  것 κ°™κ³ , κ·Έ λ°˜λŒ€λ‘œ 생각해봐도 그럴 λ“― ν•©λ‹ˆλ‹€.

κ·Έλž˜μ„œ μ²˜μŒμ—λŠ” 두 μš©μ–΄κ°€ 같은 것을 μ˜λ―Έν•˜λŠ” 쀄 μ•Œμ•˜μŠ΅λ‹ˆλ‹€.


 

κ²°λ‘ λΆ€ν„° μ΄μ•ΌκΈ°ν•˜λ©΄, 두 μš©μ–΄λŠ” κ°€λ¦¬ν‚€λŠ” 것이 λ‹€λ¦…λ‹ˆλ‹€.

 

μš°μ„  Scene μ΄λž€ iOS 13λΆ€ν„° μ μš©λ˜λŠ” κ°œλ…μœΌλ‘œ, ν•˜λ‚˜μ˜ scene 은 ν•˜λ‚˜μ˜ window 와 viewcontroller 듀을 κ΄€λ¦¬ν•˜λ©°, μ•±μ˜ UI μΈμŠ€ν„΄μŠ€ ν•˜λ‚˜λ₯Ό κ°€λ¦¬ν‚€λŠ” μ˜€λΈŒμ νŠΈμž…λ‹ˆλ‹€.

 

그리고 UIScene μ„ 직접 μ‚¬μš©ν•˜μ§€ μ•Šκ³  μ„œλΈŒν΄λž˜μ‹±ν•œ UIWindowScene 였브젝트둜 κ΄€λ¦¬ν•©λ‹ˆλ‹€.

 

μ‹€ν–‰ 쀑인 μ•±μ˜ UI View 계측


 

Scene-based

deployment target 의 버전이 iOS13 이상 μ΄λΌλ©΄, 앱은 μžλ™μœΌλ‘œ 이미 `scene-based`μ•± μž…λ‹ˆλ‹€.

 

λ”°λΌμ„œ UIKit은 씬 `state transition` 에 따라 SceneDelgate의 λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•©λ‹ˆλ‹€.

AppDelegate의 applicationWillEnterForeground(_:) 와 같은 App-based Life Cycle λ©”μ„œλ“œ λŠ” ν˜ΈμΆœλ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

 

SceneDelegate λ©”μ„œλ“œμ— 좜λ ₯을 μ°μ–΄λ³΄μ•˜μŠ΅λ‹ˆλ‹€.


 

Scene support

보톡 μ•„μ΄ν°μ—μ„œλŠ” μ™ΈλΆ€ λ””μŠ€ν”Œλ ˆμ΄μ— μ—°κ²°ν•˜μ§€ μ•ŠλŠ”ν•œ, μ•± μ‹€ν–‰ 쀑 ν•˜λ‚˜μ˜ μ”¬λ§Œ κ΄€λ¦¬ν•˜κ²Œ λ©λ‹ˆλ‹€.

 

ν•˜μ§€λ§Œ μ•„μ΄νŒ¨λ“œμ—μ„œλŠ” 같은 μ•± μΈμŠ€ν„΄μŠ€λ₯Ό λ‹€μˆ˜λ‘œ ν‚€λŠ” κ²½μš°κ°€ μž¦μŠ΅λ‹ˆλ‹€.

 

μ•„λž˜μ˜ 사진과 같은 κ²½μš°μž…λ‹ˆλ‹€.

 

 Note 앱을 2개 킨 ν™”λ©΄

 

μœ„μ™€ 같은 κ²½ν—˜μ„ μ§€μ›ν•˜λŠ” 것이 `Scene-support` μž…λ‹ˆλ‹€.

 

Scene-support λŠ” `opt-in` κΈ°λŠ₯μœΌλ‘œμ„œ, ν•„μš”μ‹œ μ„ νƒμ μœΌλ‘œ μΆ”κ°€ν•  수 μžˆλŠ” κΈ°λŠ₯μž…λ‹ˆλ‹€.

 

적용 방법은 Xcode λ‚΄λΆ€ ν”„λ‘œμ νŠΈ 파일의 Deployment Info μ—μ„œ Support multiple windows λ₯Ό μ²΄ν¬ν•˜μ‹œλ©΄ λ©λ‹ˆλ‹€.

 

체크 μ‹œ 기본적인 ν‚€κ°€ Info.plist 에 μΆ”κ°€λ©λ‹ˆλ‹€.

 

μ•„λž˜ 사진 2개λ₯Ό ν™•μΈν•΄μ£Όμ„Έμš”.

 

.xcdoeproj νŒŒμΌμ—μ„œ Deployment Info 에 μœ„μΉ˜ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. μ²΄ν¬ν•˜λ©΄

 

Info.plist 에 `Application Scene Manifest` ν‚€κ°€ μΆ”κ°€λ©λ‹ˆλ‹€.

 

체크 μ „ ν›„λ₯Ό λΉŒλ“œν•˜μ—¬ 직접 확인해 보면,

 

체크 μ „μ—λŠ” iPad μ—μ„œ 같은 앱을 λ™μ‹œμ— λ‘κ°œ λ„μ›Œ λ†“λŠ”κ²Œ λΆˆκ°€λŠ₯ν•˜μ§€λ§Œ

 

체크 ν›„μ—λŠ” 두 개λ₯Ό λ™μ‹œμ— λ„μ›Œ λ†“λŠ” 것이 κ°€λŠ₯해짐을 확인 ν•  수 μžˆμŠ΅λ‹ˆλ‹€.


 

κ²°λ‘ 

Scene-based λŠ” Deployment target 버전이 iOS 13 이상인 앱은 μžλ™ μ μš©λ©λ‹ˆλ‹€.

 

그리고 Scene-based 앱은 Scene-based Life Cycle 둜 생λͺ…μ£ΌκΈ°λ₯Ό 관리 λ°›μŠ΅λ‹ˆλ‹€.

 

Scene-support λŠ” opt-in κΈ°λŠ₯으둜, 같은 앱을 μ—¬λŸ¬κ°œ λ„μ›Œλ†“λŠ” 것을 κ°€λŠ₯ν•˜κ²Œ ν•΄μ£ΌλŠ” κΈ°λŠ₯μž…λ‹ˆλ‹€.

 

 

 

끝!