// // KegingActivityAttributes.swift // Keging // // Live Activity(다이나믹 아일랜드) 상태 — 앱·위젯 두 타깃에 동일 파일로 컴파일. // // ⚠️설계 원칙(실기기 5차 확정): 백그라운드 Live Activity 갱신은 시스템이 예산제로 // 버리고(실측: 4번째부터), staleDate가 지나도 재렌더가 보장되지 않는다(시뮬 실측). // 그래서 상태는 **세트 일정뿐** — 시작할 때 한 번 등록하면 갱신이 아예 필요 없고, // 위젯은 전부 시스템 렌더 요소(타임라인 바·플레이헤드·남은 시간)로만 그린다. // 애플 시계 앱 타이머와 같은 모델: 갱신할 데이터가 없으니 멈출 수도 없다. // #if canImport(ActivityKit) import ActivityKit import Foundation nonisolated struct KegingActivityAttributes: ActivityAttributes { nonisolated struct ContentState: Codable, Hashable { // 자가 렌더링용 전체 일정 — 버튼 누른 시각부터 결정적 var sessionStart: Date var prepSeconds: Int var contractSeconds: Int var relaxSeconds: Int var totalReps: Int var sessionEnd: Date { sessionStart.addingTimeInterval( Double(prepSeconds + totalReps * (contractSeconds + relaxSeconds)) ) } } var startedAt: Date = Date() } #endif