ios dev kangwook.

iOS) Split View 본문

iOS

iOS) Split View

kangwook 2022. 9. 17. 01:10

Split View 와 관련된 버그가 많이 들어오기도 하고, iOS13을 최소 버전으로 잡게되면 Scene을 적용시킬 수 있으므로, 한 번 짚고 넘어가려고 한다.

Split View

  • iPadOS에서 사용되는 개념으로, UISplitViewController와는 다르다.
  • Multiple Window의 한 종류로, Slide Over라고 하는 앱위에 창을 띄우는 듯한 윈도우와 비슷하다.

Split View같은 경우는 Scene이 도입된 iOS13버전에서 만들어졌고, Split View를 이해하려면 Scene의 Life Cycle을 알아야 한다.

Scene-Based Life Cycle

  • Scene이 도입되면서, App 단위의 상태 변화 관리에서 Scene단위로 상태 변화를 관리한다.
  • Scene은 각자 자신만의 Life Cycle이 있기 때문에 서로 다른 실행 상태에 있을 수 있다.
  • 기존 App Delegate에 있던 Life Cycle에 관련된 함수들은 대응되어 Scene Delegate에서 그대로 쓸 수 있다.
  • App Delegate는 Scene의 구성 및 삭제를 담당하게된다.(아래 메소드들을 필수적으로 구현해야 한다.)
    • func application(_:,configurationForConnecting:options:)
      • 새로운 Scene을 만들 때 사용할 UIKit의 configuration data를 검색한다.
    • func application(_:,didDiscardSceneSessions:)
      • 사용자가 앱 전환시 하나 이상의 앱 Scene을 닫았음을 delegate에게 전달한다.
  • Life Cycle에 관련된 함수를 App Delegate와 Scene Delegate에 모두 구현시 자동적으로 iOS 버전을 보고 system이 각 버전에 맞는 함수를 한 쪽에서만 호출한다.
  • SplitView의 가운데 구분선이 움직일 경우에는 두 개의 Scene 모두 Foreground-Inactive상태가 되고 다시 구분선을 놓았을 때는 Foreground-Active상태가 되는데, 이에 따라 적절히 메서드를 사용하면 되겠다.
  • Split View에 각각 같은 앱의 Scene이 들어가 있으면 같은 메모리와 앱 프로세스 공간을 사용하고,
  • 다른 앱이 들어가 있을 경우 독자적인 각각의 앱이라고 생각하면 된다.

Split View에서 Life Cycle 관련 메서드 테스트

Multiple Windows가 가능한 Test App을 개발

스플릿 뷰에 테스트앱을 각각 띄우고 다음을 테스트

  • 가운데 구분선을 슬라이드 → 어떤 라이프 사이클 메서드를 호출하는지 확인
  • Control Center, App Switcher등 각각 라이프 사이클에 관여하는 동작을 수행

예상 결과

  • sceneWillResignActive와 sceneDidBecomeActive가 호출될 것으로 예상

실제 결과

  • sceneWillResignActive, sceneDidBecomeActive가 호출되고 스플릿 뷰로 띄운 동일 앱도 로그가 출력된다.(즉, 디버깅이 같이되고 있다는 소리)
  • 이는 Scene은 서로 다르지만 App자체는 동일한 메모리에서 동일한 프로세스를 사용하기 때문이라고 추정

추가

  • SplitView 뿐만 아니라 Slide Over 또한 Split View와 같은 라이프 사이클을 지니고, Scene을 사용하고 독자적인 UI를 가지지만 실질적으로 App자체는 동일해서 로그는 같이 찍히게 된다.

 

'iOS' 카테고리의 다른 글

iOS) Architecture Pattern  (0) 2022.09.29
iOS) Scene  (0) 2022.09.18
Xcode) project.pbxproj  (0) 2022.09.11
iOS) Memory Management - ARC  (0) 2022.08.27
iOS) App Life Cycle, View LIfe Cycle  (0) 2022.08.27
Comments