feat: redesign player with Dynamic Island, compact timer, and fix Live Activity timer drift
Some checks failed
CI / TypeScript (pull_request) Failing after 5s
CI / ESLint (pull_request) Failing after 3s
CI / Tests (pull_request) Failing after 5s
CI / Build Check (pull_request) Has been skipped
CI / Admin Web Tests (pull_request) Successful in 2m5s
CI / Deploy Edge Functions (pull_request) Has been skipped
Some checks failed
CI / TypeScript (pull_request) Failing after 5s
CI / ESLint (pull_request) Failing after 3s
CI / Tests (pull_request) Failing after 5s
CI / Build Check (pull_request) Has been skipped
CI / Admin Web Tests (pull_request) Successful in 2m5s
CI / Deploy Edge Functions (pull_request) Has been skipped
## What changed ### Player Redesign (video-first layout) - New compact timer ring (110pt) with phase label, replaces 240pt ring - Auto-hide top bar with block progress dots (3s auto-dismiss) - Expandable now-playing music pill with skip control - Bottom control bar with heart rate, play/pause, and skip - Exercise caption with 'Next' preview during rest phases - Compact round counter (capsule dots) ### Dynamic Island & Live Activities - WorkoutLiveActivity widget: expanded, compact, and minimal views - Phase-colored timers with Text(timerInterval:) countdown - Shows exercise name, round progress, heart rate, music track - MusicLiveActivity: standalone music now-playing widget - LiveActivityMusicBars animated component - Deep link from Dynamic Island back to app ### Timer Drift Fix (critical) - Store a stable phaseEndDate once per phase instead of recalculating Date() + timeRemaining on every update - Prevents dynamic island countdown from rubber-banding due to 5-second periodic update recalculation drift - Reset phaseEndDate on phase change and resume from pause - Guard Live Activity updates behind vm.isRunning to prevent premature creation when music track loads before workout start - Fixes timer showing 0 in Dynamic Island when expanding from home screen ### New PlayerViewModel timer engine - Full phase support: prep, warmup, work, rest, interBlockRest, cooldown, complete - 1-second countdown with audio cues at 3-2-1 - Phase transitions with spring animation and haptics - HealthKit live session integration - Workout session recording with completion ### Music Service - New MusicPlayerViewModel with vibe-based playlist loading - Track info exposed for Dynamic Island display - Skip track support from Dynamic Island notification action - Automatic play/pause based on phase and running state ### Additional - ZoneHighlightIcon component for HomeTab zone cards - Updated watchOS localizations with complication strings - Info.plist updated for widget extension
This commit is contained in:
@@ -30,6 +30,8 @@
|
||||
59B482DEBAA43EE5F24B883D /* HomeTab.swift in Sources */ = {isa = PBXBuildFile; fileRef = FB04FA5E81BD1E52DEFB3AC2 /* HomeTab.swift */; };
|
||||
5A25DA9A1B21F5EED15BA370 /* ProgramDetailView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6BFF744890571DE314540E16 /* ProgramDetailView.swift */; };
|
||||
5A402D7E31059AB7107B625C /* MusicPlayerViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5505FBD6E001AE3AFD413ADA /* MusicPlayerViewModel.swift */; };
|
||||
5B01ABC32F9B8FFD006E707D /* MusicActivityAttributes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B01ABC22F9B8FFD006E707D /* MusicActivityAttributes.swift */; };
|
||||
5B01ABC82F9B90AF006E707D /* ActivityKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5B01ABC62F9B909E006E707D /* ActivityKit.framework */; };
|
||||
5CE2F2210BEF17AC304F2AC2 /* HealthSnapshot.swift in Sources */ = {isa = PBXBuildFile; fileRef = F1DE8A4DAD846A879B8ED379 /* HealthSnapshot.swift */; };
|
||||
60503F963221C7FCF719C493 /* ActivityTab.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84123E854DE0BF3E0D4F0912 /* ActivityTab.swift */; };
|
||||
6060D95D485E4188EAABDDED /* WatchRootView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8AEC37E6361DC4C7AE326139 /* WatchRootView.swift */; };
|
||||
@@ -68,9 +70,17 @@
|
||||
E4ED0B8CABBD3502EA468F21 /* HomeViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD1AF33C89F42294599C369A /* HomeViewModel.swift */; };
|
||||
EDAFF4CD2ACE82CC2C097B3C /* PaywallView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA21206AD91A5F95926EEA05 /* PaywallView.swift */; };
|
||||
EE6C591611D52C36ED5E03C6 /* AppState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9EC19129CD3C493C8B2AEFA8 /* AppState.swift */; };
|
||||
F2E1D0C9B8A7F6E5D4C3B2A1 /* ZoneHighlightIcon.swift in Sources */ = {isa = PBXBuildFile; fileRef = A1B2C3D4E5F6A7B8C9D0E1F2 /* ZoneHighlightIcon.swift */; };
|
||||
F80248DC6213339BC8F9C9A2 /* TabataGoComplication.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDA5D50FD057EF30BE7915F5 /* TabataGoComplication.swift */; };
|
||||
FD47EC832E23E0AF1D6FFE47 /* PolicyViews.swift in Sources */ = {isa = PBXBuildFile; fileRef = 525C7E8EC6EF89E00D34672E /* PolicyViews.swift */; };
|
||||
FE14257B8CFFDC47C72AE079 /* HealthViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 63599808389B70FC2F6A43C3 /* HealthViewModel.swift */; };
|
||||
AAA001AAA001AAA001AAA001 /* MusicActivityAttributes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B01ABC22F9B8FFD006E707D /* MusicActivityAttributes.swift */; };
|
||||
AAA002AAA002AAA002AAA002 /* MusicLiveActivity.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB001BBB001BBB001BBB001 /* MusicLiveActivity.swift */; };
|
||||
AAA003AAA003AAA003AAA003 /* TabataGoWidgetBundle.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB002BBB002BBB002BBB002 /* TabataGoWidgetBundle.swift */; };
|
||||
AAA004AAA004AAA004AAA004 /* TabataGoWidget.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = BBB004BBB004BBB004BBB004 /* TabataGoWidget.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
|
||||
AAA005AAA005AAA005AAA005 /* WorkoutActivityAttributes.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB005BBB005BBB005BBB005 /* WorkoutActivityAttributes.swift */; };
|
||||
AAA006AAA006AAA006AAA006 /* WorkoutActivityAttributes.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB005BBB005BBB005BBB005 /* WorkoutActivityAttributes.swift */; };
|
||||
AAA007AAA007AAA007AAA007 /* WorkoutLiveActivity.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBB006BBB006BBB006BBB006 /* WorkoutLiveActivity.swift */; };
|
||||
/* End PBXBuildFile section */
|
||||
|
||||
/* Begin PBXContainerItemProxy section */
|
||||
@@ -102,9 +112,26 @@
|
||||
remoteGlobalIDString = 92991789C3A5B2A5FACF07A1;
|
||||
remoteInfo = TabataGo;
|
||||
};
|
||||
FFF001FFF001FFF001FFF001 /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = 5D5CB9093007DF74EBDE3C98 /* Project object */;
|
||||
proxyType = 1;
|
||||
remoteGlobalIDString = EEE001EEE001EEE001EEE001;
|
||||
remoteInfo = TabataGoWidget;
|
||||
};
|
||||
/* End PBXContainerItemProxy section */
|
||||
|
||||
/* Begin PBXCopyFilesBuildPhase section */
|
||||
DDD002DDD002DDD002DDD002 /* Embed App Extensions */ = {
|
||||
isa = PBXCopyFilesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
dstPath = "";
|
||||
dstSubfolderSpec = 13;
|
||||
files = (
|
||||
AAA004AAA004AAA004AAA004 /* TabataGoWidget.appex in Embed App Extensions */,
|
||||
);
|
||||
name = "Embed App Extensions";
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
76FE977236B376F31232D242 /* Embed Watch Content */ = {
|
||||
isa = PBXCopyFilesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
@@ -152,6 +179,8 @@
|
||||
5505FBD6E001AE3AFD413ADA /* MusicPlayerViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MusicPlayerViewModel.swift; sourceTree = "<group>"; };
|
||||
58DEACB2D18F636B35BB2C48 /* TabataGoSchema.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TabataGoSchema.swift; sourceTree = "<group>"; };
|
||||
5ACBDB7D81F575AC5370E82F /* WatchL10n.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WatchL10n.swift; sourceTree = "<group>"; };
|
||||
5B01ABC22F9B8FFD006E707D /* MusicActivityAttributes.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MusicActivityAttributes.swift; sourceTree = "<group>"; };
|
||||
5B01ABC62F9B909E006E707D /* ActivityKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ActivityKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS26.4.sdk/System/Library/Frameworks/ActivityKit.framework; sourceTree = DEVELOPER_DIR; };
|
||||
5F5D3568A736B7A326874677 /* Localizable.xcstrings */ = {isa = PBXFileReference; lastKnownFileType = text.json.xcstrings; path = Localizable.xcstrings; sourceTree = "<group>"; };
|
||||
61E5AA44513F793EA7FEBA00 /* Theme.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Theme.swift; sourceTree = "<group>"; };
|
||||
63599808389B70FC2F6A43C3 /* HealthViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HealthViewModel.swift; sourceTree = "<group>"; };
|
||||
@@ -171,6 +200,7 @@
|
||||
9B5DFE227FDB6400C8D7A4A4 /* ProfileTab.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProfileTab.swift; sourceTree = "<group>"; };
|
||||
9CE731C42C570A89F2C6F613 /* Strings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Strings.swift; sourceTree = "<group>"; };
|
||||
9EC19129CD3C493C8B2AEFA8 /* AppState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppState.swift; sourceTree = "<group>"; };
|
||||
A1B2C3D4E5F6A7B8C9D0E1F2 /* ZoneHighlightIcon.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ZoneHighlightIcon.swift; sourceTree = "<group>"; };
|
||||
A7C07E8AF566483359CE2FEC /* TabataGoTests.xctest */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.cfbundle; path = TabataGoTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
A84A0F7F17713D5D0A679122 /* PurchaseService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PurchaseService.swift; sourceTree = "<group>"; };
|
||||
ACA8445E547E41DF784C3D2F /* ActivityRingView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ActivityRingView.swift; sourceTree = "<group>"; };
|
||||
@@ -198,6 +228,12 @@
|
||||
F8242C26A4F51BE7AA779840 /* RootView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RootView.swift; sourceTree = "<group>"; };
|
||||
FAEBB2380DAC8F565F556D41 /* WorkoutCalendarView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WorkoutCalendarView.swift; sourceTree = "<group>"; };
|
||||
FB04FA5E81BD1E52DEFB3AC2 /* HomeTab.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeTab.swift; sourceTree = "<group>"; };
|
||||
BBB001BBB001BBB001BBB001 /* MusicLiveActivity.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MusicLiveActivity.swift; sourceTree = "<group>"; };
|
||||
BBB002BBB002BBB002BBB002 /* TabataGoWidgetBundle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TabataGoWidgetBundle.swift; sourceTree = "<group>"; };
|
||||
BBB003BBB003BBB003BBB003 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = "<group>"; };
|
||||
BBB004BBB004BBB004BBB004 /* TabataGoWidget.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = TabataGoWidget.appex; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
BBB005BBB005BBB005BBB005 /* WorkoutActivityAttributes.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WorkoutActivityAttributes.swift; sourceTree = "<group>"; };
|
||||
BBB006BBB006BBB006BBB006 /* WorkoutLiveActivity.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WorkoutLiveActivity.swift; sourceTree = "<group>"; };
|
||||
/* End PBXFileReference section */
|
||||
|
||||
/* Begin PBXFrameworksBuildPhase section */
|
||||
@@ -207,6 +243,7 @@
|
||||
files = (
|
||||
20FD0BC9A6E01E8EA182E030 /* Supabase in Frameworks */,
|
||||
CA45F50F953886A372F22AA4 /* RevenueCat in Frameworks */,
|
||||
5B01ABC82F9B90AF006E707D /* ActivityKit.framework in Frameworks */,
|
||||
80214BDEB93076416728E9BD /* PostHog in Frameworks */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
@@ -270,6 +307,8 @@
|
||||
DB98CF3F29FCFCDE4D54B1A8 /* TabataGoTests */,
|
||||
479C55D953F3D9AA136DE1BA /* TabataGoUITests */,
|
||||
66E9DD477B9F90EF36226076 /* TabataGoWatch */,
|
||||
CCC001CCC001CCC001CCC001 /* TabataGoWidget */,
|
||||
5B01ABC52F9B909E006E707D /* Frameworks */,
|
||||
F992A53DB1C399DCFE3C8BF2 /* Products */,
|
||||
);
|
||||
sourceTree = "<group>";
|
||||
@@ -317,6 +356,14 @@
|
||||
path = Onboarding;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
5B01ABC52F9B909E006E707D /* Frameworks */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
5B01ABC62F9B909E006E707D /* ActivityKit.framework */,
|
||||
);
|
||||
name = Frameworks;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
66E9DD477B9F90EF36226076 /* TabataGoWatch */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
@@ -379,6 +426,7 @@
|
||||
A4BD547C912B1970BB98FC73 /* Player */,
|
||||
C9F93E0937EB534BC24EF2FA /* Programs */,
|
||||
EEAEB608A9FC8E5981B57A89 /* Settings */,
|
||||
AA11BB22CC33DD44EE55FF66 /* Components */,
|
||||
8B90DED418BDA3697748C37D /* Tabs */,
|
||||
);
|
||||
path = Views;
|
||||
@@ -402,6 +450,14 @@
|
||||
path = Utilities;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
AA11BB22CC33DD44EE55FF66 /* Components */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
A1B2C3D4E5F6A7B8C9D0E1F2 /* ZoneHighlightIcon.swift */,
|
||||
);
|
||||
path = Components;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
BD69946901F21DE2BEE0D8D9 /* TabataGo */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
@@ -438,6 +494,17 @@
|
||||
path = ViewModels;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
CCC001CCC001CCC001CCC001 /* TabataGoWidget */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
BBB003BBB003BBB003BBB003 /* Info.plist */,
|
||||
BBB001BBB001BBB001BBB001 /* MusicLiveActivity.swift */,
|
||||
BBB002BBB002BBB002BBB002 /* TabataGoWidgetBundle.swift */,
|
||||
BBB006BBB006BBB006BBB006 /* WorkoutLiveActivity.swift */,
|
||||
);
|
||||
path = TabataGoWidget;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
CE5E34713E694FAEED0F3480 /* Utilities */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
@@ -485,6 +552,8 @@
|
||||
7FE34000653EE789117CE9D9 /* UserProfile.swift */,
|
||||
B6E64CFB210A549AC85F878D /* WorkoutProgram.swift */,
|
||||
BBBBFC7FC6A52DE9908EE4A6 /* WorkoutSession.swift */,
|
||||
5B01ABC22F9B8FFD006E707D /* MusicActivityAttributes.swift */,
|
||||
BBB005BBB005BBB005BBB005 /* WorkoutActivityAttributes.swift */,
|
||||
);
|
||||
path = Models;
|
||||
sourceTree = "<group>";
|
||||
@@ -516,6 +585,7 @@
|
||||
B7EDA5BF7F25E3279A4B1A61 /* TabataGoUITests.xctest */,
|
||||
484865AEFA8CCD26C4AE7F73 /* TabataGoWatch.app */,
|
||||
255972F9906563A0921C47C0 /* TabataGoWatchWidget.appex */,
|
||||
BBB004BBB004BBB004BBB004 /* TabataGoWidget.appex */,
|
||||
);
|
||||
name = Products;
|
||||
sourceTree = "<group>";
|
||||
@@ -560,6 +630,23 @@
|
||||
productReference = 255972F9906563A0921C47C0 /* TabataGoWatchWidget.appex */;
|
||||
productType = "com.apple.product-type.app-extension";
|
||||
};
|
||||
EEE001EEE001EEE001EEE001 /* TabataGoWidget */ = {
|
||||
isa = PBXNativeTarget;
|
||||
buildConfigurationList = III001III001III001III001 /* Build configuration list for PBXNativeTarget "TabataGoWidget" */;
|
||||
buildPhases = (
|
||||
DDD001DDD001DDD001DDD001 /* Sources */,
|
||||
);
|
||||
buildRules = (
|
||||
);
|
||||
dependencies = (
|
||||
);
|
||||
name = TabataGoWidget;
|
||||
packageProductDependencies = (
|
||||
);
|
||||
productName = TabataGoWidget;
|
||||
productReference = BBB004BBB004BBB004BBB004 /* TabataGoWidget.appex */;
|
||||
productType = "com.apple.product-type.app-extension";
|
||||
};
|
||||
92991789C3A5B2A5FACF07A1 /* TabataGo */ = {
|
||||
isa = PBXNativeTarget;
|
||||
buildConfigurationList = D920067B8306F17FB19B987C /* Build configuration list for PBXNativeTarget "TabataGo" */;
|
||||
@@ -568,11 +655,13 @@
|
||||
3D4690E104FE866070533A03 /* Resources */,
|
||||
078CF2C46E747BF4F8A74030 /* Frameworks */,
|
||||
76FE977236B376F31232D242 /* Embed Watch Content */,
|
||||
DDD002DDD002DDD002DDD002 /* Embed App Extensions */,
|
||||
);
|
||||
buildRules = (
|
||||
);
|
||||
dependencies = (
|
||||
08E32451A0A32FD65422174D /* PBXTargetDependency */,
|
||||
GGG001GGG001GGG001GGG001 /* PBXTargetDependency */,
|
||||
);
|
||||
name = TabataGo;
|
||||
packageProductDependencies = (
|
||||
@@ -661,6 +750,7 @@
|
||||
D77CBB3569E06BDB4239862D /* TabataGoUITests */,
|
||||
3945C3998B4B66F30759718C /* TabataGoWatch */,
|
||||
90BAF2DB5D7456CD45975E26 /* TabataGoWatchWidget */,
|
||||
EEE001EEE001EEE001EEE001 /* TabataGoWidget */,
|
||||
);
|
||||
};
|
||||
/* End PBXProject section */
|
||||
@@ -734,8 +824,10 @@
|
||||
53FDC12EFCD8159045C105C0 /* HealthKitService.swift in Sources */,
|
||||
5CE2F2210BEF17AC304F2AC2 /* HealthSnapshot.swift in Sources */,
|
||||
FE14257B8CFFDC47C72AE079 /* HealthViewModel.swift in Sources */,
|
||||
F2E1D0C9B8A7F6E5D4C3B2A1 /* ZoneHighlightIcon.swift in Sources */,
|
||||
59B482DEBAA43EE5F24B883D /* HomeTab.swift in Sources */,
|
||||
E4ED0B8CABBD3502EA468F21 /* HomeViewModel.swift in Sources */,
|
||||
5B01ABC32F9B8FFD006E707D /* MusicActivityAttributes.swift in Sources */,
|
||||
14EC768D950BC071AFBEFDF2 /* MainTabView.swift in Sources */,
|
||||
5A402D7E31059AB7107B625C /* MusicPlayerViewModel.swift in Sources */,
|
||||
09285D4F326731E9A27827B2 /* MusicService.swift in Sources */,
|
||||
@@ -766,6 +858,19 @@
|
||||
996E613C0A9906AB88D2AEB6 /* WorkoutCalendarView.swift in Sources */,
|
||||
1955D0D74D9B09D10705104C /* WorkoutProgram.swift in Sources */,
|
||||
192F8CFFE1888005ABF339E8 /* WorkoutSession.swift in Sources */,
|
||||
AAA005AAA005AAA005AAA005 /* WorkoutActivityAttributes.swift in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
DDD001DDD001DDD001DDD001 /* Sources */ = {
|
||||
isa = PBXSourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
AAA001AAA001AAA001AAA001 /* MusicActivityAttributes.swift in Sources */,
|
||||
AAA002AAA002AAA002AAA002 /* MusicLiveActivity.swift in Sources */,
|
||||
AAA003AAA003AAA003AAA003 /* TabataGoWidgetBundle.swift in Sources */,
|
||||
AAA006AAA006AAA006AAA006 /* WorkoutActivityAttributes.swift in Sources */,
|
||||
AAA007AAA007AAA007AAA007 /* WorkoutLiveActivity.swift in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
@@ -800,6 +905,11 @@
|
||||
target = 90BAF2DB5D7456CD45975E26 /* TabataGoWatchWidget */;
|
||||
targetProxy = D329F349FC6AF0E2D3C89FD3 /* PBXContainerItemProxy */;
|
||||
};
|
||||
GGG001GGG001GGG001GGG001 /* PBXTargetDependency */ = {
|
||||
isa = PBXTargetDependency;
|
||||
target = EEE001EEE001EEE001EEE001 /* TabataGoWidget */;
|
||||
targetProxy = FFF001FFF001FFF001FFF001 /* PBXContainerItemProxy */;
|
||||
};
|
||||
/* End PBXTargetDependency section */
|
||||
|
||||
/* Begin XCBuildConfiguration section */
|
||||
@@ -1102,6 +1212,47 @@
|
||||
};
|
||||
/* End XCBuildConfiguration section */
|
||||
|
||||
/* Begin XCConfigurationList section */
|
||||
HHH001HHH001HHH001HHH001 /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
CODE_SIGN_IDENTITY = "iPhone Developer";
|
||||
DEVELOPMENT_TEAM = 2MJF39L8VY;
|
||||
INFOPLIST_FILE = TabataGoWidget/Info.plist;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 26.0;
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"@executable_path/Frameworks",
|
||||
"@executable_path/../../Frameworks",
|
||||
);
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.tabatago.app.widget;
|
||||
SKIP_INSTALL = YES;
|
||||
SDKROOT = iphoneos;
|
||||
TARGETED_DEVICE_FAMILY = "1,2";
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
HHH002HHH002HHH002HHH002 /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
CODE_SIGN_IDENTITY = "iPhone Developer";
|
||||
DEVELOPMENT_TEAM = 2MJF39L8VY;
|
||||
INFOPLIST_FILE = TabataGoWidget/Info.plist;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 26.0;
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"@executable_path/Frameworks",
|
||||
"@executable_path/../../Frameworks",
|
||||
);
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.tabatago.app.widget;
|
||||
SKIP_INSTALL = YES;
|
||||
SDKROOT = iphoneos;
|
||||
TARGETED_DEVICE_FAMILY = "1,2";
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
/* End XCBuildConfiguration section */
|
||||
|
||||
/* Begin XCConfigurationList section */
|
||||
569F5B8F2ACCAC8356B6D8A0 /* Build configuration list for PBXNativeTarget "TabataGoWatchWidget" */ = {
|
||||
isa = XCConfigurationList;
|
||||
@@ -1157,6 +1308,15 @@
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Debug;
|
||||
};
|
||||
III001III001III001III001 /* Build configuration list for PBXNativeTarget "TabataGoWidget" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
HHH001HHH001HHH001HHH001 /* Debug */,
|
||||
HHH002HHH002HHH002HHH002 /* Release */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Debug;
|
||||
};
|
||||
/* End XCConfigurationList section */
|
||||
|
||||
/* Begin XCRemoteSwiftPackageReference section */
|
||||
|
||||
Reference in New Issue
Block a user