3ed7b9272c
Replace the bodyweight-catalog-derived seed (hardcoded 3x10, weight 0) with an explicit curated machine-based routine: Upper Body, Core, and Lower Body at 4x10 with starting weights taken from real workout logs. Decoupled from the shared exercise catalog YAML (still used by the exercise picker).
28 lines
1.4 KiB
Markdown
28 lines
1.4 KiB
Markdown
# Changelog
|
||
|
||
All notable changes to this project are documented here.
|
||
|
||
## June 2026
|
||
|
||
- 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 `NSMetadataQuery` observer. Removed
|
||
CloudKit/`NSPersistentCloudKitContainer` and 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 `Date` epoch 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
|
||
`navigationDestination` modifiers on the log list; rows now use a single
|
||
destination-based link.
|