기술보안/ios

[ios] ios Application LifeCycle

kimcogi 2024. 9. 28. 00:27

ios 앱 모의해킹을 수행 중 ios 앱 정적분석 할 때 ios 앱의 lifecycle에 따라 앱이 어떻게 실행되는지, 어떤 뷰 컨트롤러가 보이는지 등에 대한 내용이 있다는 것을 알게 되었다

모바일 모의해킹을 하기 위해서는 해당 내용을 숙지하는 것이 좋아 보여 공식문서와 구글링을 통해 상세히 정리해보려고 한다

  • 앱의 생명주기(LifeCycle)..?

안드로이드 앱과 ios 앱에는 둘 다 생명주기(LifeCycle)라는 게 존재한다

앱의 생명주기는 앱이 실행되는 동안 다양한 상태를 거치며 변화하는 것을 의미하는데 앱의 현재 상태에 따라 언제든지 앱이 수행할 수 있는 작업과 수행할 수 없는 작업을 결정하기 때문에 앱의 생명주기를 지켜야 함은 매우 중요하다

예시로 생각해 보면 우리가 앱의 화면상에서 보고 있는 프론트단(foreground)은 가장 직관적으로 보이기 때문에(실행 여부, 상태 여부 등) 가장 우선적으로 실행이 될 가능성이 크고, 반대로 백 단(background)은 이용자들에게 보이지 않기 때문에(offscreen) 최소한의 작업을 수행해야 한다

앱의 상태변화에 따라서 적절한 동작을 수행할 수 있도록 조정하는 게 이용자들을 위한 더 나은 앱 환경을 제공할 수 있다

 

  • ios 버전에 따른 변화

ios 13을 기점으로 LifeCycle events가 달라지게 되는데 ios 13 이전에는 앱 기반 생명주기로 구성되어 있다

구분 구성 상세 주요 메서드
ios 13 이후 UISceneDelegate 각 UI 장면(Scene) 관리 scene(_:willConnectTo:options:)
sceneDidBecomeActive(_:)
sceneWillResignActive(_:)
sceneDidEnterBackground(_:)
sceneWillEnterForeground(_:)
UIApplicationDelegate 앱의 생명주기 관리 application(_:didFinishLaunchingWithOptions:)
applicationDidEnterBackground(_:)
applicationWillTerminate(_:)
ios 13 이전 UIApplicationDelegate 앱의 전체 생명주기 관리 application(_:didFinishlaunchingWithOptions:)
applicationDidEnterBackground(_:)
applicationWillEnterForeground(_:)
applicationDidBecomeActive(_:)
applicationWillResignActive(_:)
applicationWillTerminate(_:)

ios 13을 기점으로 큰 차이점이라고 한다면 13 이전의 버전에서는 UIApplicationDelegate만을 이용하여 앱의 전체 생명주기를 관리했다면 13 이후부터는 UIApplicationDelegate는 앱의 전체 생명주기 관리, UISceneDelegate는 각 UI 장면(Scene)을 관리한 걸로 보면 편하다

(UISceneDelegate는 ios 13 이후부터 멀티 윈도우 지원을 위해서 도입됨)

 

  • ios 13 이전 생명주기 상세

ios 13 이전 생명주기 [출처 : 하단]

 

위 사진을 보게 되면 앱을 실행시키기 전, 실행시킨 후의 전 과정을 보여준다

구분 상세 설명
앱 실행 전 Not Running 앱이 시작되기 전 상태를 의미하며 아이폰의 어떤 영역도 차지하지 않는 상태
앱 실행 후 Inactive 앱이 화면에서 실행중이지만 어떤 신호도 받지 않은 상태
Background 앱 화면 내 보이지 않는 영역에서 코드를 실행하고 있는 상태
Active 앱 화면이 실행 중인 상태
앱 종료 직전 Suspended 앱이 종료되기 직전의 상태

 

아래 사진은 apple 공식 문서에서 설명하는 내용을 조금 더 알기 쉽게 풀어서 작성해 준 사진이다

아래 사진을 참고하게 되면 조금 더 이해하기가 쉬울 듯하다

ios 13 이전 생명주기_2 [출처 : 하단]

 

  • ios 13 이후의 생명주기 상세

ipad goodnote [출저 : 하단]

ios 13 이후의 생명주기는 iPadOS의 영향으로 ios 13 이전의 생명주기와는 다른 양상을 보여주는데 그 이유는 한 화면에 한 앱이라는 개념을 깼기 때문이다(ex. 패드 굿노트)

ios 13 이후 생명주기 [출처 : 하단]

 

구분 상세 설명
앱 실행 전 Not Running 앱이 시작되기 전 상태를 의미하며 아이폰의 어떤 영역도 차지하지 않는 상태
앱 실행 후 Foreground
Inactive
앱이 화면에서 실행중이지만 어떤 신호도 받지 않은 상태
Background 앱 화면 내 보이지 않는 영역에서 코드를 실행하고 있는 상태
Foreground
Active
앱 화면이 실행 중인 상태
앱 종료 직전 Unattached UIKit이 Background, Suspended에 있는 scene를 회수하기 전 상태(회수 목적을 위한)
Suspended 앱이 종료되기 직전의 상태

 

위 사진에 대해 간단하게 설명해 보자면 이용자 또는 시스템이 앱에 대한 새로운 scene를 요청하게 될 경우

UIKit은 해당 scene를 만들어서 Unattached 상태로 변경하게 되고 이용자의 요청 상태에 따라 실제 보이는 화면은 Foreground InActive 쪽으로 이동하게 된다

그 이후 UIKit이 앱 화면이 실행할 수 있도록 하기 위해서 Foreground Active 쪽으로 이동되게 된다

이용자가 아닌 시스템에서 요청을 한 scene는 Background로 이동하게 되어 이벤트를 처리한다

 

이용자가 앱의 UI를 해제할 경우 (앱 종료 혹은 백그라운드 상태에 진입할 경우) UIKit은 scene를 Background 상태로 옮기게 되고 Suspended 상태에 도달한다

UIKit은 Background로 갔거나, Suspended 된 scene의 리소스들을 언제든지 회수할 수 있도록 하기 위해서 Unattached 상태로 연결을 해제하는 경우들도 있다

 

왜 UIKit은 scene의 리소스를 회수하기 위해서 그냥 Suspended로 보내지 않고 Unattached로도 보내는 것일까?

그 이유는 단 하나의 scene를 관리하는 것이 아닌 여러 개의 scene를 관리하게 됨으로써 메모리 효율을 얻기 위해 scene와 관련된 리소스들을 해제하는 것이기 때문이다

 

이렇게 간단하게나마 ios 앱의 생명주기에 대해 알아보았다

실제적인 정적분석 상태에서는 많이 쓰인다고는 보장을 할 수 없겠지만 위와 같은 ios 앱의 생명주기를 암으로써 진단 과정을 더욱 효율적으로 가져갈 수 있도록 하는 것이 중요하다고 생각된다

다음에는 조금 더 정적분석 과정에 대해 알아보도록 하자

 

 

  • 출처

https://developer.apple.com/documentation/uikit/app_and_environment/managing_your_app_s_life_cycle

 

Managing your app’s life cycle | Apple Developer Documentation

Respond to system notifications when your app is in the foreground or background, and handle other significant system-related events.

developer.apple.com

https://developer.apple.com/documentation/uikit/app_and_environment/scenes

 

Scenes | Apple Developer Documentation

Manage multiple instances of your app’s UI simultaneously, and direct resources to the appropriate instance of your UI.

developer.apple.com

https://manasaprema04.medium.com/application-life-cycle-in-ios-f7365d8c1636

 

Application life cycle in iOS

What is app life cycle?

manasaprema04.medium.com

 

반응형