The TabataGo scheme only listed TabataGo + TabataGoWidget (iOS), so
xcodebuild -scheme TabataGo never compiled the watchOS app in CI. Add
TabataGoWatch + TabataGoWatchWidget to the build targets so watch-side
breakage is caught before deploy.
Note: TabataGoWidget is a real iOS widget target (defined at project.yml
line 165, app-extension/iOS), NOT a phantom — the prior review was wrong
on that point. The real gap was the missing watch targets.
Embed deps were already correct (TabataGo embeds TabataGoWatch, which
embeds TabataGoWatchWidget). Verified locally with xcodegen 2.45.4:
the generated xcscheme now lists all 4 BlueprintNames.
⚠️ Risk: if the watch target has latent build issues (never compiled in
CI before), this will surface them on the next PR. Desirable — catch
before merge, not in the field.
- Restaure UIBackgroundModes[audio] dans Info.plist (supprimé par erreur
au commit précédent) → empêche iOS de suspendre l'app en arrière-plan
- Ajoute UIBackgroundModes dans project.yml pour robustesse
- Ajout de NSSupportsLiveActivities et NSSupportsLiveActivitiesFrequentUpdates
dans info.properties du target TabataGo (project.yml) — corrige l'erreur
'Target does not include NSSupportsLiveActivities plist key' au runtime
- Nettoie Info.plist (retire CFBundleURLTypes, UIBackgroundModes redondants)
- Aligne les entitlements (retire aps-environment, ajoute app groups)
- Corrige le bundle version du widget (2 → 1)
xcodegen parses info.path plist and generates INFOPLIST_KEY_* settings,
but silently drops nested dictionaries like NSExtension. Adding it to
info.properties ensures xcodegen produces:
INFOPLIST_KEY_NSExtension_NSExtensionPointIdentifier = widgetkit-extension
which Xcode preserves at build time.
Previous sed command accidentally injected shared model files into
TabataGo, TabataGoWatch, and TabataGoWatchWidget targets, corrupting
their YAML structure. Restored all targets; shared files now correctly
scoped to TabataGoWidget target only.
Widget extension references WorkoutPhase, WorkoutActivityAttributes,
TogglePauseIntent (WorkoutLiveActivity) and MusicActivityAttributes
(MusicLiveActivity) but cannot import parent app module. Shared source
files must be compiled in both targets, following existing pattern
of WatchConnectivityTypes.swift shared between iOS/watch.
- Change PostHog from exactVersion to revision (tag 3.62.0) in project.yml
- Add deep cache clean step before xcodegen in CI workflow
- Add ONLY_ACTIVE_ARCH=NO to xcodebuild command
- Wrap PostHog usage in #if canImport(PostHog) for graceful degradation
- Add Package.resolved, .build/, DerivedData/ to .gitignore
- Remove stale SPM caches between CI runs (DerivedData, swiftpm caches, act cache)