【Swift/Apple Watch】WKExtensionでフォアグラウンド/バックグラウンドの検知
この記事からわかること
- SwiftでApple Watchアプリを開発する方法
- フォアグラウンド/バックグラウンドを検知する方法
- WKExtensionとは?
- NotificationCenterの使い方
index
[open]
\ アプリをリリースしました /
友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-
posted withアプリーチ
環境
- Xcode:15.0.1
- iOS:17.0
- watchOS:10.0
- Swift:5.9
- macOS:Sonoma 14.1
WatchOSアプリでフォアグラウンド/バックグラウンドを検知する方法
WatchOSアプリを開発中にアプリがフォアグラウンド/バックグラウンドへ移行したことを検知するためにNotificationCenter
を使用して以下のように実装したところUIApplication
が見つからないというエラーになってしまった。
おすすめ記事:【Swift】NotificationCenterクラスの使い方!NSNotification.Name型の種類!
NotificationCenter.default.publisher(for: UIApplication.didEnterBackgroundNotification)
.sink { _ in
print("アプリがバックグラウンドになった")
}
.store(in: &cancellables)
調べてみるとWKExtension
を使用することで実装できるみたいです。
参考文献: WatchOS: getting applicationDidBecomeActive notifications
class AppState {
private var cancellable: AnyCancellable?
init() {
cancellable = NotificationCenter.default.publisher(for: WKExtension.applicationDidEnterBackgroundNotification)
.sink { _ in
print("アプリがバックグラウンドになった")
}
}
}
WKExtensionクラスとは?
公式リファレンス:WatchKit - Observing messages from the notification center
WKExtension
クラスはwatchOS上で実行されるアプリのの制御と調整を担当するクラスです。アプリの起動や停止といったライフサイクルの取得やリモート通知の登録などを行うことができるようです。
class AppState {
private var cancellables = Set<AnyCancellable>()
init() {
NotificationCenter.default.publisher(for: WKExtension.applicationDidBecomeActiveNotification)
.sink { _ in
print("アプリがアクティブになった")
}
.store(in: &cancellables)
NotificationCenter.default.publisher(for: WKExtension.applicationWillResignActiveNotification)
.sink { _ in
print("アプリが非アクティブになった")
}
.store(in: &cancellables)
NotificationCenter.default.publisher(for: WKExtension.applicationDidEnterBackgroundNotification)
.sink { _ in
print("アプリがバックグラウンドになった")
}
.store(in: &cancellables)
NotificationCenter.default.publisher(for: WKExtension.applicationWillEnterForegroundNotification)
.sink { _ in
print("アプリがフォアグラウンドになった")
}
.store(in: &cancellables)
}
}
まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。
ご覧いただきありがとうございました。