diff --git a/ios/ChronoMind.xcodeproj/project.pbxproj b/ios/ChronoMind.xcodeproj/project.pbxproj index 61443cd..f6f0970 100644 --- a/ios/ChronoMind.xcodeproj/project.pbxproj +++ b/ios/ChronoMind.xcodeproj/project.pbxproj @@ -9,39 +9,158 @@ /* Begin PBXBuildFile section */ 006E8EA280AC7CAC5495951E /* TimerStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 089BC5A87E29D38DF3DFDFA2 /* TimerStore.swift */; }; 00BEA900EAE0226532824AE8 /* AlarmOverlay.swift in Sources */ = {isa = PBXBuildFile; fileRef = F991E825657AE91E039404AD /* AlarmOverlay.swift */; }; + 03EF0278E7692D812482CD24 /* Format.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1CC158E525F3F703034E5542 /* Format.swift */; }; 06789A5C995DCA4F35A4B9BD /* FormatTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6FACEF504403985D3BE08E29 /* FormatTests.swift */; }; + 09745CF8F0D63ECC1FDB1372 /* Cascade.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE44586214BA0A4BEDA939F7 /* Cascade.swift */; }; + 0B713EF338333F1807FA5DF8 /* ChronoMindWatchComplications.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = 982CBA1B9F735532A9068F30 /* ChronoMindWatchComplications.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; + 0BD15496ADEDDF47400ACFAE /* Format.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1CC158E525F3F703034E5542 /* Format.swift */; }; + 0DA7D6CDB1B446E8D3E1ECB8 /* UrgencyTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 100C2AEC2BE5E5B997F08AC7 /* UrgencyTests.swift */; }; + 1335A9670AC57E4D55982F30 /* ChronoMindWatchApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 162EA6A89620EC9ED71707E1 /* ChronoMindWatchApp.swift */; }; + 13B1ADCBF9FB540963E7EE6E /* ContextMessages.swift in Sources */ = {isa = PBXBuildFile; fileRef = B3A5D547D31EEFB16F3491EA /* ContextMessages.swift */; }; + 1598963EE482A49A6BE6C1A1 /* Cascade.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE44586214BA0A4BEDA939F7 /* Cascade.swift */; }; + 17CA849355B8B364E1229D72 /* ContextMessages.swift in Sources */ = {isa = PBXBuildFile; fileRef = B3A5D547D31EEFB16F3491EA /* ContextMessages.swift */; }; + 1913421FC27656C4473DDDEB /* AuthService.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5308F55D3240A2F6EBC1BEC /* AuthService.swift */; }; + 1AD293C99C71465710A4A7DC /* Routines.swift in Sources */ = {isa = PBXBuildFile; fileRef = 880334677DB319D5189434D0 /* Routines.swift */; }; + 1C01BE509BB39FFFF0937808 /* RoutineRunnerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B769E9E88032FB471820D110 /* RoutineRunnerView.swift */; }; 1D1DFA5585694A7BE76109E4 /* TimerEngine.swift in Sources */ = {isa = PBXBuildFile; fileRef = 93579D521BE5D6682B129A5C /* TimerEngine.swift */; }; + 2006E7190D828C4F92FF0A5E /* WatchTimerStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0625840216F70EFAB4A21985 /* WatchTimerStore.swift */; }; + 2096B66D52C8F16DFFB3EE0D /* TimerLiveActivity.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1A2B8EB597908958DB17C5BE /* TimerLiveActivity.swift */; }; + 232999B910919E825FE998EA /* LocationTriggerManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = B7AC8BE54BDA744FCCA8C5A1 /* LocationTriggerManager.swift */; }; + 252703AE35A87C23DC254B43 /* TimerEngine.swift in Sources */ = {isa = PBXBuildFile; fileRef = 93579D521BE5D6682B129A5C /* TimerEngine.swift */; }; + 25B0770DD3FCB039FB188EE1 /* Format.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1CC158E525F3F703034E5542 /* Format.swift */; }; 25D1EC51D100F93A735C6819 /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52FDD9567F18B987402B5FF1 /* ContentView.swift */; }; 2A6837C7ACB5B9B8B632DD4D /* NotificationScheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = D34C1AC330B0CF41C37A771C /* NotificationScheduler.swift */; }; + 2ABB8A4449DCE02FD1DD584B /* PlatformSyncManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = A6F8EA073290FD76BC7BCD89 /* PlatformSyncManager.swift */; }; + 2B056429FC03E766200D49FD /* WatchComplications.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0268FEE252E20862C316C531 /* WatchComplications.swift */; }; + 30D2A96F7F707302EAEBB884 /* NLParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = BE3B45641C99D54A016AD38E /* NLParser.swift */; }; + 32326A9CCDBA6A93403477E8 /* SharedTimerDataTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 54ED0C6714DDC82CF9DEC6C1 /* SharedTimerDataTests.swift */; }; + 327CE7DB4C7C15AF8DA2B62A /* FeatureFlagService.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDB8E3C2B7FD90E1FA218B01 /* FeatureFlagService.swift */; }; 33FE05A7CC65C5A251D5C686 /* CascadeTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEC3C28A0A106D3A02642F48 /* CascadeTests.swift */; }; + 383A8D81DE756B7B927380C7 /* Urgency.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8775EEA5055E7416149B8384 /* Urgency.swift */; }; + 3A536FC42B293811D9C2FFBE /* ByteLystPlatformSDK in Frameworks */ = {isa = PBXBuildFile; productRef = 421BDB267D3349C06FADAA28 /* ByteLystPlatformSDK */; }; + 3BC2A4D25FCF4BDA4E815A5D /* MacSettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3A54834F3BE0671164B5552F /* MacSettingsView.swift */; }; 3BD65B9D32D36D682CBC5B2A /* TimerListSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1475DA4BEB57A6C1BDC13C27 /* TimerListSection.swift */; }; 3CE4B6F56C02F4962A2ECC2C /* PomodoroView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5346BBF21044F83F007D7E32 /* PomodoroView.swift */; }; + 3DF8F9A6143C7F8EF180D4F0 /* CalendarSyncManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = AB137EFADA8052BF5A94EB0F /* CalendarSyncManager.swift */; }; + 3E6BD90AD48861E7FB3293D9 /* CloudKitSyncManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 17BA07032A8712270E33C212 /* CloudKitSyncManager.swift */; }; + 3F33A86FE5E609771F1A61E5 /* RescheduleEngine.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88A825CA7F60503FDA2AEB44 /* RescheduleEngine.swift */; }; + 3FCD1113C16D9CDC3B2747BD /* Recurrence.swift in Sources */ = {isa = PBXBuildFile; fileRef = A0155CC1B3E862B55E40D776 /* Recurrence.swift */; }; + 417095273522432002B4FBDA /* NLParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = BE3B45641C99D54A016AD38E /* NLParser.swift */; }; + 437AFD9D5CD147B716D1E8C4 /* ConfettiView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23A2B907D667DECB5946BF2B /* ConfettiView.swift */; }; + 4E897C117548C3E0895782F3 /* GamificationEngine.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5E264EE038BD4F87989A1F72 /* GamificationEngine.swift */; }; + 4EFA9A99B3F7F63DA53FE986 /* Recurrence.swift in Sources */ = {isa = PBXBuildFile; fileRef = A0155CC1B3E862B55E40D776 /* Recurrence.swift */; }; + 50211852A25DA0E731A50240 /* Recurrence.swift in Sources */ = {isa = PBXBuildFile; fileRef = A0155CC1B3E862B55E40D776 /* Recurrence.swift */; }; + 50A0420ED0982E692B891008 /* ShareableTimerManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 197F0A9CD9DAF0996B0C08C5 /* ShareableTimerManager.swift */; }; + 55C19B7A17D9AF8846929963 /* NextTimerLockScreenWidget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0204FDC3820F94F444C45951 /* NextTimerLockScreenWidget.swift */; }; + 59AAA0F0D1AD19E9761F1721 /* Cascade.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE44586214BA0A4BEDA939F7 /* Cascade.swift */; }; + 59AF6F8E533757C8ED232857 /* FeatureFlagService.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDB8E3C2B7FD90E1FA218B01 /* FeatureFlagService.swift */; }; + 5B9E3C59966FF6CDCD23A30D /* NextTimerWidget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53D8E157AFD2516A549AC4B7 /* NextTimerWidget.swift */; }; 61FB6A2572B7299661705DE2 /* Format.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1CC158E525F3F703034E5542 /* Format.swift */; }; + 620899B41B3F7BA9AA6AE5B5 /* Routines.swift in Sources */ = {isa = PBXBuildFile; fileRef = 880334677DB319D5189434D0 /* Routines.swift */; }; + 63495CA979DF940E78809916 /* TimerListWidget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7432A413C92A24E3C937A766 /* TimerListWidget.swift */; }; + 638C4E7A14286D9E03594629 /* TravelTimeManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 63E6837DBBD9BB7D385AE19B /* TravelTimeManager.swift */; }; + 646CCFA8715308CA93206121 /* LoginView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 65DDB61FA0103F684BDCA404 /* LoginView.swift */; }; 6770745F2FBB9478094DC205 /* UrgencyBadge.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9AA00B60532FC72462812693 /* UrgencyBadge.swift */; }; 6F3699234F74C1DB6E71D245 /* QuickTimerSheet.swift in Sources */ = {isa = PBXBuildFile; fileRef = D520D46C5759E8780334D623 /* QuickTimerSheet.swift */; }; + 6F3B54B8AB0DD56B865EA421 /* AuthService.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5308F55D3240A2F6EBC1BEC /* AuthService.swift */; }; + 6FD3A8BDEDD44243C678FA17 /* Routines.swift in Sources */ = {isa = PBXBuildFile; fileRef = 880334677DB319D5189434D0 /* Routines.swift */; }; + 70B9480DA119EE4ED3AC9EB2 /* MacTimerStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 284CD02DD81443EC3D2D5FAD /* MacTimerStore.swift */; }; + 7574D49CE352EFD54B38ED54 /* WatchQuickTimerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBA241CF068B2706DD6816E6 /* WatchQuickTimerView.swift */; }; + 7593B213719494E702F237B3 /* Cascade.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE44586214BA0A4BEDA939F7 /* Cascade.swift */; }; + 7655CE103E7C4B4234391B0A /* MenuBarPopover.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD4D2E4380D018CAF3C8B82F /* MenuBarPopover.swift */; }; + 7A7473B689CB3372A8096596 /* TimeBlindness.swift in Sources */ = {isa = PBXBuildFile; fileRef = D899FC687E51E9606B813E4F /* TimeBlindness.swift */; }; + 7B5C1FB2612A55AE72B5AD40 /* GamificationEngineTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32404B8571BE88EE8F4B984B /* GamificationEngineTests.swift */; }; + 7F663A8EEB025C2C76C5EA28 /* BadgeGridView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 479A9078C8BF70F342BE7A1C /* BadgeGridView.swift */; }; 809719965B906AE51EA53C8B /* SettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA9019324C6A38DF943E1FF6 /* SettingsView.swift */; }; + 8599676E6A6A3E4B4FCFC781 /* RoutineListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A58E3947DAC75995659DCFD9 /* RoutineListView.swift */; }; + 880CCDF13CFBAC1A05A9900D /* TelemetryService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 355EAC56ED412303126019DA /* TelemetryService.swift */; }; + 8A0C48D4161E6AAAA2A07E1A /* ChronoMindMacApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C51DECA2DE40C002338930E /* ChronoMindMacApp.swift */; }; + 8AC85822AA4E433E857DA4A5 /* Format.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1CC158E525F3F703034E5542 /* Format.swift */; }; 8EF5C79BDF55D1F04851C3C0 /* TimelineView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E7C2F36FE2E4FEAD385B6860 /* TimelineView.swift */; }; + 9018CB5B25A5B9609510CFF8 /* SharedTimerData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84C298B338633A7D75102171 /* SharedTimerData.swift */; }; + 9644E23DB8F463EE6DF76A07 /* SharedTimerData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84C298B338633A7D75102171 /* SharedTimerData.swift */; }; + 96B75E94FDFB11235CD67F49 /* WatchTimerDetailView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE3BDED1D58A30C73BECC1EB /* WatchTimerDetailView.swift */; }; + 9A9F1180CA3D0D6F5DD03843 /* StreakCard.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88702BCE6B6F164F9848B0EF /* StreakCard.swift */; }; 9CE528A21B258A6554DA8A46 /* ChronoMindApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD88A07063BD00F2DC6BB753 /* ChronoMindApp.swift */; }; + 9E6017860774FA9ABAAB2969 /* MoodCheckInManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 927DC190937AD396EBEEA7A2 /* MoodCheckInManager.swift */; }; + 9EF46398CE29554E3841C2D7 /* ChronoMindWidgets.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = E22C19C2DC291E24D26A31A8 /* ChronoMindWidgets.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; + A16F53593B79C45CA9112BC5 /* ReferralManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = F6B1578465B9746FBC1F8267 /* ReferralManager.swift */; }; + A1EB760B0C34B461D396D93C /* KeychainHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD29B4D4514DB0134359A13E /* KeychainHelper.swift */; }; + A2362E723190B333C435C8FE /* NLParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = BE3B45641C99D54A016AD38E /* NLParser.swift */; }; + A38C310ABCC1705C3324E3C4 /* ContextMessages.swift in Sources */ = {isa = PBXBuildFile; fileRef = B3A5D547D31EEFB16F3491EA /* ContextMessages.swift */; }; + A41C122DBBF1E907999DA001 /* PlatformSyncManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = A6F8EA073290FD76BC7BCD89 /* PlatformSyncManager.swift */; }; + A44A6E7DBC40789D47930EEA /* NLParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = BE3B45641C99D54A016AD38E /* NLParser.swift */; }; + A502F7A6FD94A656028BB21F /* CrashReporter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C8F4F4478DBA412AA4DCCD3 /* CrashReporter.swift */; }; A77A6BFC98AD7A661CFE98DB /* FiringCard.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0CC734D1505143775DCBDF18 /* FiringCard.swift */; }; + AAFBAB4BE935AE493B4FE3AA /* TimerEngine.swift in Sources */ = {isa = PBXBuildFile; fileRef = 93579D521BE5D6682B129A5C /* TimerEngine.swift */; }; ABF5A4BB75D914A38A2D55CD /* TimerCard.swift in Sources */ = {isa = PBXBuildFile; fileRef = 492793555CC220F85136F2B4 /* TimerCard.swift */; }; + AC65C4971CDEF04A0BBCBCA6 /* TimerEngine.swift in Sources */ = {isa = PBXBuildFile; fileRef = 93579D521BE5D6682B129A5C /* TimerEngine.swift */; }; AE00522D3CE642B0C608E8A2 /* CountdownRing.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE814566D06D5ED5DE214765 /* CountdownRing.swift */; }; B586A949950B02D3499C828E /* TimeBlindness.swift in Sources */ = {isa = PBXBuildFile; fileRef = D899FC687E51E9606B813E4F /* TimeBlindness.swift */; }; + B7924EB8DA38D8A3CD30DE8F /* KeychainHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD29B4D4514DB0134359A13E /* KeychainHelper.swift */; }; + B79A0BFA53743E32ADC391A2 /* TimeBlindness.swift in Sources */ = {isa = PBXBuildFile; fileRef = D899FC687E51E9606B813E4F /* TimeBlindness.swift */; }; + B8AB20C0CB248C63CB3492A5 /* Routines.swift in Sources */ = {isa = PBXBuildFile; fileRef = 880334677DB319D5189434D0 /* Routines.swift */; }; + BB249B99011696BF8393AC87 /* ContextMessages.swift in Sources */ = {isa = PBXBuildFile; fileRef = B3A5D547D31EEFB16F3491EA /* ContextMessages.swift */; }; + BB6CAD02AA491178DA5B4877 /* SharedTimerData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84C298B338633A7D75102171 /* SharedTimerData.swift */; }; + BCFE14C99F8A39B1937260C4 /* Recurrence.swift in Sources */ = {isa = PBXBuildFile; fileRef = A0155CC1B3E862B55E40D776 /* Recurrence.swift */; }; + BE029684B5BB6ADFBC1C74AE /* TimerAppIntents.swift in Sources */ = {isa = PBXBuildFile; fileRef = 38EB42DB96BAF7C05809A7D9 /* TimerAppIntents.swift */; }; + C0ABB711B05C6C325EAC0655 /* RoutineEditorView.swift in Sources */ = {isa = PBXBuildFile; fileRef = ACFED58D33D844D8649304DF /* RoutineEditorView.swift */; }; + C271F97EC79AF1BD430E2CFA /* MenuBarState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 729007CC41B12C35B3D20407 /* MenuBarState.swift */; }; + C699D646033D89F6635131A1 /* WeeklySummaryCard.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49C8FD0A60F09801ACADDC6F /* WeeklySummaryCard.swift */; }; + C7B2C7C46C8929AC4C8F09D4 /* Urgency.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8775EEA5055E7416149B8384 /* Urgency.swift */; }; C81D5D94A6F8E29C82EDD923 /* ChronoMindTheme.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0BAF2993B0DDD3D4334378B4 /* ChronoMindTheme.swift */; }; CB7642D0D833F6D45B532AF6 /* Cascade.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE44586214BA0A4BEDA939F7 /* Cascade.swift */; }; + CC009D149CDE275B3B7812A2 /* TimeBlindness.swift in Sources */ = {isa = PBXBuildFile; fileRef = D899FC687E51E9606B813E4F /* TimeBlindness.swift */; }; + CDBF417C26818962BC0855A3 /* Recurrence.swift in Sources */ = {isa = PBXBuildFile; fileRef = A0155CC1B3E862B55E40D776 /* Recurrence.swift */; }; + CF3D75CCEC4E57E0A14EA91D /* GamificationEngine.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5E264EE038BD4F87989A1F72 /* GamificationEngine.swift */; }; CFA4D8E650083161CC184D90 /* HistoryView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 453FAEB975BAA8307C8AED26 /* HistoryView.swift */; }; + D010CFAEBE1A9ED9D81E3B06 /* SharedTimerData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84C298B338633A7D75102171 /* SharedTimerData.swift */; }; + D121718DF1490A6DE9B51ACB /* CloudKitSyncManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 17BA07032A8712270E33C212 /* CloudKitSyncManager.swift */; }; D23D2EBC51D60E3D6C91DDAF /* TimerEngineTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23F23285C9339D8EEDF95CF1 /* TimerEngineTests.swift */; }; + D3FD9B96192A97E3BD6C34E3 /* ByteLystPlatformSDK in Frameworks */ = {isa = PBXBuildFile; productRef = EB6569E6ACF6CE60A4653F58 /* ByteLystPlatformSDK */; }; D488C32C9586E6BA10C17337 /* CreateTimerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33631FC9DC72BE316E763755 /* CreateTimerView.swift */; }; + D7285C33592B39947C7CFCDD /* TimerActivityAttributes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 91DAB70AC30742308946D184 /* TimerActivityAttributes.swift */; }; + D8CB64FBC2902018196C5A2F /* SleepManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4438C3D29B6F307E453E9EC1 /* SleepManager.swift */; }; + D9CB0E01E2CDE3200695696C /* AccessibilityTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1B4EA3466FEBE3CE96A6C2CD /* AccessibilityTests.swift */; }; + DCE5F7809030FE32D9BF4AB6 /* Routines.swift in Sources */ = {isa = PBXBuildFile; fileRef = 880334677DB319D5189434D0 /* Routines.swift */; }; + DE7642E7F4133ED3AC4ADD80 /* SharedTimerData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84C298B338633A7D75102171 /* SharedTimerData.swift */; }; DFBCDAD7322F6552D82EC73C /* HapticEngine.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4535FFCA7608DECAFC332C5 /* HapticEngine.swift */; }; + DFEF1E3BEF0FA8FB6FA9190F /* AccessibilityHelpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C914237A2B5359B04299601 /* AccessibilityHelpers.swift */; }; + E0A6D4C09DE2F6269FFCC4CB /* ContextMessages.swift in Sources */ = {isa = PBXBuildFile; fileRef = B3A5D547D31EEFB16F3491EA /* ContextMessages.swift */; }; + E1FA5186AC86D9DE310454A5 /* NLParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = BE3B45641C99D54A016AD38E /* NLParser.swift */; }; E364FCB29C50C5780AB6BDED /* Urgency.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8775EEA5055E7416149B8384 /* Urgency.swift */; }; + E38C408C4D69220474FA794E /* TimeBlindness.swift in Sources */ = {isa = PBXBuildFile; fileRef = D899FC687E51E9606B813E4F /* TimeBlindness.swift */; }; + E44553CE289DB93054960421 /* TelemetryService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 355EAC56ED412303126019DA /* TelemetryService.swift */; }; + E82B756E0DB57362D15E22AA /* Urgency.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8775EEA5055E7416149B8384 /* Urgency.swift */; }; + EB65379DC3CBE8E089B9B0D2 /* FocusScoreCard.swift in Sources */ = {isa = PBXBuildFile; fileRef = 60C29A1424F24173EFF8DF10 /* FocusScoreCard.swift */; }; EC0CEB1B4418DCD090CD431B /* CascadeProgressBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9EA0B050D86B6910385A7A7B /* CascadeProgressBar.swift */; }; - BB2200001111AAAA33334444 /* KeychainHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB2200001111AAAA33335555 /* KeychainHelper.swift */; }; - BB2200001111AAAA33336666 /* AuthService.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB2200001111AAAA33337777 /* AuthService.swift */; }; - BB2200001111AAAA33338888 /* LoginView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB2200001111AAAA33339999 /* LoginView.swift */; }; - CC1100001111AAAA11113333 /* TelemetryService.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC1100001111AAAA11112222 /* TelemetryService.swift */; }; - CC1100001111AAAA11115555 /* FeatureFlagService.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC1100001111AAAA11114444 /* FeatureFlagService.swift */; }; + EC0DE6C3D0CBC8B9171F6320 /* ChronoMindWidgetBundle.swift in Sources */ = {isa = PBXBuildFile; fileRef = D4B535B5749F7DB694275594 /* ChronoMindWidgetBundle.swift */; }; + ECE1C2F38A5CDBAD799F436F /* RescheduleEngineTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = E2BCD2440274B6F39CE0FAA8 /* RescheduleEngineTests.swift */; }; + EF58BDCC18FF6A449BCE796A /* TimerEngine.swift in Sources */ = {isa = PBXBuildFile; fileRef = 93579D521BE5D6682B129A5C /* TimerEngine.swift */; }; + F30CA27BE8E2F8EECC0C222A /* DataExportManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 730C55779117D49CEDBCB3AB /* DataExportManager.swift */; }; + F335E56D6983E63E7DF48932 /* RescheduleSheet.swift in Sources */ = {isa = PBXBuildFile; fileRef = C33938CC85EC8B658B97D6B3 /* RescheduleSheet.swift */; }; + F54FD81D5D8BFA0BA15E8498 /* Urgency.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8775EEA5055E7416149B8384 /* Urgency.swift */; }; + F68B39CF4045DA16BD3FF38A /* WatchContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 439857A424E7419653DBC47B /* WatchContentView.swift */; }; + F9F4B78D4808970F5DA2B96C /* RescheduleUndoBanner.swift in Sources */ = {isa = PBXBuildFile; fileRef = D9023E4736A87D08FD4910AC /* RescheduleUndoBanner.swift */; }; + FEA2BF2E1C612DE257985629 /* TimerActivityAttributes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 91DAB70AC30742308946D184 /* TimerActivityAttributes.swift */; }; + FEB7FB2863B68085FF19FEF9 /* RescheduleEngine.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88A825CA7F60503FDA2AEB44 /* RescheduleEngine.swift */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ + 279239143BE050BEFD7AAF2E /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = B148EC54D0D3F16627E44282 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 8A2AE3A5C26A2CC7420F50C0; + remoteInfo = ChronoMindWatchComplications; + }; + 53A5BE972EADCC12E90522A3 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = B148EC54D0D3F16627E44282 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 7028351BB1945332C6B77BA3; + remoteInfo = ChronoMindWidgets; + }; 5BB5DCEADCC953EE536BCB14 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = B148EC54D0D3F16627E44282 /* Project object */; @@ -51,62 +170,219 @@ }; /* End PBXContainerItemProxy section */ +/* Begin PBXCopyFilesBuildPhase section */ + 392826AC3F2315DA0E9B605E /* Embed Foundation Extensions */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 13; + files = ( + 9EF46398CE29554E3841C2D7 /* ChronoMindWidgets.appex in Embed Foundation Extensions */, + ); + name = "Embed Foundation Extensions"; + runOnlyForDeploymentPostprocessing = 0; + }; + 436BC71EB491C565D4F31607 /* Embed Foundation Extensions */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 13; + files = ( + 0B713EF338333F1807FA5DF8 /* ChronoMindWatchComplications.appex in Embed Foundation Extensions */, + ); + name = "Embed Foundation Extensions"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + /* Begin PBXFileReference section */ + 0204FDC3820F94F444C45951 /* NextTimerLockScreenWidget.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NextTimerLockScreenWidget.swift; sourceTree = ""; }; + 0268FEE252E20862C316C531 /* WatchComplications.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WatchComplications.swift; sourceTree = ""; }; + 0625840216F70EFAB4A21985 /* WatchTimerStore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WatchTimerStore.swift; sourceTree = ""; }; 089BC5A87E29D38DF3DFDFA2 /* TimerStore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimerStore.swift; sourceTree = ""; }; 0BAF2993B0DDD3D4334378B4 /* ChronoMindTheme.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChronoMindTheme.swift; sourceTree = ""; }; 0CC734D1505143775DCBDF18 /* FiringCard.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FiringCard.swift; sourceTree = ""; }; + 0DCA538F184FB24BE4AD7D29 /* ChronoMindWidgets.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = ChronoMindWidgets.entitlements; sourceTree = ""; }; + 100C2AEC2BE5E5B997F08AC7 /* UrgencyTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UrgencyTests.swift; sourceTree = ""; }; 1475DA4BEB57A6C1BDC13C27 /* TimerListSection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimerListSection.swift; sourceTree = ""; }; + 162EA6A89620EC9ED71707E1 /* ChronoMindWatchApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChronoMindWatchApp.swift; sourceTree = ""; }; + 17BA07032A8712270E33C212 /* CloudKitSyncManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CloudKitSyncManager.swift; sourceTree = ""; }; + 197F0A9CD9DAF0996B0C08C5 /* ShareableTimerManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShareableTimerManager.swift; sourceTree = ""; }; + 1A2B8EB597908958DB17C5BE /* TimerLiveActivity.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimerLiveActivity.swift; sourceTree = ""; }; + 1B4EA3466FEBE3CE96A6C2CD /* AccessibilityTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccessibilityTests.swift; sourceTree = ""; }; 1CC158E525F3F703034E5542 /* Format.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Format.swift; sourceTree = ""; }; + 1E2C2086B4B2E599F4EE7D9D /* ChronoMindWatch.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = ChronoMindWatch.entitlements; sourceTree = ""; }; + 23A2B907D667DECB5946BF2B /* ConfettiView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ConfettiView.swift; sourceTree = ""; }; 23F23285C9339D8EEDF95CF1 /* TimerEngineTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimerEngineTests.swift; sourceTree = ""; }; + 284CD02DD81443EC3D2D5FAD /* MacTimerStore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MacTimerStore.swift; sourceTree = ""; }; + 2C51DECA2DE40C002338930E /* ChronoMindMacApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChronoMindMacApp.swift; sourceTree = ""; }; + 2C914237A2B5359B04299601 /* AccessibilityHelpers.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccessibilityHelpers.swift; sourceTree = ""; }; + 32404B8571BE88EE8F4B984B /* GamificationEngineTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GamificationEngineTests.swift; sourceTree = ""; }; 33631FC9DC72BE316E763755 /* CreateTimerView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CreateTimerView.swift; sourceTree = ""; }; + 355EAC56ED412303126019DA /* TelemetryService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TelemetryService.swift; sourceTree = ""; }; + 38EB42DB96BAF7C05809A7D9 /* TimerAppIntents.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimerAppIntents.swift; sourceTree = ""; }; + 3979E2F91CF5CD721AB63632 /* ChronoMindMac.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = ChronoMindMac.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 3A54834F3BE0671164B5552F /* MacSettingsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MacSettingsView.swift; sourceTree = ""; }; + 439857A424E7419653DBC47B /* WatchContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WatchContentView.swift; sourceTree = ""; }; + 4438C3D29B6F307E453E9EC1 /* SleepManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SleepManager.swift; sourceTree = ""; }; 453FAEB975BAA8307C8AED26 /* HistoryView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HistoryView.swift; sourceTree = ""; }; + 479A9078C8BF70F342BE7A1C /* BadgeGridView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BadgeGridView.swift; sourceTree = ""; }; 492793555CC220F85136F2B4 /* TimerCard.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimerCard.swift; sourceTree = ""; }; + 49C8FD0A60F09801ACADDC6F /* WeeklySummaryCard.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WeeklySummaryCard.swift; sourceTree = ""; }; + 4C8F4F4478DBA412AA4DCCD3 /* CrashReporter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CrashReporter.swift; sourceTree = ""; }; 52A8E7A04EFCDCABA3F05E28 /* ChronoMind.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = ChronoMind.entitlements; sourceTree = ""; }; 52FDD9567F18B987402B5FF1 /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = ""; }; 5346BBF21044F83F007D7E32 /* PomodoroView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PomodoroView.swift; sourceTree = ""; }; + 53D8E157AFD2516A549AC4B7 /* NextTimerWidget.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NextTimerWidget.swift; sourceTree = ""; }; + 54ED0C6714DDC82CF9DEC6C1 /* SharedTimerDataTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SharedTimerDataTests.swift; sourceTree = ""; }; + 5E264EE038BD4F87989A1F72 /* GamificationEngine.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GamificationEngine.swift; sourceTree = ""; }; + 60C29A1424F24173EFF8DF10 /* FocusScoreCard.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FocusScoreCard.swift; sourceTree = ""; }; + 61F2229BED9D8ACB7FB8F293 /* swift-platform-sdk */ = {isa = PBXFileReference; lastKnownFileType = folder; name = "swift-platform-sdk"; path = "../../learning_ai_common_plat/packages/swift-platform-sdk"; sourceTree = SOURCE_ROOT; }; + 63E6837DBBD9BB7D385AE19B /* TravelTimeManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TravelTimeManager.swift; sourceTree = ""; }; + 65DDB61FA0103F684BDCA404 /* LoginView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoginView.swift; sourceTree = ""; }; 6FACEF504403985D3BE08E29 /* FormatTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FormatTests.swift; sourceTree = ""; }; + 729007CC41B12C35B3D20407 /* MenuBarState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuBarState.swift; sourceTree = ""; }; + 730C55779117D49CEDBCB3AB /* DataExportManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DataExportManager.swift; sourceTree = ""; }; + 7432A413C92A24E3C937A766 /* TimerListWidget.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimerListWidget.swift; sourceTree = ""; }; + 84C298B338633A7D75102171 /* SharedTimerData.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SharedTimerData.swift; sourceTree = ""; }; 8775EEA5055E7416149B8384 /* Urgency.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Urgency.swift; sourceTree = ""; }; + 880334677DB319D5189434D0 /* Routines.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Routines.swift; sourceTree = ""; }; + 88702BCE6B6F164F9848B0EF /* StreakCard.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StreakCard.swift; sourceTree = ""; }; + 88A825CA7F60503FDA2AEB44 /* RescheduleEngine.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RescheduleEngine.swift; sourceTree = ""; }; + 91DAB70AC30742308946D184 /* TimerActivityAttributes.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimerActivityAttributes.swift; sourceTree = ""; }; + 927DC190937AD396EBEEA7A2 /* MoodCheckInManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MoodCheckInManager.swift; sourceTree = ""; }; 93579D521BE5D6682B129A5C /* TimerEngine.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimerEngine.swift; sourceTree = ""; }; + 982CBA1B9F735532A9068F30 /* ChronoMindWatchComplications.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = ChronoMindWatchComplications.appex; sourceTree = BUILT_PRODUCTS_DIR; }; 9AA00B60532FC72462812693 /* UrgencyBadge.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UrgencyBadge.swift; sourceTree = ""; }; 9EA0B050D86B6910385A7A7B /* CascadeProgressBar.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CascadeProgressBar.swift; sourceTree = ""; }; + A0155CC1B3E862B55E40D776 /* Recurrence.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Recurrence.swift; sourceTree = ""; }; + A58E3947DAC75995659DCFD9 /* RoutineListView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoutineListView.swift; sourceTree = ""; }; A5D8865FAFACFB57899D5AF4 /* ChronoMind.app */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.application; path = ChronoMind.app; sourceTree = BUILT_PRODUCTS_DIR; }; + A6F8EA073290FD76BC7BCD89 /* PlatformSyncManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlatformSyncManager.swift; sourceTree = ""; }; + AB137EFADA8052BF5A94EB0F /* CalendarSyncManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CalendarSyncManager.swift; sourceTree = ""; }; + ACFED58D33D844D8649304DF /* RoutineEditorView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoutineEditorView.swift; sourceTree = ""; }; AE44586214BA0A4BEDA939F7 /* Cascade.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Cascade.swift; sourceTree = ""; }; + B3A157F51456449BC0989E6A /* ChronoMindWatch.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = ChronoMindWatch.app; sourceTree = BUILT_PRODUCTS_DIR; }; + B3A5D547D31EEFB16F3491EA /* ContextMessages.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContextMessages.swift; sourceTree = ""; }; + B769E9E88032FB471820D110 /* RoutineRunnerView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoutineRunnerView.swift; sourceTree = ""; }; + B7AC8BE54BDA744FCCA8C5A1 /* LocationTriggerManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocationTriggerManager.swift; sourceTree = ""; }; BD88A07063BD00F2DC6BB753 /* ChronoMindApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChronoMindApp.swift; sourceTree = ""; }; + BE3B45641C99D54A016AD38E /* NLParser.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NLParser.swift; sourceTree = ""; }; BEE32B08F25A4438A6B69FB6 /* ChronoMindTests.xctest */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.cfbundle; path = ChronoMindTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + C33938CC85EC8B658B97D6B3 /* RescheduleSheet.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RescheduleSheet.swift; sourceTree = ""; }; C4535FFCA7608DECAFC332C5 /* HapticEngine.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HapticEngine.swift; sourceTree = ""; }; + C5308F55D3240A2F6EBC1BEC /* AuthService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AuthService.swift; sourceTree = ""; }; + C8BE56479A13EBE5501CDB76 /* ChronoMindMac.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = ChronoMindMac.entitlements; sourceTree = ""; }; + CD29B4D4514DB0134359A13E /* KeychainHelper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KeychainHelper.swift; sourceTree = ""; }; + CD4D2E4380D018CAF3C8B82F /* MenuBarPopover.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuBarPopover.swift; sourceTree = ""; }; + CDB8E3C2B7FD90E1FA218B01 /* FeatureFlagService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FeatureFlagService.swift; sourceTree = ""; }; CEC3C28A0A106D3A02642F48 /* CascadeTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CascadeTests.swift; sourceTree = ""; }; D34C1AC330B0CF41C37A771C /* NotificationScheduler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationScheduler.swift; sourceTree = ""; }; + D4B535B5749F7DB694275594 /* ChronoMindWidgetBundle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChronoMindWidgetBundle.swift; sourceTree = ""; }; D520D46C5759E8780334D623 /* QuickTimerSheet.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = QuickTimerSheet.swift; sourceTree = ""; }; D899FC687E51E9606B813E4F /* TimeBlindness.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimeBlindness.swift; sourceTree = ""; }; + D9023E4736A87D08FD4910AC /* RescheduleUndoBanner.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RescheduleUndoBanner.swift; sourceTree = ""; }; DA9019324C6A38DF943E1FF6 /* SettingsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsView.swift; sourceTree = ""; }; + DBA241CF068B2706DD6816E6 /* WatchQuickTimerView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WatchQuickTimerView.swift; sourceTree = ""; }; + DE3BDED1D58A30C73BECC1EB /* WatchTimerDetailView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WatchTimerDetailView.swift; sourceTree = ""; }; + E22C19C2DC291E24D26A31A8 /* ChronoMindWidgets.appex */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = "wrapper.app-extension"; path = ChronoMindWidgets.appex; sourceTree = BUILT_PRODUCTS_DIR; }; + E2BCD2440274B6F39CE0FAA8 /* RescheduleEngineTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RescheduleEngineTests.swift; sourceTree = ""; }; E7C2F36FE2E4FEAD385B6860 /* TimelineView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimelineView.swift; sourceTree = ""; }; EE814566D06D5ED5DE214765 /* CountdownRing.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CountdownRing.swift; sourceTree = ""; }; + F6B1578465B9746FBC1F8267 /* ReferralManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReferralManager.swift; sourceTree = ""; }; F991E825657AE91E039404AD /* AlarmOverlay.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AlarmOverlay.swift; sourceTree = ""; }; - BB2200001111AAAA33335555 /* KeychainHelper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KeychainHelper.swift; sourceTree = ""; }; - BB2200001111AAAA33337777 /* AuthService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AuthService.swift; sourceTree = ""; }; - BB2200001111AAAA33339999 /* LoginView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoginView.swift; sourceTree = ""; }; - CC1100001111AAAA11112222 /* TelemetryService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TelemetryService.swift; sourceTree = ""; }; - CC1100001111AAAA11114444 /* FeatureFlagService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FeatureFlagService.swift; sourceTree = ""; }; /* End PBXFileReference section */ +/* Begin PBXFrameworksBuildPhase section */ + 3EFFCA73A838BD5377F9D70B /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + D3FD9B96192A97E3BD6C34E3 /* ByteLystPlatformSDK in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 426FCD3016398036D646FB4A /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 3A536FC42B293811D9C2FFBE /* ByteLystPlatformSDK in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + /* Begin PBXGroup section */ + 06ECC1C2D11A510F373A3D20 /* Data */ = { + isa = PBXGroup; + children = ( + 730C55779117D49CEDBCB3AB /* DataExportManager.swift */, + ); + path = Data; + sourceTree = ""; + }; + 0F8D26C130058372B8BF7590 /* Complications */ = { + isa = PBXGroup; + children = ( + 0268FEE252E20862C316C531 /* WatchComplications.swift */, + ); + path = Complications; + sourceTree = ""; + }; + 135B3AC86B03274A3650EFC4 /* Reschedule */ = { + isa = PBXGroup; + children = ( + C33938CC85EC8B658B97D6B3 /* RescheduleSheet.swift */, + D9023E4736A87D08FD4910AC /* RescheduleUndoBanner.swift */, + ); + path = Reschedule; + sourceTree = ""; + }; + 1C52C60CCBF5E84EFB54107F /* ChronoMindWidgets */ = { + isa = PBXGroup; + children = ( + D4B535B5749F7DB694275594 /* ChronoMindWidgetBundle.swift */, + 0DCA538F184FB24BE4AD7D29 /* ChronoMindWidgets.entitlements */, + 0204FDC3820F94F444C45951 /* NextTimerLockScreenWidget.swift */, + 53D8E157AFD2516A549AC4B7 /* NextTimerWidget.swift */, + 7432A413C92A24E3C937A766 /* TimerListWidget.swift */, + 1A2B8EB597908958DB17C5BE /* TimerLiveActivity.swift */, + ); + path = ChronoMindWidgets; + sourceTree = ""; + }; 237EFEB5E79C17C58AE4B02B /* Views */ = { isa = PBXGroup; children = ( EBD394FC41C27417B6272B2B /* Components */, EC4D2D1AC883572D82016E7A /* CreateTimer */, 444BD7BD82654D6A717BE39B /* Focus */, + 26BBDB3A8401017D5CBFA3A8 /* Gamification */, 4DBB188595CF9B880D09EFA8 /* History */, + 135B3AC86B03274A3650EFC4 /* Reschedule */, + 4F423E2CC5CA97DD97880BEE /* Routines */, 2ABA85855E88EF8E5AE2C296 /* Settings */, 583EC1D56685251E7A9410B8 /* Timeline */, ); path = Views; sourceTree = ""; }; + 26BBDB3A8401017D5CBFA3A8 /* Gamification */ = { + isa = PBXGroup; + children = ( + 479A9078C8BF70F342BE7A1C /* BadgeGridView.swift */, + 23A2B907D667DECB5946BF2B /* ConfettiView.swift */, + 60C29A1424F24173EFF8DF10 /* FocusScoreCard.swift */, + 88702BCE6B6F164F9848B0EF /* StreakCard.swift */, + 49C8FD0A60F09801ACADDC6F /* WeeklySummaryCard.swift */, + ); + path = Gamification; + sourceTree = ""; + }; 2ABA85855E88EF8E5AE2C296 /* Settings */ = { isa = PBXGroup; children = ( - BB2200001111AAAA33339999 /* LoginView.swift */, + 65DDB61FA0103F684BDCA404 /* LoginView.swift */, DA9019324C6A38DF943E1FF6 /* SettingsView.swift */, ); path = Settings; @@ -128,6 +404,14 @@ path = Focus; sourceTree = ""; }; + 4670B1DBB469A307C80B3415 /* Sleep */ = { + isa = PBXGroup; + children = ( + 4438C3D29B6F307E453E9EC1 /* SleepManager.swift */, + ); + path = Sleep; + sourceTree = ""; + }; 468A5761EC0508501FAF2294 /* Theme */ = { isa = PBXGroup; children = ( @@ -144,6 +428,33 @@ path = History; sourceTree = ""; }; + 4E841C1ACA02546E05B951D1 /* Wellness */ = { + isa = PBXGroup; + children = ( + 927DC190937AD396EBEEA7A2 /* MoodCheckInManager.swift */, + ); + path = Wellness; + sourceTree = ""; + }; + 4F423E2CC5CA97DD97880BEE /* Routines */ = { + isa = PBXGroup; + children = ( + ACFED58D33D844D8649304DF /* RoutineEditorView.swift */, + A58E3947DAC75995659DCFD9 /* RoutineListView.swift */, + B769E9E88032FB471820D110 /* RoutineRunnerView.swift */, + ); + path = Routines; + sourceTree = ""; + }; + 530AEE0AD583B2D8831DA182 /* Location */ = { + isa = PBXGroup; + children = ( + B7AC8BE54BDA744FCCA8C5A1 /* LocationTriggerManager.swift */, + 63E6837DBBD9BB7D385AE19B /* TravelTimeManager.swift */, + ); + path = Location; + sourceTree = ""; + }; 583EC1D56685251E7A9410B8 /* Timeline */ = { isa = PBXGroup; children = ( @@ -160,44 +471,137 @@ path = Notifications; sourceTree = ""; }; + 60D80CBAB490F2361AD1974A /* Diagnostics */ = { + isa = PBXGroup; + children = ( + 4C8F4F4478DBA412AA4DCCD3 /* CrashReporter.swift */, + ); + path = Diagnostics; + sourceTree = ""; + }; + 6471CCAB80762F23E80F2F13 /* Calendar */ = { + isa = PBXGroup; + children = ( + AB137EFADA8052BF5A94EB0F /* CalendarSyncManager.swift */, + ); + path = Calendar; + sourceTree = ""; + }; + 6800A73EFC05A4283B5F9D55 /* Accessibility */ = { + isa = PBXGroup; + children = ( + 2C914237A2B5359B04299601 /* AccessibilityHelpers.swift */, + ); + path = Accessibility; + sourceTree = ""; + }; + 6A8791D6748EAE1B7BA105B5 /* Views */ = { + isa = PBXGroup; + children = ( + 3A54834F3BE0671164B5552F /* MacSettingsView.swift */, + CD4D2E4380D018CAF3C8B82F /* MenuBarPopover.swift */, + ); + path = Views; + sourceTree = ""; + }; + 6BBE1534E8812098F23A2A29 /* Reschedule */ = { + isa = PBXGroup; + children = ( + 88A825CA7F60503FDA2AEB44 /* RescheduleEngine.swift */, + ); + path = Reschedule; + sourceTree = ""; + }; 739D982BE81B9C296ED1A1C4 = { isa = PBXGroup; children = ( ADC7E8817D3AC5CB0D19CE06 /* ChronoMind */, + F36E063650CB46A84F8424DA /* ChronoMindMac */, BA684DC5A43403F4E5BF4DBB /* ChronoMindTests */, + D6E3F1678F2F8F48DD830675 /* ChronoMindWatch */, + 1C52C60CCBF5E84EFB54107F /* ChronoMindWidgets */, + EF279E0310139E13A28979AA /* Packages */, D989A0D19D230F73B67AC744 /* Products */, ); sourceTree = ""; }; - BB2200001111AAAA0000CCCC /* Cloud */ = { + 88205FF3F73DB496AAB9C60A /* Gamification */ = { isa = PBXGroup; children = ( - BB2200001111AAAA33337777 /* AuthService.swift */, - CC1100001111AAAA11114444 /* FeatureFlagService.swift */, - BB2200001111AAAA33335555 /* KeychainHelper.swift */, - CC1100001111AAAA11112222 /* TelemetryService.swift */, + 5E264EE038BD4F87989A1F72 /* GamificationEngine.swift */, ); - path = Cloud; + path = Gamification; sourceTree = ""; }; 889806888E26EEDFA679B318 /* Shared */ = { isa = PBXGroup; children = ( - BB2200001111AAAA0000CCCC /* Cloud */, + 6800A73EFC05A4283B5F9D55 /* Accessibility */, + C6CCE4465286A83D16650677 /* AppGroup */, + 6471CCAB80762F23E80F2F13 /* Calendar */, + 8BDF42BBFA6BF2949782BD32 /* Cloud */, + 06ECC1C2D11A510F373A3D20 /* Data */, + 60D80CBAB490F2361AD1974A /* Diagnostics */, + 88205FF3F73DB496AAB9C60A /* Gamification */, + A14DF56EEACDC1D4FB17AB0F /* Growth */, AEBBD21D7F7F55BAA99CA1C5 /* Haptics */, + 530AEE0AD583B2D8831DA182 /* Location */, 5AB52EC93294F076818CB0DA /* Notifications */, + 6BBE1534E8812098F23A2A29 /* Reschedule */, + AA24B31EC5CFC950F4739911 /* Sharing */, + 4670B1DBB469A307C80B3415 /* Sleep */, 3C5FDEC2037E5CC602490C47 /* Store */, 468A5761EC0508501FAF2294 /* Theme */, BF15F58057A7B3864EDDE601 /* TimerEngine */, + 4E841C1ACA02546E05B951D1 /* Wellness */, ); path = Shared; sourceTree = ""; }; + 8BDF42BBFA6BF2949782BD32 /* Cloud */ = { + isa = PBXGroup; + children = ( + C5308F55D3240A2F6EBC1BEC /* AuthService.swift */, + 17BA07032A8712270E33C212 /* CloudKitSyncManager.swift */, + CDB8E3C2B7FD90E1FA218B01 /* FeatureFlagService.swift */, + CD29B4D4514DB0134359A13E /* KeychainHelper.swift */, + A6F8EA073290FD76BC7BCD89 /* PlatformSyncManager.swift */, + 355EAC56ED412303126019DA /* TelemetryService.swift */, + ); + path = Cloud; + sourceTree = ""; + }; + A14DF56EEACDC1D4FB17AB0F /* Growth */ = { + isa = PBXGroup; + children = ( + F6B1578465B9746FBC1F8267 /* ReferralManager.swift */, + ); + path = Growth; + sourceTree = ""; + }; + AA24B31EC5CFC950F4739911 /* Sharing */ = { + isa = PBXGroup; + children = ( + 197F0A9CD9DAF0996B0C08C5 /* ShareableTimerManager.swift */, + ); + path = Sharing; + sourceTree = ""; + }; + AAA7D0836C06616F4FEE411E /* LiveActivity */ = { + isa = PBXGroup; + children = ( + 91DAB70AC30742308946D184 /* TimerActivityAttributes.swift */, + ); + path = LiveActivity; + sourceTree = ""; + }; ADC7E8817D3AC5CB0D19CE06 /* ChronoMind */ = { isa = PBXGroup; children = ( B7064A49165283316A44BD46 /* App */, + AAA7D0836C06616F4FEE411E /* LiveActivity */, 889806888E26EEDFA679B318 /* Shared */, + D8F1E4831179A02271055FE7 /* SiriShortcuts */, 237EFEB5E79C17C58AE4B02B /* Views */, 52A8E7A04EFCDCABA3F05E28 /* ChronoMind.entitlements */, ); @@ -224,9 +628,14 @@ BA684DC5A43403F4E5BF4DBB /* ChronoMindTests */ = { isa = PBXGroup; children = ( + 1B4EA3466FEBE3CE96A6C2CD /* AccessibilityTests.swift */, CEC3C28A0A106D3A02642F48 /* CascadeTests.swift */, 6FACEF504403985D3BE08E29 /* FormatTests.swift */, + 32404B8571BE88EE8F4B984B /* GamificationEngineTests.swift */, + E2BCD2440274B6F39CE0FAA8 /* RescheduleEngineTests.swift */, + 54ED0C6714DDC82CF9DEC6C1 /* SharedTimerDataTests.swift */, 23F23285C9339D8EEDF95CF1 /* TimerEngineTests.swift */, + 100C2AEC2BE5E5B997F08AC7 /* UrgencyTests.swift */, ); path = ChronoMindTests; sourceTree = ""; @@ -235,7 +644,11 @@ isa = PBXGroup; children = ( AE44586214BA0A4BEDA939F7 /* Cascade.swift */, + B3A5D547D31EEFB16F3491EA /* ContextMessages.swift */, 1CC158E525F3F703034E5542 /* Format.swift */, + BE3B45641C99D54A016AD38E /* NLParser.swift */, + A0155CC1B3E862B55E40D776 /* Recurrence.swift */, + 880334677DB319D5189434D0 /* Routines.swift */, D899FC687E51E9606B813E4F /* TimeBlindness.swift */, 93579D521BE5D6682B129A5C /* TimerEngine.swift */, 8775EEA5055E7416149B8384 /* Urgency.swift */, @@ -243,11 +656,43 @@ path = TimerEngine; sourceTree = ""; }; + C6CCE4465286A83D16650677 /* AppGroup */ = { + isa = PBXGroup; + children = ( + 84C298B338633A7D75102171 /* SharedTimerData.swift */, + ); + path = AppGroup; + sourceTree = ""; + }; + D6E3F1678F2F8F48DD830675 /* ChronoMindWatch */ = { + isa = PBXGroup; + children = ( + 0F8D26C130058372B8BF7590 /* Complications */, + FBC821ED7751399B034F12DF /* Views */, + 1E2C2086B4B2E599F4EE7D9D /* ChronoMindWatch.entitlements */, + 162EA6A89620EC9ED71707E1 /* ChronoMindWatchApp.swift */, + 0625840216F70EFAB4A21985 /* WatchTimerStore.swift */, + ); + path = ChronoMindWatch; + sourceTree = ""; + }; + D8F1E4831179A02271055FE7 /* SiriShortcuts */ = { + isa = PBXGroup; + children = ( + 38EB42DB96BAF7C05809A7D9 /* TimerAppIntents.swift */, + ); + path = SiriShortcuts; + sourceTree = ""; + }; D989A0D19D230F73B67AC744 /* Products */ = { isa = PBXGroup; children = ( A5D8865FAFACFB57899D5AF4 /* ChronoMind.app */, + 3979E2F91CF5CD721AB63632 /* ChronoMindMac.app */, BEE32B08F25A4438A6B69FB6 /* ChronoMindTests.xctest */, + B3A157F51456449BC0989E6A /* ChronoMindWatch.app */, + 982CBA1B9F735532A9068F30 /* ChronoMindWatchComplications.appex */, + E22C19C2DC291E24D26A31A8 /* ChronoMindWidgets.appex */, ); name = Products; sourceTree = ""; @@ -275,6 +720,36 @@ path = CreateTimer; sourceTree = ""; }; + EF279E0310139E13A28979AA /* Packages */ = { + isa = PBXGroup; + children = ( + 61F2229BED9D8ACB7FB8F293 /* swift-platform-sdk */, + ); + name = Packages; + sourceTree = ""; + }; + F36E063650CB46A84F8424DA /* ChronoMindMac */ = { + isa = PBXGroup; + children = ( + 6A8791D6748EAE1B7BA105B5 /* Views */, + C8BE56479A13EBE5501CDB76 /* ChronoMindMac.entitlements */, + 2C51DECA2DE40C002338930E /* ChronoMindMacApp.swift */, + 284CD02DD81443EC3D2D5FAD /* MacTimerStore.swift */, + 729007CC41B12C35B3D20407 /* MenuBarState.swift */, + ); + path = ChronoMindMac; + sourceTree = ""; + }; + FBC821ED7751399B034F12DF /* Views */ = { + isa = PBXGroup; + children = ( + 439857A424E7419653DBC47B /* WatchContentView.swift */, + DBA241CF068B2706DD6816E6 /* WatchQuickTimerView.swift */, + DE3BDED1D58A30C73BECC1EB /* WatchTimerDetailView.swift */, + ); + path = Views; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -296,23 +771,99 @@ productReference = BEE32B08F25A4438A6B69FB6 /* ChronoMindTests.xctest */; productType = "com.apple.product-type.bundle.unit-test"; }; - 78243758404E574753DB494E /* ChronoMind */ = { + 7028351BB1945332C6B77BA3 /* ChronoMindWidgets */ = { isa = PBXNativeTarget; - buildConfigurationList = E15654FE3118301BF65DA240 /* Build configuration list for PBXNativeTarget "ChronoMind" */; + buildConfigurationList = FEABEE5CC14CE2241F151965 /* Build configuration list for PBXNativeTarget "ChronoMindWidgets" */; buildPhases = ( - 30FEA9533F75E1C796E0E198 /* Sources */, + 7E4592C5F738D41A7EDED31B /* Sources */, ); buildRules = ( ); dependencies = ( ); + name = ChronoMindWidgets; + packageProductDependencies = ( + ); + productName = ChronoMindWidgets; + productReference = E22C19C2DC291E24D26A31A8 /* ChronoMindWidgets.appex */; + productType = "com.apple.product-type.app-extension"; + }; + 78243758404E574753DB494E /* ChronoMind */ = { + isa = PBXNativeTarget; + buildConfigurationList = E15654FE3118301BF65DA240 /* Build configuration list for PBXNativeTarget "ChronoMind" */; + buildPhases = ( + 30FEA9533F75E1C796E0E198 /* Sources */, + 3EFFCA73A838BD5377F9D70B /* Frameworks */, + 392826AC3F2315DA0E9B605E /* Embed Foundation Extensions */, + ); + buildRules = ( + ); + dependencies = ( + B79C9D50E7CB4406830725D3 /* PBXTargetDependency */, + ); name = ChronoMind; packageProductDependencies = ( + EB6569E6ACF6CE60A4653F58 /* ByteLystPlatformSDK */, ); productName = ChronoMind; productReference = A5D8865FAFACFB57899D5AF4 /* ChronoMind.app */; productType = "com.apple.product-type.application"; }; + 8A2AE3A5C26A2CC7420F50C0 /* ChronoMindWatchComplications */ = { + isa = PBXNativeTarget; + buildConfigurationList = C1C41C096ABEC0B4AE4A16B7 /* Build configuration list for PBXNativeTarget "ChronoMindWatchComplications" */; + buildPhases = ( + 28406B260CAC3CFFB730F318 /* Sources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = ChronoMindWatchComplications; + packageProductDependencies = ( + ); + productName = ChronoMindWatchComplications; + productReference = 982CBA1B9F735532A9068F30 /* ChronoMindWatchComplications.appex */; + productType = "com.apple.product-type.app-extension"; + }; + C0E0F171B21355486B744330 /* ChronoMindMac */ = { + isa = PBXNativeTarget; + buildConfigurationList = DEAF5596D086798AD9F34A31 /* Build configuration list for PBXNativeTarget "ChronoMindMac" */; + buildPhases = ( + 600A3A0367743A947070396E /* Sources */, + 426FCD3016398036D646FB4A /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = ChronoMindMac; + packageProductDependencies = ( + 421BDB267D3349C06FADAA28 /* ByteLystPlatformSDK */, + ); + productName = ChronoMindMac; + productReference = 3979E2F91CF5CD721AB63632 /* ChronoMindMac.app */; + productType = "com.apple.product-type.application"; + }; + E15B7150D85F1ED89481E2A0 /* ChronoMindWatch */ = { + isa = PBXNativeTarget; + buildConfigurationList = 0CDD029BE33DA8526FD1166A /* Build configuration list for PBXNativeTarget "ChronoMindWatch" */; + buildPhases = ( + FC212A1A5BDD9B2EFF5E8EF8 /* Sources */, + 436BC71EB491C565D4F31607 /* Embed Foundation Extensions */, + ); + buildRules = ( + ); + dependencies = ( + 7DBBCE034192BE80489EC4BD /* PBXTargetDependency */, + ); + name = ChronoMindWatch; + packageProductDependencies = ( + ); + productName = ChronoMindWatch; + productReference = B3A157F51456449BC0989E6A /* ChronoMindWatch.app */; + productType = "com.apple.product-type.application"; + }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ @@ -326,10 +877,26 @@ DevelopmentTeam = 748N7QPX7J; ProvisioningStyle = Automatic; }; + 7028351BB1945332C6B77BA3 = { + DevelopmentTeam = 748N7QPX7J; + ProvisioningStyle = Automatic; + }; 78243758404E574753DB494E = { DevelopmentTeam = 748N7QPX7J; ProvisioningStyle = Automatic; }; + 8A2AE3A5C26A2CC7420F50C0 = { + DevelopmentTeam = 748N7QPX7J; + ProvisioningStyle = Automatic; + }; + C0E0F171B21355486B744330 = { + DevelopmentTeam = 748N7QPX7J; + ProvisioningStyle = Automatic; + }; + E15B7150D85F1ED89481E2A0 = { + DevelopmentTeam = 748N7QPX7J; + ProvisioningStyle = Automatic; + }; }; }; buildConfigurationList = 900EBDCE1F40012242E88499 /* Build configuration list for PBXProject "ChronoMind" */; @@ -342,50 +909,159 @@ ); mainGroup = 739D982BE81B9C296ED1A1C4; minimizedProjectReferenceProxies = 1; + packageReferences = ( + 8271D12398BDFD7792EF3844 /* XCLocalSwiftPackageReference "../../learning_ai_common_plat/packages/swift-platform-sdk" */, + ); preferredProjectObjectVersion = 77; projectDirPath = ""; projectRoot = ""; targets = ( 78243758404E574753DB494E /* ChronoMind */, + C0E0F171B21355486B744330 /* ChronoMindMac */, 110092E4140109FF0073897B /* ChronoMindTests */, + E15B7150D85F1ED89481E2A0 /* ChronoMindWatch */, + 8A2AE3A5C26A2CC7420F50C0 /* ChronoMindWatchComplications */, + 7028351BB1945332C6B77BA3 /* ChronoMindWidgets */, ); }; /* End PBXProject section */ /* Begin PBXSourcesBuildPhase section */ + 28406B260CAC3CFFB730F318 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 59AAA0F0D1AD19E9761F1721 /* Cascade.swift in Sources */, + A38C310ABCC1705C3324E3C4 /* ContextMessages.swift in Sources */, + 25B0770DD3FCB039FB188EE1 /* Format.swift in Sources */, + 417095273522432002B4FBDA /* NLParser.swift in Sources */, + 50211852A25DA0E731A50240 /* Recurrence.swift in Sources */, + B8AB20C0CB248C63CB3492A5 /* Routines.swift in Sources */, + BB6CAD02AA491178DA5B4877 /* SharedTimerData.swift in Sources */, + 7A7473B689CB3372A8096596 /* TimeBlindness.swift in Sources */, + AAFBAB4BE935AE493B4FE3AA /* TimerEngine.swift in Sources */, + 383A8D81DE756B7B927380C7 /* Urgency.swift in Sources */, + 2B056429FC03E766200D49FD /* WatchComplications.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 30FEA9533F75E1C796E0E198 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + DFEF1E3BEF0FA8FB6FA9190F /* AccessibilityHelpers.swift in Sources */, 00BEA900EAE0226532824AE8 /* AlarmOverlay.swift in Sources */, + 1913421FC27656C4473DDDEB /* AuthService.swift in Sources */, + 7F663A8EEB025C2C76C5EA28 /* BadgeGridView.swift in Sources */, + 3DF8F9A6143C7F8EF180D4F0 /* CalendarSyncManager.swift in Sources */, CB7642D0D833F6D45B532AF6 /* Cascade.swift in Sources */, EC0CEB1B4418DCD090CD431B /* CascadeProgressBar.swift in Sources */, 9CE528A21B258A6554DA8A46 /* ChronoMindApp.swift in Sources */, C81D5D94A6F8E29C82EDD923 /* ChronoMindTheme.swift in Sources */, + D121718DF1490A6DE9B51ACB /* CloudKitSyncManager.swift in Sources */, + 437AFD9D5CD147B716D1E8C4 /* ConfettiView.swift in Sources */, 25D1EC51D100F93A735C6819 /* ContentView.swift in Sources */, + 13B1ADCBF9FB540963E7EE6E /* ContextMessages.swift in Sources */, AE00522D3CE642B0C608E8A2 /* CountdownRing.swift in Sources */, + A502F7A6FD94A656028BB21F /* CrashReporter.swift in Sources */, D488C32C9586E6BA10C17337 /* CreateTimerView.swift in Sources */, + F30CA27BE8E2F8EECC0C222A /* DataExportManager.swift in Sources */, + 327CE7DB4C7C15AF8DA2B62A /* FeatureFlagService.swift in Sources */, A77A6BFC98AD7A661CFE98DB /* FiringCard.swift in Sources */, + EB65379DC3CBE8E089B9B0D2 /* FocusScoreCard.swift in Sources */, 61FB6A2572B7299661705DE2 /* Format.swift in Sources */, + CF3D75CCEC4E57E0A14EA91D /* GamificationEngine.swift in Sources */, DFBCDAD7322F6552D82EC73C /* HapticEngine.swift in Sources */, CFA4D8E650083161CC184D90 /* HistoryView.swift in Sources */, + A1EB760B0C34B461D396D93C /* KeychainHelper.swift in Sources */, + 232999B910919E825FE998EA /* LocationTriggerManager.swift in Sources */, + 646CCFA8715308CA93206121 /* LoginView.swift in Sources */, + 9E6017860774FA9ABAAB2969 /* MoodCheckInManager.swift in Sources */, + A44A6E7DBC40789D47930EEA /* NLParser.swift in Sources */, 2A6837C7ACB5B9B8B632DD4D /* NotificationScheduler.swift in Sources */, + A41C122DBBF1E907999DA001 /* PlatformSyncManager.swift in Sources */, 3CE4B6F56C02F4962A2ECC2C /* PomodoroView.swift in Sources */, 6F3699234F74C1DB6E71D245 /* QuickTimerSheet.swift in Sources */, + CDBF417C26818962BC0855A3 /* Recurrence.swift in Sources */, + A16F53593B79C45CA9112BC5 /* ReferralManager.swift in Sources */, + FEB7FB2863B68085FF19FEF9 /* RescheduleEngine.swift in Sources */, + F335E56D6983E63E7DF48932 /* RescheduleSheet.swift in Sources */, + F9F4B78D4808970F5DA2B96C /* RescheduleUndoBanner.swift in Sources */, + C0ABB711B05C6C325EAC0655 /* RoutineEditorView.swift in Sources */, + 8599676E6A6A3E4B4FCFC781 /* RoutineListView.swift in Sources */, + 1C01BE509BB39FFFF0937808 /* RoutineRunnerView.swift in Sources */, + DCE5F7809030FE32D9BF4AB6 /* Routines.swift in Sources */, 809719965B906AE51EA53C8B /* SettingsView.swift in Sources */, + 50A0420ED0982E692B891008 /* ShareableTimerManager.swift in Sources */, + DE7642E7F4133ED3AC4ADD80 /* SharedTimerData.swift in Sources */, + D8CB64FBC2902018196C5A2F /* SleepManager.swift in Sources */, + 9A9F1180CA3D0D6F5DD03843 /* StreakCard.swift in Sources */, + 880CCDF13CFBAC1A05A9900D /* TelemetryService.swift in Sources */, B586A949950B02D3499C828E /* TimeBlindness.swift in Sources */, 8EF5C79BDF55D1F04851C3C0 /* TimelineView.swift in Sources */, + D7285C33592B39947C7CFCDD /* TimerActivityAttributes.swift in Sources */, + BE029684B5BB6ADFBC1C74AE /* TimerAppIntents.swift in Sources */, ABF5A4BB75D914A38A2D55CD /* TimerCard.swift in Sources */, 1D1DFA5585694A7BE76109E4 /* TimerEngine.swift in Sources */, 3BD65B9D32D36D682CBC5B2A /* TimerListSection.swift in Sources */, 006E8EA280AC7CAC5495951E /* TimerStore.swift in Sources */, + 638C4E7A14286D9E03594629 /* TravelTimeManager.swift in Sources */, E364FCB29C50C5780AB6BDED /* Urgency.swift in Sources */, 6770745F2FBB9478094DC205 /* UrgencyBadge.swift in Sources */, - BB2200001111AAAA33334444 /* KeychainHelper.swift in Sources */, - BB2200001111AAAA33336666 /* AuthService.swift in Sources */, - BB2200001111AAAA33338888 /* LoginView.swift in Sources */, - CC1100001111AAAA11113333 /* TelemetryService.swift in Sources */, - CC1100001111AAAA11115555 /* FeatureFlagService.swift in Sources */, + C699D646033D89F6635131A1 /* WeeklySummaryCard.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 600A3A0367743A947070396E /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 6F3B54B8AB0DD56B865EA421 /* AuthService.swift in Sources */, + 7593B213719494E702F237B3 /* Cascade.swift in Sources */, + 8A0C48D4161E6AAAA2A07E1A /* ChronoMindMacApp.swift in Sources */, + 3E6BD90AD48861E7FB3293D9 /* CloudKitSyncManager.swift in Sources */, + E0A6D4C09DE2F6269FFCC4CB /* ContextMessages.swift in Sources */, + 59AF6F8E533757C8ED232857 /* FeatureFlagService.swift in Sources */, + 0BD15496ADEDDF47400ACFAE /* Format.swift in Sources */, + 4E897C117548C3E0895782F3 /* GamificationEngine.swift in Sources */, + B7924EB8DA38D8A3CD30DE8F /* KeychainHelper.swift in Sources */, + 3BC2A4D25FCF4BDA4E815A5D /* MacSettingsView.swift in Sources */, + 70B9480DA119EE4ED3AC9EB2 /* MacTimerStore.swift in Sources */, + 7655CE103E7C4B4234391B0A /* MenuBarPopover.swift in Sources */, + C271F97EC79AF1BD430E2CFA /* MenuBarState.swift in Sources */, + E1FA5186AC86D9DE310454A5 /* NLParser.swift in Sources */, + 2ABB8A4449DCE02FD1DD584B /* PlatformSyncManager.swift in Sources */, + 3FCD1113C16D9CDC3B2747BD /* Recurrence.swift in Sources */, + 3F33A86FE5E609771F1A61E5 /* RescheduleEngine.swift in Sources */, + 1AD293C99C71465710A4A7DC /* Routines.swift in Sources */, + 9018CB5B25A5B9609510CFF8 /* SharedTimerData.swift in Sources */, + E44553CE289DB93054960421 /* TelemetryService.swift in Sources */, + B79A0BFA53743E32ADC391A2 /* TimeBlindness.swift in Sources */, + 252703AE35A87C23DC254B43 /* TimerEngine.swift in Sources */, + F54FD81D5D8BFA0BA15E8498 /* Urgency.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 7E4592C5F738D41A7EDED31B /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 09745CF8F0D63ECC1FDB1372 /* Cascade.swift in Sources */, + EC0DE6C3D0CBC8B9171F6320 /* ChronoMindWidgetBundle.swift in Sources */, + BB249B99011696BF8393AC87 /* ContextMessages.swift in Sources */, + 8AC85822AA4E433E857DA4A5 /* Format.swift in Sources */, + 30D2A96F7F707302EAEBB884 /* NLParser.swift in Sources */, + 55C19B7A17D9AF8846929963 /* NextTimerLockScreenWidget.swift in Sources */, + 5B9E3C59966FF6CDCD23A30D /* NextTimerWidget.swift in Sources */, + BCFE14C99F8A39B1937260C4 /* Recurrence.swift in Sources */, + 620899B41B3F7BA9AA6AE5B5 /* Routines.swift in Sources */, + 9644E23DB8F463EE6DF76A07 /* SharedTimerData.swift in Sources */, + CC009D149CDE275B3B7812A2 /* TimeBlindness.swift in Sources */, + FEA2BF2E1C612DE257985629 /* TimerActivityAttributes.swift in Sources */, + EF58BDCC18FF6A449BCE796A /* TimerEngine.swift in Sources */, + 63495CA979DF940E78809916 /* TimerListWidget.swift in Sources */, + 2096B66D52C8F16DFFB3EE0D /* TimerLiveActivity.swift in Sources */, + E82B756E0DB57362D15E22AA /* Urgency.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -393,9 +1069,36 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + D9CB0E01E2CDE3200695696C /* AccessibilityTests.swift in Sources */, 33FE05A7CC65C5A251D5C686 /* CascadeTests.swift in Sources */, 06789A5C995DCA4F35A4B9BD /* FormatTests.swift in Sources */, + 7B5C1FB2612A55AE72B5AD40 /* GamificationEngineTests.swift in Sources */, + ECE1C2F38A5CDBAD799F436F /* RescheduleEngineTests.swift in Sources */, + 32326A9CCDBA6A93403477E8 /* SharedTimerDataTests.swift in Sources */, D23D2EBC51D60E3D6C91DDAF /* TimerEngineTests.swift in Sources */, + 0DA7D6CDB1B446E8D3E1ECB8 /* UrgencyTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + FC212A1A5BDD9B2EFF5E8EF8 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 1598963EE482A49A6BE6C1A1 /* Cascade.swift in Sources */, + 1335A9670AC57E4D55982F30 /* ChronoMindWatchApp.swift in Sources */, + 17CA849355B8B364E1229D72 /* ContextMessages.swift in Sources */, + 03EF0278E7692D812482CD24 /* Format.swift in Sources */, + A2362E723190B333C435C8FE /* NLParser.swift in Sources */, + 4EFA9A99B3F7F63DA53FE986 /* Recurrence.swift in Sources */, + 6FD3A8BDEDD44243C678FA17 /* Routines.swift in Sources */, + D010CFAEBE1A9ED9D81E3B06 /* SharedTimerData.swift in Sources */, + E38C408C4D69220474FA794E /* TimeBlindness.swift in Sources */, + AC65C4971CDEF04A0BBCBCA6 /* TimerEngine.swift in Sources */, + C7B2C7C46C8929AC4C8F09D4 /* Urgency.swift in Sources */, + F68B39CF4045DA16BD3FF38A /* WatchContentView.swift in Sources */, + 7574D49CE352EFD54B38ED54 /* WatchQuickTimerView.swift in Sources */, + 96B75E94FDFB11235CD67F49 /* WatchTimerDetailView.swift in Sources */, + 2006E7190D828C4F92FF0A5E /* WatchTimerStore.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -407,6 +1110,16 @@ target = 78243758404E574753DB494E /* ChronoMind */; targetProxy = 5BB5DCEADCC953EE536BCB14 /* PBXContainerItemProxy */; }; + 7DBBCE034192BE80489EC4BD /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 8A2AE3A5C26A2CC7420F50C0 /* ChronoMindWatchComplications */; + targetProxy = 279239143BE050BEFD7AAF2E /* PBXContainerItemProxy */; + }; + B79C9D50E7CB4406830725D3 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 7028351BB1945332C6B77BA3 /* ChronoMindWidgets */; + targetProxy = 53A5BE972EADCC12E90522A3 /* PBXContainerItemProxy */; + }; /* End PBXTargetDependency section */ /* Begin XCBuildConfiguration section */ @@ -420,6 +1133,7 @@ GENERATE_INFOPLIST_FILE = YES; INFOPLIST_GENERATION_MODE = GeneratedFile; INFOPLIST_KEY_CFBundleDisplayName = ChronoMind; + INFOPLIST_KEY_NSSupportsLiveActivities = YES; INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; INFOPLIST_KEY_UILaunchScreen_Generation = YES; @@ -449,6 +1163,7 @@ GENERATE_INFOPLIST_FILE = YES; INFOPLIST_GENERATION_MODE = GeneratedFile; INFOPLIST_KEY_CFBundleDisplayName = ChronoMind; + INFOPLIST_KEY_NSSupportsLiveActivities = YES; INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; INFOPLIST_KEY_UILaunchScreen_Generation = YES; @@ -486,6 +1201,29 @@ }; name = Debug; }; + 2597413308A8EA492A62CD60 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_ENTITLEMENTS = ChronoMindWatch/ChronoMindWatch.entitlements; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_GENERATION_MODE = GeneratedFile; + INFOPLIST_KEY_CFBundleDisplayName = "ChronoMind Complications"; + INFOPLIST_KEY_NSExtension_NSExtensionPointIdentifier = "com.apple.widgetkit-extension"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@executable_path/../../Frameworks", + ); + MARKETING_VERSION = 1.0.0; + PRODUCT_BUNDLE_IDENTIFIER = com.chronomind.app.watchkitapp.complications; + SDKROOT = watchos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = 4; + WATCHOS_DEPLOYMENT_TARGET = 10.0; + }; + name = Debug; + }; 2FAE12CBA4AF17056BAF8CBD /* Release */ = { isa = XCBuildConfiguration; buildSettings = { @@ -504,6 +1242,93 @@ }; name = Release; }; + 3EE05CD662DF8CE5AB21F6C4 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_ENTITLEMENTS = ChronoMindWatch/ChronoMindWatch.entitlements; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_GENERATION_MODE = GeneratedFile; + INFOPLIST_KEY_CFBundleDisplayName = ChronoMind; + INFOPLIST_KEY_WKCompanionAppBundleIdentifier = com.chronomind.app; + INFOPLIST_KEY_WKRunsIndependentlyOfCompanionApp = YES; + MARKETING_VERSION = 1.0.0; + PRODUCT_BUNDLE_IDENTIFIER = com.chronomind.app.watchkitapp; + SDKROOT = watchos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = 4; + WATCHOS_DEPLOYMENT_TARGET = 10.0; + }; + name = Release; + }; + 4A3BD747A1F63065E24F2C4C /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_ENTITLEMENTS = ChronoMindMac/ChronoMindMac.entitlements; + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_GENERATION_MODE = GeneratedFile; + INFOPLIST_KEY_CFBundleDisplayName = ChronoMind; + INFOPLIST_KEY_LSUIElement = YES; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + MACOSX_DEPLOYMENT_TARGET = 14.0; + MARKETING_VERSION = 1.0.0; + PRODUCT_BUNDLE_IDENTIFIER = com.chronomind.mac; + SDKROOT = macosx; + }; + name = Release; + }; + 687ADC1F0F2DFA2AB0E21646 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_ENTITLEMENTS = ChronoMindWatch/ChronoMindWatch.entitlements; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_GENERATION_MODE = GeneratedFile; + INFOPLIST_KEY_CFBundleDisplayName = "ChronoMind Complications"; + INFOPLIST_KEY_NSExtension_NSExtensionPointIdentifier = "com.apple.widgetkit-extension"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@executable_path/../../Frameworks", + ); + MARKETING_VERSION = 1.0.0; + PRODUCT_BUNDLE_IDENTIFIER = com.chronomind.app.watchkitapp.complications; + SDKROOT = watchos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = 4; + WATCHOS_DEPLOYMENT_TARGET = 10.0; + }; + name = Release; + }; + 70225971B7D5E8CC065655A2 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_ENTITLEMENTS = ChronoMindWidgets/ChronoMindWidgets.entitlements; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_GENERATION_MODE = GeneratedFile; + INFOPLIST_KEY_CFBundleDisplayName = "ChronoMind Widgets"; + INFOPLIST_KEY_NSExtension_NSExtensionPointIdentifier = "com.apple.widgetkit-extension"; + IPHONEOS_DEPLOYMENT_TARGET = 17.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@executable_path/../../Frameworks", + ); + MARKETING_VERSION = 1.0.0; + PRODUCT_BUNDLE_IDENTIFIER = com.chronomind.app.widgets; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; 9554092DCB210E9D537B30FC /* Release */ = { isa = XCBuildConfiguration; buildSettings = { @@ -556,7 +1381,6 @@ MTL_ENABLE_DEBUG_INFO = NO; MTL_FAST_MATH = YES; PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = iphoneos; SWIFT_COMPILATION_MODE = wholemodule; SWIFT_OPTIMIZATION_LEVEL = "-O"; SWIFT_VERSION = 5.9; @@ -565,6 +1389,26 @@ }; name = Release; }; + AD436E7A27DAA7AB322614C5 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_ENTITLEMENTS = ChronoMindWatch/ChronoMindWatch.entitlements; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_GENERATION_MODE = GeneratedFile; + INFOPLIST_KEY_CFBundleDisplayName = ChronoMind; + INFOPLIST_KEY_WKCompanionAppBundleIdentifier = com.chronomind.app; + INFOPLIST_KEY_WKRunsIndependentlyOfCompanionApp = YES; + MARKETING_VERSION = 1.0.0; + PRODUCT_BUNDLE_IDENTIFIER = com.chronomind.app.watchkitapp; + SDKROOT = watchos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = 4; + WATCHOS_DEPLOYMENT_TARGET = 10.0; + }; + name = Debug; + }; DF2F9E2B2834FDEE0C6C59C0 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -624,7 +1468,6 @@ MTL_FAST_MATH = YES; ONLY_ACTIVE_ARCH = YES; PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = iphoneos; SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 5.9; @@ -633,9 +1476,62 @@ }; name = Debug; }; + E663D452B2999C7E7ECEAB1F /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_ENTITLEMENTS = ChronoMindMac/ChronoMindMac.entitlements; + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_GENERATION_MODE = GeneratedFile; + INFOPLIST_KEY_CFBundleDisplayName = ChronoMind; + INFOPLIST_KEY_LSUIElement = YES; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + MACOSX_DEPLOYMENT_TARGET = 14.0; + MARKETING_VERSION = 1.0.0; + PRODUCT_BUNDLE_IDENTIFIER = com.chronomind.mac; + SDKROOT = macosx; + }; + name = Debug; + }; + F63C62F6A4AC51C495B45078 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_ENTITLEMENTS = ChronoMindWidgets/ChronoMindWidgets.entitlements; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_GENERATION_MODE = GeneratedFile; + INFOPLIST_KEY_CFBundleDisplayName = "ChronoMind Widgets"; + INFOPLIST_KEY_NSExtension_NSExtensionPointIdentifier = "com.apple.widgetkit-extension"; + IPHONEOS_DEPLOYMENT_TARGET = 17.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@executable_path/../../Frameworks", + ); + MARKETING_VERSION = 1.0.0; + PRODUCT_BUNDLE_IDENTIFIER = com.chronomind.app.widgets; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ + 0CDD029BE33DA8526FD1166A /* Build configuration list for PBXNativeTarget "ChronoMindWatch" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + AD436E7A27DAA7AB322614C5 /* Debug */, + 3EE05CD662DF8CE5AB21F6C4 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; 900EBDCE1F40012242E88499 /* Build configuration list for PBXProject "ChronoMind" */ = { isa = XCConfigurationList; buildConfigurations = ( @@ -654,6 +1550,24 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; }; + C1C41C096ABEC0B4AE4A16B7 /* Build configuration list for PBXNativeTarget "ChronoMindWatchComplications" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 2597413308A8EA492A62CD60 /* Debug */, + 687ADC1F0F2DFA2AB0E21646 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + DEAF5596D086798AD9F34A31 /* Build configuration list for PBXNativeTarget "ChronoMindMac" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + E663D452B2999C7E7ECEAB1F /* Debug */, + 4A3BD747A1F63065E24F2C4C /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; E15654FE3118301BF65DA240 /* Build configuration list for PBXNativeTarget "ChronoMind" */ = { isa = XCConfigurationList; buildConfigurations = ( @@ -663,7 +1577,34 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Debug; }; + FEABEE5CC14CE2241F151965 /* Build configuration list for PBXNativeTarget "ChronoMindWidgets" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + F63C62F6A4AC51C495B45078 /* Debug */, + 70225971B7D5E8CC065655A2 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; /* End XCConfigurationList section */ + +/* Begin XCLocalSwiftPackageReference section */ + 8271D12398BDFD7792EF3844 /* XCLocalSwiftPackageReference "../../learning_ai_common_plat/packages/swift-platform-sdk" */ = { + isa = XCLocalSwiftPackageReference; + relativePath = "../../learning_ai_common_plat/packages/swift-platform-sdk"; + }; +/* End XCLocalSwiftPackageReference section */ + +/* Begin XCSwiftPackageProductDependency section */ + 421BDB267D3349C06FADAA28 /* ByteLystPlatformSDK */ = { + isa = XCSwiftPackageProductDependency; + productName = ByteLystPlatformSDK; + }; + EB6569E6ACF6CE60A4653F58 /* ByteLystPlatformSDK */ = { + isa = XCSwiftPackageProductDependency; + productName = ByteLystPlatformSDK; + }; +/* End XCSwiftPackageProductDependency section */ }; rootObject = B148EC54D0D3F16627E44282 /* Project object */; } diff --git a/ios/ChronoMind.xcodeproj/xcshareddata/xcschemes/ChronoMind.xcscheme b/ios/ChronoMind.xcodeproj/xcshareddata/xcschemes/ChronoMind.xcscheme index c6393d4..b5aa080 100644 --- a/ios/ChronoMind.xcodeproj/xcshareddata/xcschemes/ChronoMind.xcscheme +++ b/ios/ChronoMind.xcodeproj/xcshareddata/xcschemes/ChronoMind.xcscheme @@ -35,6 +35,20 @@ ReferencedContainer = "container:ChronoMind.xcodeproj"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ios/ChronoMind.xcodeproj/xcshareddata/xcschemes/ChronoMindWatch.xcscheme b/ios/ChronoMind.xcodeproj/xcshareddata/xcschemes/ChronoMindWatch.xcscheme new file mode 100644 index 0000000..988a7c1 --- /dev/null +++ b/ios/ChronoMind.xcodeproj/xcshareddata/xcschemes/ChronoMindWatch.xcscheme @@ -0,0 +1,107 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ios/ChronoMind/App/ContentView.swift b/ios/ChronoMind/App/ContentView.swift index cd212f6..a61eec2 100644 --- a/ios/ChronoMind/App/ContentView.swift +++ b/ios/ChronoMind/App/ContentView.swift @@ -72,13 +72,23 @@ struct ContentView: View { private var iPadLayout: some View { NavigationSplitView { // Sidebar - List(Tab.allCases, selection: $selectedTab) { tab in - Label(tab.rawValue, systemImage: tab.icon) - .tag(tab) + VStack(spacing: 0) { + ForEach(Tab.allCases) { tab in + Button { + selectedTab = tab + } label: { + Label(tab.rawValue, systemImage: tab.icon) + .frame(maxWidth: .infinity, alignment: .leading) + .padding(.horizontal, 16) + .padding(.vertical, 10) + .background(selectedTab == tab ? CMColors.accent.opacity(0.15) : Color.clear) + .cornerRadius(8) + } + .buttonStyle(.plain) + } } + .padding(.horizontal, 8) .navigationTitle("ChronoMind") - .listStyle(.sidebar) - .scrollContentBackground(.hidden) .background(CMColors.bg) } detail: { // Detail pane @@ -155,8 +165,14 @@ struct ContentView: View { // Countdown CountdownRing( - timer: timer, - now: timerStore.now, + progress: { + guard let duration = timer.duration, duration > 0 else { return 0 } + let remaining = max(0, timer.targetTime.timeIntervalSince(timerStore.now)) + return 1.0 - (remaining / duration) + }(), + urgency: timer.urgency, + remainingSeconds: max(0, timer.targetTime.timeIntervalSince(timerStore.now)), + totalSeconds: timer.duration ?? 0, size: 180 ) .frame(maxWidth: .infinity) diff --git a/ios/ChronoMind/Shared/Accessibility/AccessibilityHelpers.swift b/ios/ChronoMind/Shared/Accessibility/AccessibilityHelpers.swift index 4fa2fce..42e06f1 100644 --- a/ios/ChronoMind/Shared/Accessibility/AccessibilityHelpers.swift +++ b/ios/ChronoMind/Shared/Accessibility/AccessibilityHelpers.swift @@ -80,7 +80,7 @@ struct ReduceMotionModifier: ViewModifier { extension View { /// Apply animation that respects Reduce Motion setting - func motionSafe(_ animation: Animation, reduced: Animation = .none) -> some View { + func motionSafe(_ animation: Animation, reduced: Animation = .linear(duration: 0)) -> some View { modifier(ReduceMotionModifier(animation: animation, reducedAnimation: reduced)) } } diff --git a/ios/ChronoMind/Shared/Calendar/CalendarSyncManager.swift b/ios/ChronoMind/Shared/Calendar/CalendarSyncManager.swift index c02c4e8..44bf246 100644 --- a/ios/ChronoMind/Shared/Calendar/CalendarSyncManager.swift +++ b/ios/ChronoMind/Shared/Calendar/CalendarSyncManager.swift @@ -142,16 +142,16 @@ final class CalendarSyncManager: ObservableObject { var timer = CMTimer( id: stableId, + type: .alarm, label: event.title ?? "Calendar Event", description: event.location, - type: .alarm, - state: .active, urgency: urgency, - duration: event.endDate.timeIntervalSince(startDate), + state: .active, targetTime: startDate, + duration: event.endDate.timeIntervalSince(startDate), createdAt: Date(), startedAt: Date(), - category: "calendar", + elapsedBeforePause: 0, cascade: CascadeConfig(preset: .standard, intervals: []), warnings: calculateCascadeWarnings( targetTime: startDate, @@ -159,9 +159,7 @@ final class CalendarSyncManager: ObservableObject { now: Date() ), snoozeCount: 0, - isCalendarSync: true, - calendarEventId: event.eventIdentifier, - calendarColor: event.calendar.cgColor + category: "calendar" ) return timer diff --git a/ios/ChronoMind/Shared/Cloud/CloudKitSyncManager.swift b/ios/ChronoMind/Shared/Cloud/CloudKitSyncManager.swift index 15cadcb..3edf6e4 100644 --- a/ios/ChronoMind/Shared/Cloud/CloudKitSyncManager.swift +++ b/ios/ChronoMind/Shared/Cloud/CloudKitSyncManager.swift @@ -40,7 +40,9 @@ final class CloudKitSyncManager: ObservableObject { } deinit { - stopSync() + if let observer = observer { + NotificationCenter.default.removeObserver(observer) + } } // MARK: - Sync Control diff --git a/ios/ChronoMind/Shared/Data/DataExportManager.swift b/ios/ChronoMind/Shared/Data/DataExportManager.swift index 8cb7e8a..7115e72 100644 --- a/ios/ChronoMind/Shared/Data/DataExportManager.swift +++ b/ios/ChronoMind/Shared/Data/DataExportManager.swift @@ -187,7 +187,7 @@ struct TimerExport: Codable { self.type = timer.type.rawValue self.state = timer.state.rawValue self.urgency = timer.urgency.rawValue - self.duration = timer.duration + self.duration = timer.duration ?? 0 self.targetTime = timer.targetTime self.createdAt = timer.createdAt self.completedAt = timer.completedAt diff --git a/ios/ChronoMind/Shared/Sharing/ShareableTimerManager.swift b/ios/ChronoMind/Shared/Sharing/ShareableTimerManager.swift index dc0a815..cdac17f 100644 --- a/ios/ChronoMind/Shared/Sharing/ShareableTimerManager.swift +++ b/ios/ChronoMind/Shared/Sharing/ShareableTimerManager.swift @@ -27,7 +27,7 @@ final class ShareableTimerManager: ObservableObject { code: shareCode, label: timer.label, type: timer.type, - durationSeconds: timer.duration, + durationSeconds: timer.duration ?? 0, urgency: timer.urgency, cascadePreset: timer.cascade.preset, category: timer.category, @@ -99,6 +99,14 @@ final class ShareableTimerManager: ObservableObject { rounds: 4 ) )) + case .event: + // Events need a target date — set to duration from now + return createAlarm(CreateAlarmParams( + label: shared.label, + targetTime: Date().addingTimeInterval(shared.durationSeconds), + urgency: shared.urgency, + cascade: CascadeConfig(preset: shared.cascadePreset, intervals: []) + )) } } diff --git a/ios/ChronoMind/Shared/Sleep/SleepManager.swift b/ios/ChronoMind/Shared/Sleep/SleepManager.swift index d90e7b2..35263e7 100644 --- a/ios/ChronoMind/Shared/Sleep/SleepManager.swift +++ b/ios/ChronoMind/Shared/Sleep/SleepManager.swift @@ -5,6 +5,7 @@ import Foundation import HealthKit import Combine +import UserNotifications @MainActor final class SleepManager: ObservableObject { diff --git a/ios/ChronoMind/Shared/TimerEngine/Cascade.swift b/ios/ChronoMind/Shared/TimerEngine/Cascade.swift index abc2394..dbc0934 100644 --- a/ios/ChronoMind/Shared/TimerEngine/Cascade.swift +++ b/ios/ChronoMind/Shared/TimerEngine/Cascade.swift @@ -47,7 +47,7 @@ struct CascadeWarning: Codable, Identifiable, Equatable { let minutesBefore: Int var fired: Bool var firedAt: Date? - let scheduledTime: Date + var scheduledTime: Date static func == (lhs: CascadeWarning, rhs: CascadeWarning) -> Bool { lhs.id == rhs.id diff --git a/ios/ChronoMind/SiriShortcuts/TimerAppIntents.swift b/ios/ChronoMind/SiriShortcuts/TimerAppIntents.swift index bdd370d..2106b82 100644 --- a/ios/ChronoMind/SiriShortcuts/TimerAppIntents.swift +++ b/ios/ChronoMind/SiriShortcuts/TimerAppIntents.swift @@ -135,8 +135,6 @@ struct ChronoMindShortcutsProvider: AppShortcutsProvider { intent: SetTimerIntent(), phrases: [ "Set a timer in \(.applicationName)", - "Set a \(\.$minutes) minute timer in \(.applicationName)", - "Start a \(\.$minutes) minute timer called \(\.$label) in \(.applicationName)", ], shortTitle: "Set Timer", systemImageName: "timer" @@ -147,7 +145,6 @@ struct ChronoMindShortcutsProvider: AppShortcutsProvider { phrases: [ "Start Pomodoro in \(.applicationName)", "Start a focus session in \(.applicationName)", - "Start a \(\.$workMinutes) minute Pomodoro in \(.applicationName)", ], shortTitle: "Start Pomodoro", systemImageName: "target" diff --git a/ios/ChronoMindMac/ChronoMindMac.entitlements b/ios/ChronoMindMac/ChronoMindMac.entitlements new file mode 100644 index 0000000..c03447f --- /dev/null +++ b/ios/ChronoMindMac/ChronoMindMac.entitlements @@ -0,0 +1,14 @@ + + + + + com.apple.security.app-sandbox + + com.apple.security.application-groups + + group.com.chronomind.shared + + com.apple.security.network.client + + + diff --git a/ios/project.yml b/ios/project.yml index 3ab4d03..dc3ef3c 100644 --- a/ios/project.yml +++ b/ios/project.yml @@ -48,7 +48,7 @@ targets: INFOPLIST_KEY_NSSupportsLiveActivities: true dependencies: - target: ChronoMindWidgets - - target: ChronoMindWatch + # - target: ChronoMindWatch # Temporarily removed — watchOS target can't build on iOS Simulator - package: ByteLystPlatformSDK entitlements: path: ChronoMind/ChronoMind.entitlements