概要

科目別の学習時間を計測する中核機能。バックグラウンド・アプリ再起動でも正確に経過時間を保持。 ポモドーロモード(集中25分/休憩5分)対応。

関連画面

永続化の仕組み

  1. 開始時 saveTimerState(subjectID, isPomodoroMode) → UserDefaults に開始日時・科目ID保存
  2. バックグラウンド遷移 handleBackground() → Timer.invalidate(), 時刻記録
  3. フォアグラウンド復帰 handleForeground() → 背景中の経過時間を加算、Timer 再開
  4. アプリ再起動時 restoreIfNeeded(context) → 24時間内なら自動復元
  5. 停止時 clearTimerState() → UserDefaults クリア

ポモドーロモード

24時間境界

アプリ再起動時、保存済み startTime と現在時刻の差が 24時間以内のみ復元。 朝をまたいだ場合は自動リセットして誤った長時間記録を防ぐ。

外部連携

連携先用途
UserDefaultsタイマー状態永続化
LiveActivityService1秒ごとに ContentState 更新
WidgetSyncServiceセッション保存後に Widget 同期
SwiftDataStudySession として保存

変更履歴

バージョン日付変更内容
1.02026-05-09初版作成