 Apple Lover Developer & Artist

영속적인 디자인에 현대의 공감을 채워넣는 공방입니다

 Apple/iOS Dev Challenges

[iOS - Laboratory] iOS 앱의 Life Cycle 추적해보기 (iOS 12와 이전 버전)

singularis7 2021. 11. 25. 21:39
반응형

Overview

Managing Your App's Life Cycle 아티클을 읽어보고자 한다. 앞서 포스팅한 글에서 앱이 실행된 후 종료되기까지 다양한 상태를 가질 수 수 있으머 상태 변환은 앱이 종료되거나, 전화가 오는 등의 interruption 이 발생하면 발생될 수 있다는 점을 알 수 있었다. 이 아티클에서는 앱이 foreground 혹은 background 상태에 있을때 시스템의 Notification 에 응답하고 다른 중요한 시스템 관련 이벤트가 있을 때 처리하는 내용이 언급된다.

앱의 현재 상태는 어느 시점에 할 수 있는 일과 할 수 없는 일에 관하여 결정해준다. 예를 들어 foreground 앱은 사용자의 주목을 받있으며 CPU 같은 시스템 자원을 할당받는데 우선순위를 갖는다. 반대로 background 앱은 아무 일도 안하는 것이 선호되지만 가능한 적은일을 해야한다. 왜냐하면 화면에 나타나지 않았기 때문이다. 앱의 상태가 변화는 것처럼 이에 따른 행위를 반드시 정의해줘야한다.

이번 포스팅에서는 Scene 을 제외한 과거 스타일의 앱 생명주기에 관하여 파악해보고자 한다.

당신의 앱의 상태가 변화할 때, UIkit 은 적절한 delegate 객체 메서드를 호출해줘서 개발자에게 상황을 알려준다.

  • iOS 13과 이후 버전에서는 UISceneDelegate 객체를 활용하여 scene 에 기반한 앱의 life-cycle 이벤트에 응답한다.
  • iOS 12와 이전 버전에서는 UIApplicationDelegate 객체를 활용하여 life-cycle 이벤트에 응답한다.
Note
만약 당신의 앱이 scene 지원을 사용한다면, iOS 13과 이후버전에서 iOS는 언제는 scene delegate 를 사용합니다. iOS 12 와 이전 버전에서는 app delegate 를 사용합니다.

Respond to App-Based Life-Cycle Events

새로운 것을 이해하려면 과거의 것이 어떤지 살펴보는 것이 좋은 방법일 수 있다. iOS 12 와 이전 버전에서는 앱이 scene 을 지원하지 않았다. 따라서 UIKit 은 모든 life-cycle 이벤트를 UIApplicationDelegate 객체로 부터 받아왔다. app delegate 는 모든 앱의 윈도우 창을 관리해주며 서로 다른 화면에 띄어진 윈도우를 포함한다. 결론적으로 앱의 상태 전환은 외부 디스플레이의 컨텐츠를 포함해서 당신의 앱의 전체 UI 에 영향을 주게된다. 

다음의 그림은 앱 delegate 객체를 포함하는 앱의 상태 전환을 보여준다. 앱이 실행된 후에 시스템은 앱을 inactive 혹은 background 상태로 만든다. 두 상태는 UI가 화면에 나타났는지 아닌지를 따라 결정된다. 앱이 foreground 상태로 실행될 때, 시스템은 자동으로 앱을 active 상태로 전환시킨가. 이후에 상태는 앱이 종료되기까지 forground 와 background 상태를 불규칙하게 바뀐다.

앱의 상태가 전환되는 것을 다음과 같은 작업을 수행하기 위해 활용할 수 있다.


Respond to Other Significant Events

life-cycle 이벤트를 다루는 것에서 더 나아가, 앱은 반드시 다음의 테이블에 언급된 이벤트를 처리할 준비가 되어있어야 한다.  UIApplicationDelegate 객체를 다음과 같은 이벤트를 다루는데 사용한다. 일부의 경우에 이벤트를 notification 을 사용하여 다룰 수 있으며 앱의 다른 부분에서 응답할 수 있도록 도와준다. 

Memory warnings 앱이 많은 공간의 메모리를 사용할 때 수신된다. 앱이 사용하는 메모리의 양을 줄여줘야한다. 자세한 내용은 Responding to Memory Warnings.
Protected data becomes available/unavailable 사용자가 장치를 잠그거나 잠금 해제할 때 수신된다. applicationProtectedDataDidBecomeAvailable(_:) 과 applicationProtectedDataWillBecomeUnavailable(_:).
Handoff tasks NSUserActivity 객체가 처리될 필요 있을때 수신된다. application(_:didUpdate:).
Time changes 전화국이 시간을 갱신하도록 전송하는 것과 같이 시간이 변동될 때 수신된다. applicationSignificantTimeChange(_:).
Open URLs 당신의 앱이 자원을 열어줄 피료가 있을 때 수신된다. application(_:open:options:).

Reference

반응형