Add the macOS app: a library-management companion (routines, schedules, exercise browser)

A new 'Workouts Mac' target (same bundle ID as iOS, universal purchase)
with a NavigationSplitView shell over the shared data/sync layers:
routine management with starter gallery and seed-fork follow, schedule
editing (reminders stay iPhone-scheduled), and a browse-only exercise
library with the animated figures and reference guides.

Multi-writer stance: the Mac writes only routine and schedule documents
(whole-document last-writer-wins) and never workout documents, whose
per-log merge exists only on the watch ingest path. The Mac reconciles
on window activation (throttled) since iCloud syncs while the app is
closed, and flushes pending writes on deactivation.
This commit is contained in:
2026-07-16 19:55:06 -04:00
parent f6c5bc911f
commit cbdf02bca7
17 changed files with 2212 additions and 9 deletions
+50
View File
@@ -4,6 +4,7 @@ options:
deploymentTarget:
iOS: "26.0"
watchOS: "26.0"
macOS: "26.0"
xcodeVersion: "26.0"
defaultConfig: Debug
@@ -184,3 +185,52 @@ targets:
SWIFT_STRICT_CONCURRENCY: complete
IPHONEOS_DEPLOYMENT_TARGET: "26.0"
TARGETED_DEVICE_FAMILY: "1"
# ---- macOS app (library management MVP: routines/schedules/exercises; no
# workout running/editing). Same bundle id as the iOS app (universal
# purchase); writes only Splits/ and Schedules/ documents. -------------
Workouts Mac:
type: application
platform: macOS
sources:
- path: Shared
excludes:
- "HealthKit/**"
- path: Workouts/Sync
- path: Workouts/Seed
- path: Workouts/ExerciseFigure
- path: Workouts/Views/Exercises/ExerciseCatalog.swift
- path: "Workouts/Views/Exercises/ExerciseDocument+PlanSummary.swift"
- path: Workouts/Views/Exercises/ExerciseInfoContent.swift
- path: Workouts/Views/Routines/RoutineOrdering.swift
- path: Workouts/Views/Library/StarterSeedState.swift
- path: Workouts/Assets.xcassets
- path: Workouts/Resources/ExerciseMotions
buildPhase: resources
- path: Workouts/Resources/StarterSplits
buildPhase: resources
- path: "Workouts Mac"
excludes:
- "Resources/Info-*.plist"
- "Resources/*.entitlements"
- path: CHANGELOG.md
buildPhase: resources
type: file
- path: LICENSE.md
buildPhase: resources
type: file
dependencies:
- package: IndieSync
- package: IndieAbout
postBuildScripts: *updateBuildInfo
settings:
base:
PRODUCT_BUNDLE_IDENTIFIER: dev.rzen.indie.Workouts
PRODUCT_NAME: Workouts
INFOPLIST_FILE: "Workouts Mac/Resources/Info-macOS.plist"
CODE_SIGN_ENTITLEMENTS: "Workouts Mac/Resources/Workouts-macOS.entitlements"
GENERATE_INFOPLIST_FILE: false
SWIFT_STRICT_CONCURRENCY: complete
MACOSX_DEPLOYMENT_TARGET: "26.0"
ASSETCATALOG_COMPILER_APPICON_NAME: AppIcon
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME: AccentColor