앱의 생명주기에 대해서 알아보자 🐣 #25
OneMoreThink
started this conversation in
Idea
Replies: 2 comments 1 reply
-
안녕하세요! 2기 올리버입니다. 정리를 넘 잘해주셔서 잘 읽고 배워갑니다. 👀❗️❗️❗️UIKit과 SwiftUI에서의 생명주기 지식을 모두 모아놓은 자료라니 귀하군요. 제가 알고 있는 지식을 덧붙여보겠습니다: iOS 13부터 SceneDelegate가 도입되었지만, 개발자가 원하면 최신 버전의 iOS를 지원하는 프로젝트라도 SceneDelegate 관련 코드를 프로젝트에서 지우고 iOS 13 미만에서처럼 AppDelegate로 앱 생명주기를 관리할 수도 있어요. |
Beta Was this translation helpful? Give feedback.
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
아임 파인입니다. 다들 안녕하신지요.🌿
NC2를 위한 Notification 리서치중에 SwiftUI에서 UserNotifications Framework를 사용하기 위해서는 Adapter를 활용해 SwiftUI의 내부에서 UIKit의 생명주기를 활용해야한다는 점을 알게 되었습니다. 이 과정 속에서 SwiftUI와 UIKit Framework는 생명주기에 대해 파보면서 정리한 내용을 공유하고자 합니다. 내용중에 잘못된 부분이 있는 경우 언제든지 말씀해주세요🦾 더불어 앱의 생명주기와 관련해서 각자가 알고 있는 지식을 더해 주세요 🌼
UIKit과 SwiftUI의 생명주기 관리
앱 생명주기
Not Running (실행되지 않음)
: 앱이 아직 시작되지 않았거나 완전히 종료된 상태를 의미
Inactive (비활성 상태)
: 앱이 실행중이지만 이벤트를 받지 않는 상태(사용자와의 상호작용이 없는 상태)
Active (활성 상태)
: 앱이 실행중이며 이벤트를 받는 상태 (사용자와의 상호작용이 가능한 상태)
Background ( 백그라운드 상태)
: 앱이 화면에 표시되지 않으며 대부분의 작업이 중지된 상태 (사용자와의 상호작용이 불가능)
Suspended(일시 중지 상태)
: 앱이 백그라운드에 있지만, 실행되지 않는 상태이다. 메모리에서 유지되지만 코드를 실행하지는 않는다. 메모리 부족시 시스템에 의해 앱이 종료될 수 있다.
Foreground vs Background
UIKit에서 앱 생명주기 관리 방법
AppDelegate와 SceneDelegate
iOS 12 이전 까지는 AppDelegate가 Process Lifecycle(앱이 실행되고(메모리에 올리고), 앱이 종료되고(메모리에서 내리고)) 하는 앱 자체의 생명주기와 함께 UI Lifecycle ( 화면이 사용자에게 보여지기 시작하고, 상호작용을 시작하는 등) 앱의 User Interface에 관한 생명주기를 함께 관리 했다.
iOS 13이후부터는 기존에 AppDelegate가 담당하던 UI Lifecycle과 관련된 부분을 SceneDelegate가 맡게 되었다.
iOS 12 이전까지는 대부분 하나의 앱은 하나의 window를 가졌으나 iOS 13부터 Scene 개념을 도입하면서 다음과 같이 하나의 앱이 여러 window를 가질 수 있게 되었다. -> 하나의 메모 앱에서 두가지 window가 화면상에 나타나 서로 다른 UI LifeCycle을 가져 갈 수 있음
Scene이란?
기존에는 하나의 앱에는 하나의 Window를 가지고 있고 앱을 실행하면서 화면에 나타날 UI 요소들은 Window위에 띄우는 방식으로 앱을 구성했다.
Scene Session 이란?
그럼 이제 AppDelegate는 무엇을 하는가?
이제 UILifeCycle에 대한 부분을 SceneDelegate가 담당함으로써 이제 AppDelegate는 하나의 UI에 종속되지 않고 앱 전체에 대한 시스템적 생명주기 관리에 집중할 수 있게 되었다.
정리
AppDelegate
AppDelegate
는 애플리케이션의 전체적인 생명 주기를 관리하는 역할을 수행합니다. 앱이 시작되고 종료될 때, 그리고 중요한 상태 변화가 발생할 때 호출되는 메서드를 포함하고 있습니다.AppDelegate 사용 예
AppDelegate
는 애플리케이션의 전체적인 생명 주기를 관리하는 데 사용됩니다. 예를 들어, 앱이 처음 시작될 때 초기 설정을 하거나, 앱이 완전히 종료되기 전에 데이터를 저장하는 등의 작업을 처리합니다.SceneDelegate
SceneDelegate
는 하나 이상의 UI 윈도우(씬)와 관련된 생명 주기를 관리합니다. iOS 13부터는 앱이 멀티 윈도우를 지원할 수 있게 되어, 각 윈도우는 별도의 씬으로 관리됩니다.SceneDelegate
는 개별 씬의 활성화, 비활성화, 포어그라운드 전환 및 백그라운드 전환을 처리합니다.SceneDelegate 사용 예
SceneDelegate
는 각 씬의 생명 주기를 관리합니다. 이는 특히 멀티 윈도우 지원을 위해 사용됩니다. 예를 들어, 사용자가 앱 내에서 새로운 윈도우를 열 때, 해당 윈도우와 관련된 생명 주기를 관리합니다.요약
iOS 13 이후 멀티 윈도우 지원이 도입되면서
SceneDelegate
가 추가되었으며, 이는 앱의 유연한 상태 관리를 가능하게 합니다.AppDelegate
는 여전히 애플리케이션의 중요한 상태 변화를 처리하며,SceneDelegate
는 개별 윈도우의 상태 변화를 처리하는 역할을 합니다.SwiftUI에서의 앱 생명주기 관리 방법
SwiftUI에서 @Environment를 통한 접근
SwiftUI에서는 @Environment를 사용하여 애플리케이션의 환경 설정에 접근할 수 있다. @Environment는 SwiftUI가 제공하는 시스템 환경 값을 읽을 수 있게 해주는 속성 래퍼이다. 이를 통해 앱의 생명 주기 상태나 기타 환경 정보를 쉽게 접근할 수 있다.
SwiftUI에서 UIKit의 앱 생명주기 관리방법이 필요한 경우
1. 푸시 알림 설정 및 처리
푸시 알림을 설정하고 디바이스 토큰을 관리하기 위해
UIApplicationDelegate
가 필요합니다.2. 외부 URL 처리
앱이 외부 URL을 통해 열릴 때 이를 처리하기 위해
UIApplicationDelegate
가 필요합니다.3. 백그라운드 작업 관리
앱이 백그라운드 상태로 전환되거나 백그라운드에서 특정 작업을 수행해야 할 때
UIApplicationDelegate
가 필요합니다.4. SceneDelegate 사용
iOS 13 이상에서는 멀티 윈도우 지원을 위해
SceneDelegate
를 사용하는 경우도 있습니다.@UIApplicationDelegateAdaptor
를 사용한다.@UIApplicationDelegateAdapter
를 통해 이를 사용사용 예제: SwiftUI에서 UIKit 라이프 사이클 관리
Beta Was this translation helpful? Give feedback.
All reactions