【SwiftUI】 앱의 기동 상태를 취득하는 방법 【iOS】
6425 단어 iOSSwiftiOS14ScenePhaseSwiftUI
SwiftUI에서 iOS 앱을 개발하고 있어, 앱의 기동 상태를 취득하는 방법을 조사하는데 고생했기 때문에 비망록도 겸해 이 자리에서 공유하겠습니다.
iOS 앱의 시작 상태 정보
iOS 앱의 시작 상태는 Active, Inactive, Background의 세 가지 상태로 나눌 수 있습니다.
상태 천이도는 아래 그림과 같습니다. 기동할 때는 Inactive를 경유하고 나서 Active가 되는 것이나, Active로부터 Background가 될 때도 Inactive를 경유하는 것을 알 수 있다고 생각합니다.
자세한 내용은 Apple 공식 문서을 참조하십시오.
SwiftUI에서 얻는 방법
최근까지 SwiftUI에서는 앱의 기동 상태를 취득하는 API가 준비되어 있지 않았습니다만, iOS14에서는 ScenePhase를 이용하는 것으로 간단하게 취득할 수 있게 되었습니다.
특히 App 인스턴스에 다음 속성을 추가하여 검색할 수 있습니다.
@Environment(\.scenePhase) private var scenePhase
예를 보자. Xcode에서 새 프로젝트를 시작할 때 자동 생성되는 TestApp.swift를 다음과 같이 다시 작성합니다. (이 경우 Test는 프로젝트 이름입니다)
//
// TestApp.swift
// Test
//
// Created by Ossamoon on 2020/12/25.
//
import SwiftUI
@main
struct TestApp: App {
@Environment(\.scenePhase) private var scenePhase
var body: some Scene {
WindowGroup {
ContentView()
}
.onChange(of: scenePhase) { phase in
switch phase {
case .background:
print("バックグラウンド状態になりました")
case .active:
print("アクティブ状態になりました")
case .inactive:
print("非アクティブ状態になりました")
default:
print("このメッセージがでたら何か変だよ")
}
}
}
}
시뮬레이터에서 앱을 실행해 봅시다. 그러면 콘솔에 "활성 상태가되었습니다."라는 메시지가 나타납니다.
여기에서 스 와이프하여 메뉴를 표시하면 "비활성 상태가되었습니다."라는 메시지가 나타납니다.
다른 화면으로 이동하면 '백그라운드 상태가 되었습니다'라는 메시지가 나타납니다.
여기에서 다시 앱 화면으로 돌아가면 '비활성 상태가 되었습니다'라는 메시지에 이어 '활성 상태가 되었습니다'라는 메시지가 나타납니다.
이런 느낌의 거동을 나타냅니다. 실제로 여러분의 수중에서 여러가지 만져보실 수 있으면 좋겠습니다.
요약
ScenePhase를 사용하면 앱의 시작 상태를 쉽게 얻을 수 있다는 것을 알 수 있을까 생각합니다.
iOS14 이후가 아니면 사용할 수 없다는 제약은 있습니다만, 매우 편리한 API이므로 여러분도 꼭 ScenePhase를 시험해 주세요!
참고문헌
최근까지 SwiftUI에서는 앱의 기동 상태를 취득하는 API가 준비되어 있지 않았습니다만, iOS14에서는 ScenePhase를 이용하는 것으로 간단하게 취득할 수 있게 되었습니다.
특히 App 인스턴스에 다음 속성을 추가하여 검색할 수 있습니다.
@Environment(\.scenePhase) private var scenePhase
예를 보자. Xcode에서 새 프로젝트를 시작할 때 자동 생성되는 TestApp.swift를 다음과 같이 다시 작성합니다. (이 경우 Test는 프로젝트 이름입니다)
//
// TestApp.swift
// Test
//
// Created by Ossamoon on 2020/12/25.
//
import SwiftUI
@main
struct TestApp: App {
@Environment(\.scenePhase) private var scenePhase
var body: some Scene {
WindowGroup {
ContentView()
}
.onChange(of: scenePhase) { phase in
switch phase {
case .background:
print("バックグラウンド状態になりました")
case .active:
print("アクティブ状態になりました")
case .inactive:
print("非アクティブ状態になりました")
default:
print("このメッセージがでたら何か変だよ")
}
}
}
}
시뮬레이터에서 앱을 실행해 봅시다. 그러면 콘솔에 "활성 상태가되었습니다."라는 메시지가 나타납니다.
여기에서 스 와이프하여 메뉴를 표시하면 "비활성 상태가되었습니다."라는 메시지가 나타납니다.
다른 화면으로 이동하면 '백그라운드 상태가 되었습니다'라는 메시지가 나타납니다.
여기에서 다시 앱 화면으로 돌아가면 '비활성 상태가 되었습니다'라는 메시지에 이어 '활성 상태가 되었습니다'라는 메시지가 나타납니다.
이런 느낌의 거동을 나타냅니다. 실제로 여러분의 수중에서 여러가지 만져보실 수 있으면 좋겠습니다.
요약
ScenePhase를 사용하면 앱의 시작 상태를 쉽게 얻을 수 있다는 것을 알 수 있을까 생각합니다.
iOS14 이후가 아니면 사용할 수 없다는 제약은 있습니다만, 매우 편리한 API이므로 여러분도 꼭 ScenePhase를 시험해 주세요!
참고문헌
Reference
이 문제에 관하여(【SwiftUI】 앱의 기동 상태를 취득하는 방법 【iOS】), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Ossamoon/items/8546dfa4811b34f669d4텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)