iOS App Life Cycle

Groot·2022년 6월 7일
0

TIL

목록 보기
20/148
post-thumbnail

TIL

🌱 난 오늘 무엇을 공부했을까?

📌 iOS App Life Cycle

📍 1. iOS 13에서 Scene Delegate로 이관된 App Delegate의 역할

  • 현재 UI state를 알수 있도록 하는 역할

    • Foreground 와 Background를 이어주는 역할
    • Foreground에서 실행할 UI를 준비
    • Background에서 실행할 UI를 준비
    • Active 와 InActive
  • 메서드

    • scenewillEnterForeGround
      • Tells the delegate that the scene is about to begin running in the foreground and become visible to the user.
    • scenedidEnterBackground
      • Tells the delegate that the scene is running in the background and is no longer onscreen.
    • scenewillResignActive
      • Tells the delegate that the scene is about to resign the active state and stop responding to user events.
    • scenedidBecomeActive
      • Tells the delegate that the scene became active and is now responding to user events.

📍 2. App Delegate와 Scene Delegate의 각각의 역할

  • App Delegate
    • 앱에 영향을 주는 공통된 동작들을 관리
      • 앱의 중심 데이터구조를 초기화한다
      • 앱의 scene을 구성한다
      • 메모리 경고, 다운로드 완료 등 앱 외부에서 오는 알림에 대해 응답한다.
      • 앱의 scenes, views, view controllers 관련이 없는 앱 대상으로 하는 이벤트에 응답한다.
      • launch타임에 요구되는 서비스를 등록한다, apple 푸쉬알림 서비스처럼
  • Scene Delegate
    • 화면의 갱신, 생명주기를 관리
      • UISceneDelegate 객체를 사용하여 앱 사용자 인터페이스의 하나의 인스턴스에서 수명 주기 이벤트를 관리합니다.
      • 이러한 인터페이스는 scene이 foreground에 진입하여 활성화될때와 background에 진입할때를 포함하여 scene에 영향을 미치는 상태 전환에 응답하는 방법을 정의합니다.
      • 이러한 전환이 발생할때 delegate를 이용하여 적절한 동작을 제공하십시오.
      • 예를 들어 중요한 작업을 수행하고 앱이 background로 전환될때 앱을 조용하게 만듭니다.

📍 3. Scene의 개념이 생긴 이유는 무엇이고, 언제 어디서 활용할까

  • 각 scene별로 별도의 처리를 해주기 위해서 ?
  • HackMD를 앱으로 만든다고 생각하면 하나의 화면에는 작성만 하고, 다른 하나의 화면에서 Markdown 언어를 해석해서 띄어준다?

📍 4. 앱은 언제언제 Foreground Inactive 상태가 될까, 2가지 이상의 사례

  • Foreground Inactive
    • 앱이 포그라운드에서 실행 중이지만 이벤트를 수신하지 않는다.
      • foreground <-> background 사이 상태전환이 될 때 사이에 foreground-inactive 상태가 된다
      • 앱 실행 중 전화가 왔을 때 , 기존 앱이 background로 가기 전에 foreground-inactive 상태를 거친다
      • 전화를 마치고 다시 기존 앱이 foreground로 돌아올 때 foreground-inactive 상태를 거친다

📍. 앱의 상태가 Background로 지속되기 위한 요건은 무엇일까

  • 흐름이 끊기지 않아야 하는 중요한 작업일 경우 시스템에 그 이유를 알리고, info에 설정해줘야 한다.

Consider this approach if your app needs to finish sending a message or complete saving a file beginBackgroundTask(withName:expirationHandler:) to alert the system.

참고


📍 Respond to Scene-Based Life-Cycle Events

🔗 Foreground, Background

  • Suspended
    • 앱이 Background 이동하고 잠시 후 동작을 멈춘 상태
  • Background
    • 앱이 간단한 동작은 하지만 실제로 사용자에게 보여지는 상태가 아님
    • 특정 메서드를 호출해서 시스템에 Background 에서도 동작이 필요함을 알려야한다.
    • beginBackgroundTask(withName:expirationHandler:)
  • Unattached
    • 앱의 뷰가 그려졌지만, 화면에 나타나기 전의 상태
    • 연결되지 않은 상태
  • Foreground Inactive
    • 앱이 그려졌고 화면에 나타났으나, 사용자의 이벤트를 처리하지 않는 상황
    • 두 가지의 경우가 대표적이다
    • 액티브 되기 전과 백그라운드로 가기 전
    • 그 외의 상황은 특정 이벤트로 인해 발생되는거 같다 - 예)아이폰 설정화면을 켜기 위해 화면을 쓸어내릴 때 등등
    • 앱 캡처를 통해 상태를 저장하면 다시 동작하는 상황에서 기존 화면이 나타남
  • Foreground Active
    • 앱이 화면에 나타나고 사용자의 이벤트를 기다리는 상황

🔗 UISceneDelegate

  • iOS 13 이후로 Scene 기반 앱의 수명주기 이벤트를 담당하는 Delegate
  • Connecting and Disconnecting the Scene
    • func scene(UIScene, willConnectTo: UISceneSession, options: UIScene.ConnectionOptions)
      • 앱의 scene 추가에 대해 대리자에게 알림.
    • func sceneDidDisconnect(UIScene)
      • 앱에서 UIKit이 scene을 제거했음을 대리자에게 알림.
    • class UIScene.ConnectionOptions
      • UIKit이 scene을 생성한 이유에 대한 정보를 포함하는 데이터 객체.
  • Transitioning to the Foreground
    • func sceneWillEnterForeground(UIScene)
      • scene이 foreground에서 실행되기 시작하고 사용자에게 보여지게될 것임을 대리자에게 알림.
    • func sceneDidBecomeActive(UIScene)
      • scene이 Active되었으며 이제 사용자 이벤트에 응답하고 있음을 대리자에게 알림.
  • Transitioning to the Background
    • func sceneWillResignActive(UIScene)
      • scene이 inactive 상태로 간다고 대리자에게 알림.
    • func sceneDidEnterBackground(UIScene)
      • scene이 background에서 실행 중이며 더 이상 화면에 표시되지 않음을 대리자에게 알림.

Respond to App-Based Life-Cycle Events는 iOS 12 이전 버전이나 scene을 지원하지 않는 App을 개발할 때 참고하면 좋을거 같다.

참고 : 공식문서

profile
I Am Groot

0개의 댓글