본문 바로가기

iOS

[iOS] (4,5) Appdelegate의 Method와 Scenedelegate

안녕하세요! 네번째, 다섯번째 질문은 한번에 해 보겠습니다.

iOS13에 SceneDelegate가 나오면서 조금 달라졌지만,,,저는 매번 SceneDelegate를 지운답니다..(ㅎㅎ)

지우는 방법이 궁금하시다면 
life-shelter.tistory.com/316

 

[XCode] sceneDelegate 삭제하기

xCode 11.2로 새 프로젝트를 만들면 SceneDelegate.swift파일이 추가 된다. 이를 그냥 지우고 빌드하면 검은 화면이 나오고, iOS13이상으로 강제하여야 하기 때문에 제거하는 법을 기술한다. 위와 같은 과

life-shelter.tistory.com

잘 설명되어있는 블로그를 참조하세요!

그리고 왜 지워도 되는지는 아래에 천천히 설명해보겠습니다.

 

(4)

Appdelegate의 기본 메소드들, Scenedelegate의 기본 메소드를 알아보겠습니다. 

신뢰의 공식문서를 참조합시다 오늘도~!

developer.apple.com/documentation/uikit/uiapplicationdelegate

 

Apple Developer Documentation

 

developer.apple.com

iOS13이 되며 Scene개념이 도입되고, AppDelegate의 역할을 SceneDelegate에 분담했음에도 불구하고 아직까지

AppDelegate의 역할이 아주 많습니다....대략 추리면,

 

iOS 13 and over

1. 앱의 중앙 구조체 초기화 (initialize central data structures)

2. 앱의 Scene 구성 (Configure App's Scene)

3. 앱의 바깥에서 일어나는, 메모리 부족 경고, 다운로드 완료 알림 등에 핸들링

4. 앱의 view, viewController, scene에 국한하지 않고 app 자체의 이벤트 핸들링

5. APN Push event 핸들링

등이 있습니다.

 

앱이 이니셜라이징될 때 실행되는 추가적인 정보를 얻으려면 >> developer.apple.com/documentation/uikit/app_and_environment/responding_to_the_launch_of_your_app

 

그럼, 몇개의 중요한 메소드들을 알아보겠습니다.

 

1.  func application(_:didFinishLaunchingWithOptions:)

앱이 실행되었을 때 최초 1회 발생하는 함수 

 

2.  func applicationDidBecomeActive(_ application: UIApplication)

background > foreground로 진입한 이후 발생, 

 

3.  func applicationWillResignActive(_ application: UIApplication)

foreground > background로 진입할 때 발생.

 

4.

  func application(_ application: UIApplication,

                   didReceiveRemoteNotification userInfo: [AnyHashable: Any],

                   fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void)

Push알림을 받고 탭해서 앱으로 진입했을 때 payload를 핸들링하는 함수

 

 

너무너무 많습니다. 앱의 생명주기와 관련한 함수들을 사용하고싶을 때 AppDelegate에서 찾아보도록 합시다.

그렇다면 SceneDelegate는 무엇일까요?

 

 

(5)

간단히..알아보겠어요...SceneDelegate.

developer.apple.com/videos/play/wwdc2019/258/

 

Architecting Your App for Multiple Windows - WWDC 2019 - Videos - Apple Developer

Dive into the details about what it means to support multitasking in iOS 13. Understand how previous best practices fit together with new...

developer.apple.com

 

SceneDelegate는 iOS13에서 처음 도입된 개념입니다.

따라서 Deployment Target이 iOS13 미만인 앱은 아직 AppDelegate를 사용해야 하기 때문에,

SceneDelegate를 삭제해도 문제가 없습니다.

 

그렇다면, Scene의 개념은 무엇일까요? 위에 링크를 첨부했는데, Scene의 개념을 설명한 WWDC 영상 링크입니다. 

Scene의 도입 목적은 iPad에서 멀티 윈도우 사용을 위함이었는데요, 

 

iOS 12, 12 이전에는 AppDelegate의 역할이 다음과 같았습니다.

[그림 1] - WWDC2019, 링크 첨부

그림을 보면, Process LifeCycle, UI LifeCycle을 모두 관리하고 있는 모습을 볼 수 있습니다. 

이렇게 되어도 전혀 문제가 없는것이, 한 앱은 한 프로세스와 UI를 가지기 때문에 아무 문제가 없습니다.

 

그러면...? iOS 13에서는 어떤 그림이 생길 수 있냐면?

[그림 2]

같은 프로세스가, 두개의 UI를 가질 수 있게 됩니다. 영상에서는 이 문제점에 대해 지적하고

iOS13의 SceneDelegate를 이용해서 해결하는 방법을 설명하는데요, 이는 조금 더 잘 설명된 블로그를 첨부하겠습니다!

zeddios.tistory.com/811

 

SceneDelegate (1) - Architecting Your App for Multiple Windows

안녕하세요 :) Zedd입니다. 다들 추석연휴 잘 보내시고 계신가요????! 벌써 토요일이라니..오늘 목표는 Scene을 좀 이해하는 게 목표입니다.. 꼭 공부해보고싶었던 SceneDelegate의 존재(?)의 이유... 항상

zeddios.tistory.com

저는 제드님보다 더 잘 설명할 자신이 없(고 길어요)습니다

 

그럼, UI LifeCycle을 다루는 SceneDelegate만의 함수가 있어야겠는데요, 동영상에서는 다음과 같이 안내하고 있습니다.

[사진 3]

 

window 변수가 Appdelegate에서 Scenedelegate로 넘어갔으며,

[사진 3]과 같이 안내된 UI 관련 메소드가 

SceneDelegate의 메소드와 각각 1 : 1로 대치됨을 알 수 있습니다.

 

SceneDelegate를 안 쓴다면 >> 다시 AppDelegate의 함수를 사용하세욥

 

하지만....언제까지 쓰지 않을수 없는 일입니다... 작년 WWDC 세션과 예제들을 천천히 따라하며...

혹시 모를 아이폰 멀티윈도우, 아이패드 앱 개발자를 대비해보도록 합시다.

 

자세한 내용을 담지는 못했지만, 제 생각에 핵심 내용을 다루려 노력해보았습니다.

천천히 공부하며 면접을 대비하도록 합시다! 틀린 내용 지적은 항상 감사히 받고 있습니다~!

감사합니다!