DeviceActivityMonitorExtension 사용하기
DeviceActivityMonitorExtension을 활용해 기기활동을 모니터링할 수 있다.
DeviceActivityMonitorExtension에서 특정 activity 혹은 event를 잡기 위해선 DeviceActivityName과, DeviceActivityEvent.Name 확장이 필요하다.
import DeviceActivity
class DeviceActivityMonitorExtension: DeviceActivityMonitor {
override func intervalDidStart(for activity: DeviceActivityName) {
super.intervalDidStart(for: activity)
// DeviceActivityCenter 등록한 activity 모니터링이 시작되기 직전에 호출된다.
}
override func intervalDidEnd(for activity: DeviceActivityName) {
super.intervalDidEnd(for: activity)
// DeviceActivityCenter 등록한 activity 모니터링이 종료되기 직전에 호출된다.
}
override func eventDidReachThreshold(_ event: DeviceActivityEvent.Name, activity: DeviceActivityName) {
super.eventDidReachThreshold(event, activity: activity)
/**
DeviceActivityCenter 등록한 activity에 threshold를 설정했을 경우
관찰중인 앱이 threshold 시간만큼 실행되었을 경우 호출된다.
*/
}
override func intervalWillStartWarning(for activity: DeviceActivityName) {
super.intervalWillStartWarning(for: activity)
/**
DeviceActivityCenter 등록한 activity에 warningTime을 설정했을 경우
(모니터링 시작시간 - warningTime 시간)에 호출된다.
*/
}
override func intervalWillEndWarning(for activity: DeviceActivityName) {
super.intervalWillEndWarning(for: activity)
/**
DeviceActivityCenter 등록한 activity에 warningTime을 설정했을 경우
(모니터링 종료시간 - warningTime 시간)에 호출된다.
*/
}
override func eventWillReachThresholdWarning(_ event: DeviceActivityEvent.Name, activity: DeviceActivityName) {
super.eventWillReachThresholdWarning(event, activity: activity)
/**
DeviceActivityCenter 등록한 activity에 warningTime을 설정했을 경우
관찰중인 앱 사용 시간이 (threshold 시간 - warningTime 시간)에 호출된다.
*/
}
}
DeviceActivity를 확장하여 DeviceActivityCenter 에 등록된 Activity 를 잡아서 활용할 수 있다.
import DeviceActivity
import FamilyControls // FamilyActivitySelection 사용을 위해 가져옴
import ManagedSettings // ManagedSettingsStore 사용을 위해 가져옴
import SwiftUI // AppStorage 사용을 위해 가져옴
class DeviceActivityMonitorExtension: DeviceActivityMonitor {
// 다른 Target과 공유하기 위한 AppGroups에 등록한 UserDefaults
@AppStorage("KEY_NAME", store: UserDefaults(suiteName: APP_GROUP_NAME))
var myFamilyActivitySelection = FamilyActivitySelection() // Picker값 가져옴
override func intervalDidStart(for activity: DeviceActivityName) {
super.intervalDidStart(for: activity)
// 모니터링을 시작한 활동명이 .daily일 경우 동작
if activity == .daily {
let managedSettingsStore = ManagedSettingsStore(named: .default)
// ManagedSettingsStore에 등록한 이벤트 정보를 가져와 수정할 수 있다.
}
}
...
}
extension DeviceActivityName {
static let daily = Self("daily")
}
extension DeviceActivityEvent.Name {
static let `default` = Self("threshold.default")
}
NOTICE
DeviceActivityMonitorExtension은DeviceActivityCenter에 등록된 활동과 이벤트에 따라 호출된다.
Link