지난 주말 라이징캠프 ios반 6주동안의 과정을 마쳤습니다.
라이징 테스트까지 5일정도 남은 상황에서 그동안 미흡했던 부분을 오늘부터 정리해보고자 합니다.
오늘은 처음 프로젝트 생성시 자동생성되는 것들중 AppDelegate와 SceneDelegate를 조사해봤습니다.
과제를 수행해보면서 이 두가지가 추상적이라고 느껴져서 이해가 잘 가지 않았던 부분인데요.
AppDelegate의 역할
@main -> @UIApplicationMain에서 변경된 모습이며 이는 Objective-C에서 시작된 앱의 시작점(entry point)
-> UIApplication객체 생성 -> Info.plist파일을 읽어들여 필요한 데이터 로드
만약 Deployment Target이 ios13미만인 상황엔 밑에 SceneSession을 담당하는 메소드 두개 제거.
초기엔 AppDelegate만 존재했다고 합니다.
쉽게 말하면 어플리케이션의 상태변화를 관리하는 클래스라고 생각하면 될 것 같습니다.
즉 상태변화 감지 및 이벤트 처리가 가능하게 해줍니다.
하지만 ios13부터 AppDelegate의 일부 기능을 SceneDelegate로 아래와 같이 마이그레이션 하였다고 합니다.
UI 화면과 관련된 상태변화 관리 기능을 주로 SceneDelegate가 가져갔다고 생각하면 될 것 같습니다.
AppDelegate
- 앱의 가장 중요한 데이터 구조를 초기화하는 것
- 앱의 scene을 환경설정(Configuration)하는 것
- 앱 밖에서 발생한 알림(배터리 부족, 다운로드 완료 등)에 대응하는 것
- 특정한 scenes, views, view controllers에 한정되지 않고 앱 자체를 타겟하는 이벤트에 대응하는 것.
- 애플 푸쉬 알림 서브스와 같이 실행시 요구되는 모든 서비스를 등록하는것.
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 참고)
'IOS' 카테고리의 다른 글
iOS) URLSession 정리 (0) | 2022.05.07 |
---|---|
iOS) URLSession 사용해보기전 네트워크 구조 정리 (0) | 2022.05.07 |
[iOS] SnapKit 사용해보기, Preview Provider (0) | 2022.05.06 |
iOS) 코드로 뷰 배경 색 적용(custom Color) (0) | 2022.03.18 |
iOS) Plist 정리 (1) | 2022.03.16 |
댓글