Split out of #116 (closed). The home-screen widget reads today's puzzle from the shared App Group container (CrosscueWidget.swift), which is only refreshed when the app runs. A user who hasn't opened Crosscue in a day or two sees a stale "today" tile.
Scope
- Register a
BGAppRefreshTask (identifier e.g. dev.tomhess.crosscue.refresh) at launch; reschedule daily from the completion handler.
- On wake, run
attemptIfNeeded() (downloads/imports today's puzzle) and refresh the widget timeline so the App Group snapshot is current.
- Document the limitation in the QA checklist: iOS controls cadence and may rarely fire it for low-engagement users — this is best-effort, not guaranteed.
Explicitly out of scope
Why this is low priority
Acceptance
Refs: #116 (origin), #159 (why no push)
Split out of #116 (closed). The home-screen widget reads today's puzzle from the shared App Group container (
CrosscueWidget.swift), which is only refreshed when the app runs. A user who hasn't opened Crosscue in a day or two sees a stale "today" tile.Scope
BGAppRefreshTask(identifier e.g.dev.tomhess.crosscue.refresh) at launch; reschedule daily from the completion handler.attemptIfNeeded()(downloads/imports today's puzzle) and refresh the widget timeline so the App Group snapshot is current.Explicitly out of scope
Why this is low priority
Acceptance
BGAppRefreshTaskregistered at launch and rescheduled daily from completionRefs: #116 (origin), #159 (why no push)