앱의 진입점(Entry Point)가 어노테이션으로 작성되어 앱이 시작하는 곳이라도 무방한 AppDelegate에 대하여 정리하고자 한다.
UIApplication과 App State를 묶어서 정리하면 좋을 것 같은데,App Life Cycle 개념이 방대해서 중요한 개념만 별도 정리함
앱의 라이프 사이클을 핸들링하는 곳이기도 하며, iOS 13.이전에는 AppDelegate에서 "프로세스의 라이프 사이클"과 "UI 라이프 사이클"을 모두 처리하였으나, iOS 13.* 이후 버전에서는 AppDelegate와 SceneDelegate를 나누어서 라이프 사이클을 처리한다.
위처럼 UIApplicatiion 클래스를 상속받는 것이 아닌, AppDelegate에서 UIApplicationDelegate protocol을 채택하여 라이프 사이클 이벤트 핸들링을 함
그러나 아직까지 iOS 12.* 을 지원하고 있다면 (우리 회사는 그럼.. 제발 최소 지원 버전 좀 올렸으면 하는 마음...)
하나의 앱은 하나의 Window를 가지고 있기 때문에 iOS13.* 에 추가된 SceneDelegate.swift파일을 삭제해야함 (이후 방법은 아래에 정리)
iOS 13의 AppDelegate에 추가된 UISceneSession과 관련된 두 메서드도 삭제해야함
iOS 13에서 SceneDelegate로 옮겨진 window 프로퍼티를 AppDelegate로 복사
Info.plist에서 Scene과 관련된 Manifest인 Application Scene Manifest를 삭제해야함
추가적으로 AppDelegate에서 어떤 작업을 할 수 있는 지 아래에 정리해보겠음
앱 진입, 초기화, 렌더링 등 다양한 시점을 판단할 수 있음 (브레이킹 포인트를 잘 잡으면 해당 시점으로 성능 측정도 가능한데, 측정때 마다 API를 호출하는 네트워크 속도가 달라서 현실적으로 맞는 지 모르겠다...)