c44cdd3f90
A row tap pushed twice: a value-based navigationDestination(for: String.self) collided with the row's NavigationLink(value:), surfacing a duplicate split list over the hidden exercise detail. Rows now use a destination-based NavigationLink, leaving navigationDestination(item:) as the view's only destination.
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 on-demand starter data generated from the bundled exercise
|
|
catalogs.
|
|
- 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.
|