84d45a6d41
DEBUG-only screenshot support (seeded sample data via ScreenshotSeed, per-screen launch args, screenshot roots for both apps) so iPhone + Apple Watch App Store shots can be captured deterministically from the simulator — all excluded from release builds. Also seed ExerciseView's set-grid progress in init so it renders correctly on the first frame. Adds Scripts/metadata/ as the listing source of truth (copy, URLs, review notes, and the captured screenshots). Claude-Session: https://claude.ai/code/session_018gg69MaUetDNzWzBXisfMV
3.3 KiB
3.3 KiB
Changelog
All notable changes to this project are documented here.
June 2026
- Exercise detail now renders the set-progress grid correctly on the first frame
(seeded from the log in
init) instead of filling in a frame later. - Added a DEBUG-only screenshot harness (seeded sample data +
--screenshot --screen <name>launch args, excluded from release builds) for generating App Store screenshots from the iPhone and Apple Watch simulators, plus theScripts/metadata/App Store listing source of truth. - Redesigned the Apple Watch app into a focused workout runner: it opens directly on the active workout's exercise list (or prompts you to start one on iPhone), and each exercise runs as a horizontally-paged HIIT cycle — a count-up work phase, swipe to a count-down rest that pings once per second in the final three seconds then auto-advances to the next set, and One More / Done buttons on the final set.
- Added a configurable rest-between-sets duration (iPhone Settings, default 45s), synced to the watch over WatchConnectivity.
- Watch progress is now monotonic and reliably synced: completing a work phase advances the set count on the iPhone and a finished set is never un-counted, and reopening an exercise jumps straight to the first unfinished set (skipping completed work/rest pairs) instead of snapping back to set 1.
- Fixed: progress made on the watch now updates open iPhone screens live. The
phone applies a watch-forwarded workout to its cache directly on receipt, instead
of waiting on an
NSMetadataQueryevent that a same-process file overwrite doesn't reliably emit — and the exercise detail screen now observes these updates, so its set grid advances in real time without leaving and re-entering the screen. - Starting a workout on the iPhone now launches the Apple Watch app straight into
the session via HealthKit (a one-time Health permission); the watch holds an
HKWorkoutSessionto stay active while you train and releases it when the workout finishes. - New app icon: a tilted dumbbell on a purple gradient, full-bleed across iOS and Watch (replaces the teal circular mark).
- 2.0 — Re-platformed persistence onto an iCloud Drive document architecture:
JSON files in iCloud Drive are now the sole source of truth, with a rebuildable
SwiftData cache populated by an
NSMetadataQueryobserver. Removed CloudKit/NSPersistentCloudKitContainerand the App-Group store. - Rebuilt the Apple Watch sync on a new WatchConnectivity bridge keyed by stable ULIDs (the phone is the sole writer of iCloud Drive).
- Migrated the project to XcodeGen; iOS 26 / watchOS 26, Swift 6 strict concurrency.
- Splits ship as an on-demand machine-based starter routine (Upper Body, Core, Lower Body) at 4×10 with sensible starting weights.
- Stored exercise/log durations as integer seconds (was a
Dateepoch hack). - Fixed: workout marked complete on creation, an undismissable delete dialog, toolbar buttons hidden by nested navigation stacks, and a placeholder "Settings coming soon" row.
- Fixed: tapping an exercise in a workout log pushed the wrong screen (a
duplicate of the split list) with the exercise detail hidden underneath — a
single row tap was navigating twice. Caused by stacking two
navigationDestinationmodifiers on the log list; rows now use a single destination-based link.