Sponsor Link
環境&対象
- macOS14.5 Beta
- Xcode 15.3
- iOS 17.4
- Swift 5.9
ScenePhase
SwiftUI で Scene の状態を表す型として使用されます。
参考
ScenePhaseApple Developer Documentation
enum として定義されていて 値としては以下を取り得ます。
・active
・inactive
・background
それぞれ以下のような意味です(意訳)。
- active
- フォアグラウンドで動作していて操作可能状態
- inactive
- フォアグラウンドで動作しているが、停止中
- background
- UI には表出していない状態
SwiftUI で ScenePhase を参照する
Scene は、SwiftUI の View からは、以下のように Environment の1つとして参照できるようになっています。
@Environment(\.scenePhase) private var scenePhase
たとえば、scenePhase が変わるごとに 何か処理をするのであれば 以下のようになります。
import SwiftUI
@main
struct MyApp: App {
@Environment(\.scenePhase) var scenePhase
var body: some Scene {
WindowGroup {
ContentView()
}
.onChange(of: scenePhase, {
// process something
})
}
}
ScenePhase を使うケース1例
ScenePhase は アプリの状態を表現しているので、さまざまなケースで使用されそうです。
以下では、1つの例として AppTransparancyTracking の 許諾ダイアログを出すときを考えます。
許諾ダイアログは、ATTrackingManager.requestTrackingAuthorization という API を使用して表示します。
参考
requestTrackingAuthorization(completionHandler:)Apple Developer Documentation
ドキュメントにも記載されていますが、この API は、アプリケーションの状態が、Active のときに呼び出すことが必要です。
ドキュメントでは、UIApplicationStateActive で説明されていますが、用意されている状態から考えても、scenePhase も UIApplicationStateActive と同じ様に更新されるように思えます。(ドキュメントでの説明はありません)
以下のようにすることで、許諾ダイアログを表示することができるようになります。
@main
struct MyApp: App {
@Environment(\.scenePhase) var scenePhase
var body: some Scene {
WindowGroup {
ContentView()
}
.onChange(of: scenePhase, initial: true, {
if scenePhase == .active {
Task { @MainActor in
let state = await ATTrackingManager.requestTrackingAuthorization()
// process along state
}
}
})
}
}
以前は、UIApplicationDelegate を指定して applicationDidBecomeActive を使わないと実装できなかったことも、scenePhase を使うことで、
UIApplicationDelegate なしで できるようになりました。
まとめ
SwiftUI で アプリの状態を表す ScenePhase
- Scene の状態を表す
- Environment として提供されている
- active, inactive, background という状態を取り得る
説明は以上です。
不明な点やおかしな点ありましたら、こちらまで。
SwiftUI おすすめ本
SwiftUI を理解するには、以下の本がおすすめです。
SwiftUI ViewMatery
SwiftUI で開発していくときに、ViewやLayoutのための適切なmodifierを探すのが大変です。
英語での説明になってしまいますが、以下の”SwiftUI Views Mastery Bundle”という本がビジュアル的に確認して探せるので、便利です。
英語ではありますが、1ページに コードと画面が並んでいるので、非常にわかりやすいです。
View に適用できる modifier もわかりやすく説明されているので、ビューの理解だけではなく、どのような装飾ができるかも簡単にわかります。
超便利です
販売元のページは、こちらです。
SwiftUI 徹底入門
# SwiftUI は、毎年大きく改善されていますので、少し古くなってしまいましたが、いまでも 定番本です。
Swift学習におすすめの本
詳解Swift
Swift の学習には、詳解 Swift という書籍が、おすすめです。
著者は、Swift の初期から書籍を出していますし、Swift の前に主力言語だった Objective-C という言語についても同様の書籍を出しています。
最新版を購入するのがおすすめです。
現時点では、上記の Swift 5 に対応した第5版が最新版です。
Sponsor Link