[iOS] App Life Cycle - AppDelegate

Seonhu Kim·2023년 3월 29일
0

iOS

목록 보기
3/16
post-thumbnail

앱의 진입점(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를 호출하는 네트워크 속도가 달라서 현실적으로 맞는 지 모르겠다...)

  • AppDelegate에서 사용하는 메서드 정리
    • application(willFinishLaunchingWithOptions) : 이 메서드는 앱이 처음 실행되는 순간에 호출
    • application(didFinishLaunchingWithOptions) : 이 메서드는 앱이 사용자에게 화면으로 표시되기 직전에 호출되어 전체적인 초기화를 수행 할 수 있도록 함
    • applicationDidBecomeActive : 이 메서드는 앱이 포그라운드로 올라올 때 실행됌
    • applicationDidEnterbackground : 이 메서드는 앱이 현재 백그라운드에서 실행 중이고 언제 어느 순간에 일시 중지될 수 있는 상태일 때 호출
    • applicationWillEnterForeground : 이 메서드는 앱이 포그라운드로 옮겨질 때 실행되지만, 아직 활서오하 상태는 아닌 경우
    • applicationWillTerminate : 이 메서드는 앱이 제거될 때 발생
profile
iOS Developer.

0개의 댓글