티스토리 뷰

iOS13에서 Scene이라는 개념과 SceneDelegate가 나오게 되었습니다.

iPad에서 사용하는 개념으로 앱을 하나를 띄우고 화면을 여러개 분할해서 사용이 가능해졌죠.

아직까지 제가 개발하는 앱에서는 이런 기능을 만들지는 않기 때문에 필요가 없기는 합니다.

 

그렇죠 일반적으로 iPad Application을 잘 만들지는 않기 때문에 이 부분을 꺼버리거나 다르게 설정을 하고 개발합니다.

저처럼요... ㅎㅎㅎ

2020/09/27 - [Mobile/iOS] - iOS13 이상에서 스토리보드 없이 프로젝트 시작하기

 

iOS13 이상에서 스토리보드 없이 프로젝트 시작하기

애플에서 Scene을 적용하면서 이렇게 하게 되어 버렸네요. 저는 얼마전까지는 화면이 눈에 잘 보이는 스토리보드를 좋아하였지만 지금은 그냥 화면을 코드에 만들고 있습니다. 이것이 더 코드의

mrgamza.tistory.com

그렇다면 설정해서 사용하는 방법을 적어보고 이것이 어떻게 동작하는지 알아보도록 하죠.

 

일단 저는 xcode 12 버전을 사용하고 있습니다.

스크린샷이 다를 수 있습니다. 참고해주세요.

 

프로젝트 설정에서 Supports multiple windows를 선택하여 줍니다.

바로 옆의 Configure를 눌러주세요.

저 부분들이 제대로 들어가 있는지 확인하여 주도록 합니다.

저는 프로젝트에 SceneDelegate가 있고 StoryboardName은 Main으로 설정되어 있습니다.

프로젝트 설정 기본일거에요. 혹시나 변경되면 변경해주세요.

UIApplicationDelegate 기반

iOS 12이하 버전에서는 다음과 같은 상태를 가졌었습니다.

 

Not Running

- 앱이 실행되지 않은 상태를 의미합니다. 간혹 홈이나 노치 스타일에서 앱을 백그라운드에 넣어두고는 실행중이 아니라고 하는 분들이 있는데 이건 그 상태가 아니라 아예 실행중이지 않은겁니다.

Inactive

- 앱이 실행되고 나서 아무 동작을 안하는 상태 didFinishLaunchingWithOptions 상태

- 앱을 실행하다가 앱스위처 같은 상태로 완전히 background에 진입하지 않은 상태 applicationWillResignActive 상태

Active

- 앱을 사용하고 있는 상태

- 혹은 background, inactive 였다가 foreground에 올라올때의 상태

- inactive일 경우에는 바로 applicationDidRecomeActive를 가지게 되고

- background일 경우에는 applicationWillEnterForeground를 거치게 됩니다.

Background

- 앱이 background에 있으면서 실행되고 있을 경우

- 대부분은 suspended로 바로 이동하지만 네트워크 사용이나 기타 작업할것이 있을 경우에는 이 상태로 있게 됩니다.

- 시스템이 임의로 Background 상태의 앱을 Suspended 상태로 만든다

- applicationDidEnterBackground 상태가 여기에 해당합니다.

Suspended

- 앱이 background에 있지만 실행되는 코드가 없는 상태

- 메모리가 부족한 상황이 오면 iOS system은 foreground에 있는 앱의 여유 메모리 공간 확보를 위해 이 상태에 있는 앱들을 특별한 알림없이 정리할 수도 있음. Not Running 상태가 됨.

UIWindowSceneDelegate기반

13이상의 버전에서는 다음의 상태를 가집니다.

13버전부터 이렇게 된 이유는 App Switcher에서 복사본을 만들수도 있고 전환도 가능하기 때문입니다.

App Switcher는 홈버튼 더블클릭하거나 위로 쓸어 올려서 화면에 앱들이 보이는 상태를 이야기 합니다.

그러면 이것들은 무슨 의미인가 싶기도 하지만 하나의 scene을 사용할 경우에는 동일한 동작을 합니다.

하지만 여러개일 경우에는 자신 외의 Scene에서는 다른 상태가 될수 있습니다.

한곳에는 Foreground일 수 있는데 다른것은 Background일수도 있고요...

 

Unattached

- scene이 연결되지 않은 상태

- Not Running이랑 다르기도 합니다. 여러개의 scene을 띄울거라면 다음 scene은 없는 상태니까요... 뭐람 ㅋㅋ

Foreground Inactive

- UIApplicationDelegate 기반의 Inactive와 같습니다.

Foreground Active

- UIApplicationDelegate 기반의 active와 같습니다.

Background

- UIAppliactionDelegate 기반의 background와 같습니다.

Suspended

- UIApplicationDelegate 기반의 suspended와 같습니다.

마무리

여기까지는 설명이었고 그렇다면 13이상에서는 scene을 이용하고 싶은데 방법이 없을까 싶은데요.

이 공통된 부분의 실행되어야 하는 부분을 하나의 Helper class로 만들고 그것을 바로 호출해서 사용하는것이 어떨까 싶습니다.

 

두가지 AppDelegate와 SceneDelegate는 iOS의 버전 따라서 자동으로 어느쪽으로 호출해줄지를 결정하기 때문이죠.

 

더 나아가 이것을 각 Scene별로 구분을 하고 싶다면 만들어지는 시간에 대해서 관리해줄수 있도록 Helper class를 만들어주는것도 좋은 방법일거 같습니다.

 

앱이 실행되고 각 Scene별로 관리가 된다고 생각하면 됩니다.

사용하지 않으려면 끄고 빌드를 하는것이 오류를 생산하지 않는 것이 될거 같아요.

 

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함