본문 바로가기
IOS

iOS) AppDelegate와 sceneDelegate 정리

by eigen96 2022. 3. 15.
728x90

지난 주말 라이징캠프 ios반 6주동안의 과정을 마쳤습니다.
라이징 테스트까지 5일정도 남은 상황에서 그동안 미흡했던 부분을 오늘부터 정리해보고자 합니다.

 

오늘은 처음 프로젝트 생성시 자동생성되는 것들중 AppDelegateSceneDelegate를 조사해봤습니다.

과제를 수행해보면서 이 두가지가 추상적이라고 느껴져서 이해가 잘 가지 않았던 부분인데요.

 

navigator영역에서 볼 수 있는 모습

AppDelegate의 역할

@main -> @UIApplicationMain에서 변경된 모습이며 이는 Objective-C에서 시작된 앱의 시작점(entry point)

-> UIApplication객체 생성 -> Info.plist파일을 읽어들여 필요한 데이터 로드

만약 Deployment Target이 ios13미만인 상황엔 밑에 SceneSession을 담당하는 메소드 두개 제거.

초기엔 AppDelegate만 존재했다고 합니다.

쉽게 말하면 어플리케이션의 상태변화를 관리하는 클래스라고 생각하면 될 것 같습니다.

즉 상태변화 감지 및 이벤트 처리가 가능하게 해줍니다.

하지만 ios13부터 AppDelegate의 일부 기능을 SceneDelegate로 아래와 같이 마이그레이션 하였다고 합니다.

 UI 화면과 관련된 상태변화 관리 기능을  주로 SceneDelegate가 가져갔다고 생각하면 될 것 같습니다.

AppDelegate

  1. 앱의 가장 중요한 데이터 구조를 초기화하는 것
  2. 앱의 scene을 환경설정(Configuration)하는 것
  3. 앱 밖에서 발생한 알림(배터리 부족, 다운로드 완료 등)에 대응하는 것
  4. 특정한 scenes, views, view controllers에 한정되지 않고 앱 자체를 타겟하는 이벤트에 대응하는 것.
  5. 애플 푸쉬 알림 서브스와 같이 실행시 요구되는 모든 서비스를 등록하는것.

SceneDlegate

 

SceneDelegate 사용 예시(시작화면 설정)

회원가입 후 화면, 자동로그인으로 넘어갈 때 활용 가능.

 

 

 

Scene이란? 

처음 공부할 때 Scene은 view와 viewController를 통틀어 부르는 말이라고 단순하게 받아들였습니다.

scene은 ios13부터 window로 바뀌었다고 합니다. 조금 자세하게 알아보면 아래와 같습니다.

 

UIKit는 UIWindowScene 객체를 사용하는 앱 UI의 각 인스턴스를 관리합니다. Scene에는 UI의 하나의 인스턴스를 나타내는 windows와 view controllers가 들어있습니다. 또한 각 scene에 해당하는 UIWindowSceneDelegate 객체를 가지고 있고, 이 객체는 UIKit와 앱 간의 상호 작용을 조정하는 데 사용합니다. Scene들은 같은 메모리와 앱 프로세스 공간을 공유하면서 서로 동시에 실행됩니다. 결과적으로 하나의 앱은 여러 scene과 scene delegate 객체를 동시에 활성화할 수 있습니다.(Scenes - Apple Developer Document 참고)

 

Scene Session?

UISceneSession 객체는 scene의 고유의 런타임 인스턴스를 관리합니다. 사용자가 앱에 새로운 scene을 추가하거나 프로그래밍적으로 scene을 요청하면, 시스탬은 그 scene을 추적하는 session 객체를 생성합니다. 그 session에는 고유한 식별자와 scene의 구성 세부사항(configuration details)가 들어있습니다. UIKit는 session 정보를 그 scene 자체의 생애(life time)동안 유지하고 app switcher에서 사용자가 그 scene을 클로징하는 것에 대응하여 그 session을 파괴합니다. session 객체는 직접 생성하지않고 UIKit가 앱의 사용자 인터페이스에 대응하여 생성합니다. 또한 위 3번에서 소개한 두 메소드를 통해서 UIKit에 새로운 scene과 session을 프로그래밍적 방식으로 생성할 수 있습니다.
(UISceneSession - Apple Developer Document 참고)

728x90

댓글