###### tags: `학습활동` # UML - Hemg🐻, serena🐷 ### 01. iOS 13에서 Scene Delegate로 이관된 App Delegate의 역할은 무엇무엇이 있을까요? 사용자가 앱의 scene을 직접 추가하거나 프로그래밍적으로 추가가 된다면 시스템은 그 scene을 추적하는 session 객체를 만든다. session은 scene의 유니크한 id를 가지고 scene에 대한 구체적인 환경설정 정보를 가지고 있다. UIKit은 scene의 생애주기동안 session정보를 유지한다. 만약 사용자가 scene을 제거하면 그 때 session을 파괴한다. session 객체는 직접 만드는 것이 아니라 UIKit이 자동으로 앱과 사용자가 상호작용에 대한 응답으로 세션을 만들어낸다. 또는 UIApplication의 requestSceneSessionActivation 메서드를 호출하여 프로그래밍 방식으로 새 scene과 session을 생성하도록 UIKit에 요청할 수도 있다. - 앱 life cycle 이벤트 관리 - 앱의 forground / background 상태 관리 ### 02. App Delegate와 Scene Delegate의 각각의 역할은 무엇일까요? #### UIApplicationDelegate - 앱의 공유 동작을 관리하는 방법으로 앱의 루트 객체이며 UIApplivation과 함께 시스템 상호 작용을 관리한다. **역할** - 앱의 중앙데이터 구조 초기화 - 데이터 연결 - 앱의 scene 구성 - 앱 외부의 알림에 응답 - 메모리 부족, 다운로드 완료 등 - 앱 scene, View, View Controller에 국한되지 않고 앱 내부 전체의 이벤트에 응답 - Apple 푸시 알림서비스와 같은 것을 등록 #### UISceneDelegate - UISceneSession의 장면 생성, 파괴 및 상태 복원과 같은 장면의 생명주기 이벤트를 담당한다. **역할** - 실행 시 앱의 데이터 구조와 UI를 초기화 - 활성화 시 UI 구성을 완료하고 사용자와 상호 작용할 준비 - 비활성화 시 데이터를 저장하고 앱 동작을 대기시키기 - 백그라운드 상태에 들어가면 중요한 작업을 완료하고 가능한 한 많은 메모리를 확보하고 앱 스냅샷을 준비 - 종료 시 모든 작업을 즉시 중지하고 공유 리소스를 해제 ### 03. Scene의 개념이 생긴 이유는 무엇이고, 언제 어디서 활용해볼 수 있을까요? 어플리케이션은 앱 생명주기를 AppDelegate.swift 한 곳에서 관장했다. 하지만 iOS13 이후부터 하나의 어플리케이션 프로세스 안에 여러 개의 window를 띄울 수 있게 되었다. 이에 따라 window는 scene이라는 이름으로 대체되었다. 여러개의 scene들이 각자의 생명주기를 가지고 있기 때문에 앱은 앱 전체 생명주기도 관리해야하고 scene의 생명주기도 신경써야 했다. 버거워진 로직의 부담감을 덜기 위해 AppDelegate에서 하던 UI 라이프사이클 관리를 SceneDelegate로 위임했다. 대신 scene 자체가 생성되고 사라지는 것을 추적하는 관리를 맡게 되었다. 그래서 정리하자면 AppDelegate은 앱의 시작과 종료, scene의 생성과 파괴를 담당한다. SceneDelegate은 scene의 생명주기를 담당한다. Scene을 활용할 수 있는 예시 : 멀티태스킹, 멀티 윈도우, 화면 분할, 다중 디바이스 상호작용 ### 04. 앱은 언제언제 Foreground Inactive 상태가 될까요? 2가지 이상의 사례를 생각해봅시다 - 앱이 실행되면서 foreground에 진입하지만, 앱 실행 중 미리 알림 또는 일정 얼럿이 화면에 덮여서 앱이 실질적으로는 이벤트를 받지 못하는 상태 - 처음 실행했을 때 - 다른 앱 화면에서 다시 돌아왔을 때 ### 05. 앱의 상태가 Background로 지속되기 위한 요건은 무엇무엇이 있을까요? - 멜론 스트리밍 결제 🍈 - 유튜브 프리미엄 결제 ▶️ - Background Modes 설정: 앱의 Info.plist 파일에 필요한 Background Mode를 추가합니다. - 적절한 백그라운드 작업 처리: 필요한 백그라운드 작업을 구현하고, 시간 제한과 리소스 사용을 고려합니다. - Background Tasks (백그라운드 작업): 앱이 백그라운드에서 실행되는 동안 필요한 작업을 처리하기 위해 백그라운드 작업을 설정해야 합니다. 이를 통해 앱은 제한된 시간 동안 백그라운드에서 실행되고 필요한 작업을 수행할 수 있습니다. 백그라운드 작업은 제한된 시간 동안 실행되므로 작업을 효율적으로 관리해야 합니다. - Background Fetch (백그라운드 페치): 앱이 주기적으로 백그라운드에서 데이터 업데이트를 받아야 하는 경우, Background Fetch 기능을 사용할 수 있습니다. 이를 통해 앱은 시스템이 허용하는 시간에 데이터를 업데이트하고 사용자가 앱을 다시 열 때 최신 데이터를 표시할 수 있습니다. - Push Notifications (푸시 알림): 앱이 백그라운드에서 작동하고 있지 않을 때 중요한 정보를 사용자에게 전달해야 할 때, 푸시 알림을 사용할 수 있습니다. 이를 통해 앱은 백그라운드에서 실행되지 않는 상태에서도 사용자에게 알림을 보낼 수 있습니다. - [🍎Apple Docs: 백그라운드 모드](https://developer.apple.com/documentation/xcode/configuring-background-execution-modes) - 세레나 고생했습니다요~~ 👍👏 - 아 결국 발표를 하게되긴했네 우린줄 몰랐다는.. 간단해서 다행쓰ㅋㅋ 핵심개념 -> 윈도우라는 개념 앱델 씬델 떨어진 이유 활용되는 예 앱은 앱 라이프싸이클 집중 씬마다 상태 변화를 하기 위해 앱델에서 씬델로 넘겼다 씬은 씬 라이프싸이클 집중 상태 변화가되는 그림 -> 상태별로 어떤걸 의미 하는지 상태별로 메서드가 무엇인지? 어떤게 호출될지?(씬델겟에서) 당장 이해보단 영상을 돌려보고 다시 확인해야한다 면접 질문 -> 앱 뷰 다중쓰레드 ARC 3야곰 결제를 위해 야곰이 수업을 한건가? 방학전 마지막 수업을 장식하고싶었던걸까