일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- RxSwift
- graphql
- init
- operator
- Xcode
- typeorm
- Bug
- IOS
- vim
- NullObject
- nonisolated
- @EnvironmentObject
- dismiss
- subject
- Operators
- Creating Operators
- RxCocoa
- SwiftUI
- Operater
- ios14
- init?
- @State
- SWIFT
- @Environment
- @Binding
- RFC1738/1808
- nestjs
- URL(string:)
- swift6
- NavigationLink
- Today
- Total
Tunko Development Diary
[iOS14][SwfitUI] SwiftUI2 App life cycle 정리 본문
신규 프로젝트 생성시에 라이프 사이클을 선택하면 AppDelegate가 없어진 새로운 life cycle 이 적용된 프로젝트가 생성됩니다.
새로 만든 프로젝트 이름은 ’Test’라고 명명했습니다.
이후 (프로젝트명+App).swift 파일을 보면 아래 코드가 나옵니다.
import SwiftUI
@main
struct TestApp: App {
var body: some Scene {
WindowGroup {
ContentView()
}
}
}
우선 제일 먼저 뜯어 볼건 @main 입니다.
@main
@main 기능은 앱의 시작점인 Entry Points 를 지정하는 것 입니다.
@main swift-book
기존 방식인 AppDelegate에서 프레임워크 및 리소스 초기화를 진행했지만
SwiftUI 에서는Initializers를 통해 초기화를 구현하게 됩니다.
struct ContentView: View {
init() {
print("App initialiser.")
}
var body: some View {
Text("Hello, world!")
}
}
AppDelegate 에서 사용하던 기능 예시
AppDelegate에서 사용하던
applicationDidBecomeActive
applicationWillResignActive
applicationDidEnterBackground
등이 대체 됩니다.
기존엔 Appdelegate에서 제공되는 메서드를 통해
앱이 활성화, 즉 백그라운드에서 포그라운드로 전환시 앱내 사용할 데이터를 세팅 해준다던가, 혹은 비활성화시에 앱에서 사용중인 캐시를 flush 할 수 있었습니다.
앞선 예시를 swiftUI 에선 다른 방식으로 대체하게 됩니다.
SwiftUI life cycle
iOS14부터 Apple은 새로운 기능ScenePhase새로운 제공합니다.
SwiftUI 에서는 @Environment 속성 래퍼를 사용하여 값을 가져오고, onChange(of:) 수정자를 사용하여 변경사항을 수신함으로서 코드에서 현재 값에 접근 할 수 있도록 했습니다.
import SwiftUI
@main
struct TestApp: App {
@Environment(\.scenePhase) var scenePhase
var body: some Scene {
WindowGroup {
ContentView()
}.onChange(of: scenePhase) { newScenePhase in
switch newScenePhase {
case .active:
print("App is active")
case .inactive:
print("App is inactive")
case .background:
print("App is in background")
@unknown default:
print("Oh - interesting: I received an unexpected new value.")
}
}
}
}
위코드를 작성후 앱 을 실행 시켜봅니다.
앱이 켜진 직후 로그
App is active
앱 스위칭 할 수 있게 올린 상태
App is inactive
아이폰 홈화면으로 나왔을 때
App is in background
앱 재진입시
App is inactive
App is active
공식 문서 ScenePhase를 보시면
case inactive The scene is in the foreground but should pause its work.
즉 .inactive는 디바이스 화면 전경에 있지만 일시정지 상태이며 이벤트도 받을 수 없는 상태 입니다.
이상 iOS14에서 적용된 App life cycle을 정리해보았습니다.
'Development > iOS 개발' 카테고리의 다른 글
[iOS][SwfitUI] SwiftUI life cycle에서 AppDelegate사용하기 (0) | 2021.02.14 |
---|---|
[iOS14][SwfitUI] SwiftUI2 life cycle 에서 딥링크 처리 (0) | 2021.02.14 |
[iOS][swiftUI] iOS13에서 분할된 AppDelegate와 추가된SceneDelegate이해하기 (0) | 2021.02.13 |
[iOS][swift]NavigattionBar 하단 라인 지우기 (0) | 2021.02.13 |
[iOS][swift] App Version 가져오기 (0) | 2021.02.13 |