// // DataChange.swift // Haru_Danim // // 앱 안에서 데이터가 바뀌는 모든 Mutation의 끝단에서 호출하는 공통 갱신 지점. // 주기적 백그라운드 새로 고침 대신 변경 이벤트 시점에만 위젯 타임라인을 갱신해 // WidgetKit 업데이트 예산을 아낀다. (시리/위젯 인텐트 경로는 IntentStore.commit()이 같은 역할) // import SwiftData import WidgetKit @MainActor enum DataChange { /// 저장을 즉시 확정(위젯 확장이 같은 App Group 저장소를 읽으므로 autosave를 기다리지 않음)하고 /// Live Activity → 위젯 타임라인 → 워치 스냅숏 순으로 동기화한다. static func commit(context: ModelContext) { try? context.save() LiveActivityManager.sync(context: context) WidgetCenter.shared.reloadAllTimelines() // 제어 센터 컨트롤의 토글 상태(측정 중 여부)도 함께 갱신 ControlCenter.shared.reloadAllControls() WatchSyncManager.shared.pushSnapshot() } }