Initial commit: KisaniCal iOS app
Task management, Eisenhower matrix, workout logging with persistence,
and calendar with 6 view modes (Month, List, Year, Week, 3 Day, Day).
Custom floating tab bar, dynamic calendar icon, and workout data seeded.
2026-05-27 02:09:44 +03:00
|
|
|
// !$*UTF8*$!
|
|
|
|
|
{
|
|
|
|
|
archiveVersion = 1;
|
|
|
|
|
classes = {
|
|
|
|
|
};
|
|
|
|
|
objectVersion = 77;
|
|
|
|
|
objects = {
|
|
|
|
|
|
|
|
|
|
/* Begin PBXBuildFile section */
|
2026-07-07 22:53:20 +03:00
|
|
|
023A636FF533304DA5578D1C /* AnalyticsCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = D4FB8B5BFF3FF62728E9498A /* AnalyticsCoordinator.swift */; };
|
2026-06-03 12:27:45 +03:00
|
|
|
06CA0F336E64D9F6D56F7472 /* CloudSyncManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 449C34805DC6B2CB66886544 /* CloudSyncManager.swift */; };
|
Initial commit: KisaniCal iOS app
Task management, Eisenhower matrix, workout logging with persistence,
and calendar with 6 view modes (Month, List, Year, Week, 3 Day, Day).
Custom floating tab bar, dynamic calendar icon, and workout data seeded.
2026-05-27 02:09:44 +03:00
|
|
|
096804560A2F0A7D74E64780 /* TaskItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = DCC2AFB4FA765383740767CB /* TaskItem.swift */; };
|
2026-06-03 12:27:45 +03:00
|
|
|
12E42CE8B8E535FAE6268A0C /* AppGroup.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF905C574F34B4EE51A8D21E /* AppGroup.swift */; };
|
Initial commit: KisaniCal iOS app
Task management, Eisenhower matrix, workout logging with persistence,
and calendar with 6 view modes (Month, List, Year, Week, 3 Day, Day).
Custom floating tab bar, dynamic calendar icon, and workout data seeded.
2026-05-27 02:09:44 +03:00
|
|
|
13E4B9854F595394FC9D5912 /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC5E179A9189B0A8C3F856F6 /* ContentView.swift */; };
|
analytics(engine): pure deterministic AnalyticsEngine + models + tests (KC-51 ph1)
Phase 1 of the analytics system (/goal): the framework-independent analysis
engine. Value-type models (MetricDelta, TrendResult, DaySample, WeeklyReport,
MonthlyReport, ...) and AnalyticsEngine with documented formulas (volume,
%change, consistency, trend) and honest degradation (nil/zero/tiny baseline,
new exercise, rest day, outliers via winsorize, unit-dimension compatibility,
divide-by-zero). Calendar math takes an injected Calendar (locale/firstWeekday/
timezone/DST-safe).
AnalyticsEngineTests: 35 XCTest cases. Independently verified by compiling the
engine with swiftc and running a 42-assertion harness — all pass. (Xcode test
target not runnable in this env; assertions mirror the XCTest file.)
Registered the new files via xcodegen. Logs KC-51 phase-1 progress in ISSUES.md.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-07 22:06:59 +03:00
|
|
|
152AECD42FCF554C582E2DEA /* AnalyticsEngine.swift in Sources */ = {isa = PBXBuildFile; fileRef = 78EEE7568265196447E54D6B /* AnalyticsEngine.swift */; };
|
2026-06-24 21:02:57 +03:00
|
|
|
16FFC465D8646DED9A5C69D1 /* NLRecurrenceParseTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9BBF7B0464EE05D113396B93 /* NLRecurrenceParseTests.swift */; };
|
Initial commit: KisaniCal iOS app
Task management, Eisenhower matrix, workout logging with persistence,
and calendar with 6 view modes (Month, List, Year, Week, 3 Day, Day).
Custom floating tab bar, dynamic calendar icon, and workout data seeded.
2026-05-27 02:09:44 +03:00
|
|
|
1A22EE21460821170E44B1DF /* ExerciseModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5722CC4B59E3939724142710 /* ExerciseModels.swift */; };
|
2026-06-06 19:29:25 +03:00
|
|
|
205846F9651EDCE0D8207358 /* TaskLiveActivity.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0513EB8C7F6B6853B9E93E09 /* TaskLiveActivity.swift */; };
|
2026-06-24 19:48:00 +03:00
|
|
|
2885D000426D063F2125804C /* SpeechRecognizer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 86906905A4FA7A2384B3E24E /* SpeechRecognizer.swift */; };
|
2026-06-03 12:27:45 +03:00
|
|
|
2CD2313EDC4BFCE6E89C6787 /* AppGroup.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF905C574F34B4EE51A8D21E /* AppGroup.swift */; };
|
2026-06-06 19:29:25 +03:00
|
|
|
32C63D81925FBFE51CAE1FB7 /* TaskActivityAttributes.swift in Sources */ = {isa = PBXBuildFile; fileRef = FEEB07EB89E89383C32ADB34 /* TaskActivityAttributes.swift */; };
|
2026-06-03 12:27:45 +03:00
|
|
|
3AD7F62D231DCFFFFCB31649 /* TutorialManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01A27D42E141DC056D32C1A3 /* TutorialManager.swift */; };
|
|
|
|
|
3B57EA3600AFE975850DF39A /* AuthManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 89550F2CD19B950CCC6AD37F /* AuthManager.swift */; };
|
Initial commit: KisaniCal iOS app
Task management, Eisenhower matrix, workout logging with persistence,
and calendar with 6 view modes (Month, List, Year, Week, 3 Day, Day).
Custom floating tab bar, dynamic calendar icon, and workout data seeded.
2026-05-27 02:09:44 +03:00
|
|
|
3C793FD5DA00D3E9C0D51FEC /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 72FDF9C8DD37134576356B89 /* Assets.xcassets */; };
|
2026-06-03 13:31:04 +03:00
|
|
|
3E9DE1CF20BAC479805DF940 /* MyTasksWidget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 208F82348DEBD9FF7B0DCF17 /* MyTasksWidget.swift */; };
|
analytics(engine): pure deterministic AnalyticsEngine + models + tests (KC-51 ph1)
Phase 1 of the analytics system (/goal): the framework-independent analysis
engine. Value-type models (MetricDelta, TrendResult, DaySample, WeeklyReport,
MonthlyReport, ...) and AnalyticsEngine with documented formulas (volume,
%change, consistency, trend) and honest degradation (nil/zero/tiny baseline,
new exercise, rest day, outliers via winsorize, unit-dimension compatibility,
divide-by-zero). Calendar math takes an injected Calendar (locale/firstWeekday/
timezone/DST-safe).
AnalyticsEngineTests: 35 XCTest cases. Independently verified by compiling the
engine with swiftc and running a 42-assertion harness — all pass. (Xcode test
target not runnable in this env; assertions mirror the XCTest file.)
Registered the new files via xcodegen. Logs KC-51 phase-1 progress in ISSUES.md.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-07 22:06:59 +03:00
|
|
|
42E3B90A981E75FFC10C221F /* AnalyticsModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0379128BF8B6C1CA7DF026D0 /* AnalyticsModels.swift */; };
|
2026-06-07 12:20:41 +03:00
|
|
|
45AA93D76970B39DB8BA6A5B /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = C5EF0E7944C7F0763B83BB0F /* LaunchScreen.storyboard */; };
|
2026-05-30 02:38:15 +03:00
|
|
|
497732557745AE9BDA44FB2F /* ShortcutHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 326B77A7B317A7DB44E13EA5 /* ShortcutHandler.swift */; };
|
2026-06-24 20:59:43 +03:00
|
|
|
4FB79BBC1EE0F6C7EF844B02 /* RecurrenceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D72D757FA29923B6C150B5EE /* RecurrenceTests.swift */; };
|
analytics(engine): pure deterministic AnalyticsEngine + models + tests (KC-51 ph1)
Phase 1 of the analytics system (/goal): the framework-independent analysis
engine. Value-type models (MetricDelta, TrendResult, DaySample, WeeklyReport,
MonthlyReport, ...) and AnalyticsEngine with documented formulas (volume,
%change, consistency, trend) and honest degradation (nil/zero/tiny baseline,
new exercise, rest day, outliers via winsorize, unit-dimension compatibility,
divide-by-zero). Calendar math takes an injected Calendar (locale/firstWeekday/
timezone/DST-safe).
AnalyticsEngineTests: 35 XCTest cases. Independently verified by compiling the
engine with swiftc and running a 42-assertion harness — all pass. (Xcode test
target not runnable in this env; assertions mirror the XCTest file.)
Registered the new files via xcodegen. Logs KC-51 phase-1 progress in ISSUES.md.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-07 22:06:59 +03:00
|
|
|
550E9A86BE36228C705E91C1 /* AnalyticsEngineTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9DEAB6A9224E02484292362A /* AnalyticsEngineTests.swift */; };
|
2026-06-03 12:27:45 +03:00
|
|
|
552E2F85B01C9CC437D383B5 /* EventCountdownWidget.swift in Sources */ = {isa = PBXBuildFile; fileRef = FC17C7BA15BD2E84AE5F77CF /* EventCountdownWidget.swift */; };
|
|
|
|
|
55F00C433F853F7B54F136B3 /* WidgetViews.swift in Sources */ = {isa = PBXBuildFile; fileRef = 429806CE1021C8DE2EB770CE /* WidgetViews.swift */; };
|
|
|
|
|
5EF4A5B6CE91ADA0CCF72D0D /* ProfileSetupView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0C96EC00F6B021DBA3CC1A79 /* ProfileSetupView.swift */; };
|
2026-07-07 23:05:02 +03:00
|
|
|
5F91DDE0B64C8AE1F142F434 /* AnalyticsService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3A22FCC3FA1A10F52415E5AF /* AnalyticsService.swift */; };
|
2026-05-28 19:48:01 +03:00
|
|
|
67CE1747E5DB3FDA79D0FDFD /* OnboardingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 106EEF572C6F8990408329F0 /* OnboardingView.swift */; };
|
|
|
|
|
6921CB73A3257502FF778381 /* SplashView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BE2D50B4B4AC227BD21F4B60 /* SplashView.swift */; };
|
Calendar: fix weekday-header/week-number alignment to firstWeekday + tests
Root cause: a data-integrity bug, not visual. The month grid is built from
.weekOfMonth (respects Calendar.current.firstWeekday), but the weekday header
was hardcoded Sunday-first ("S M T W T F S") and the week-number label was gated
on isSunday (weekday == 1). On any non-Sunday-first locale (or when the user sets
"Start Week On" = Monday) every column was mislabeled by one and the W-number
landed on the wrong column — e.g. June 1 2026 (a Monday) appearing under "S".
Fix:
- Extract pure, testable date math into CalendarGrid (monthGrid + weekdaySymbols).
- Header now derived from firstWeekday, so it always matches the grid.
- Week-number label gated on isWeekStart (weekday == firstWeekday), not Sunday.
- Document that week numbers are locale weekOfYear (consistent with the layout),
not ISO.
- gridDays() and the year-view mini-month dedupe to CalendarGrid.
Verification:
- New KisaniCalTests target with 9 tests, all passing on simulator: exact
Sunday-first June 2026 grid, header↔grid alignment for firstWeekday 1...7,
cell date identity, month navigation (May/Jul/Feb 2026 + Feb 2028 leap +
Dec 2026→Jan 2027), and event-day bucketing (all-day, late-night, midnight-
crossing) across 4 timezones.
- Verified in the running app: header S M T W T F S, May 31 in the Sunday
column, June 1 under Monday, June 24 (Wednesday) selected.
Adds a DEBUG-only KISANI_INITIAL_TAB launch env (compiled out of Release) used
to screenshot the calendar past the sign-in gate.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-24 19:24:49 +03:00
|
|
|
6BCBF3902E38FBAA7348840D /* CalendarGridTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74FAA2B41FCEBC7E3F156F0F /* CalendarGridTests.swift */; };
|
2026-06-06 19:29:25 +03:00
|
|
|
703E068364256D6F3F867961 /* ISSUES.md in Resources */ = {isa = PBXBuildFile; fileRef = 92824ED40ECD41EFD4F78BEC /* ISSUES.md */; };
|
|
|
|
|
754D3DE3CEB998E36E585A61 /* LiveActivityManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0506183945D16EC443A69651 /* LiveActivityManager.swift */; };
|
2026-06-03 12:27:45 +03:00
|
|
|
79FC1DF6762C6F02D01AB643 /* KisaniCalWidgets.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = 0D6D6740721F01A74E404EB9 /* KisaniCalWidgets.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
|
Initial commit: KisaniCal iOS app
Task management, Eisenhower matrix, workout logging with persistence,
and calendar with 6 view modes (Month, List, Year, Week, 3 Day, Day).
Custom floating tab bar, dynamic calendar icon, and workout data seeded.
2026-05-27 02:09:44 +03:00
|
|
|
7CEBC340BFA9238D121946AC /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 57714B79AFFF60DA90EB86E3 /* Preview Assets.xcassets */; };
|
2026-06-16 23:50:37 +03:00
|
|
|
8387093D19FB3397CCB8FEF8 /* WenzaWatchApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = FF528FCC224EF283F95851AD /* WenzaWatchApp.swift */; };
|
2026-06-15 19:53:14 +03:00
|
|
|
83EA218392952885C97144D1 /* TodayMenuFeatures.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED5DB5340BEB3EF7A78CA153 /* TodayMenuFeatures.swift */; };
|
2026-07-07 22:34:32 +03:00
|
|
|
87564C27F644ED9CFF1E517B /* AnalyticsStoreTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3E8855698633CC9A1172AEF1 /* AnalyticsStoreTests.swift */; };
|
Initial commit: KisaniCal iOS app
Task management, Eisenhower matrix, workout logging with persistence,
and calendar with 6 view modes (Month, List, Year, Week, 3 Day, Day).
Custom floating tab bar, dynamic calendar icon, and workout data seeded.
2026-05-27 02:09:44 +03:00
|
|
|
8BE9D3D650B0F06169EC7048 /* SharedComponents.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23A4491BFA50721082024756 /* SharedComponents.swift */; };
|
2026-06-03 12:27:45 +03:00
|
|
|
8C9567A3DE3F63A1ECAE84D5 /* TutorialView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA3D5289C5F93484E22DEB63 /* TutorialView.swift */; };
|
2026-06-06 19:29:25 +03:00
|
|
|
8DA396DACE99DC4B7B4A460E /* TaskActivityAttributes.swift in Sources */ = {isa = PBXBuildFile; fileRef = FEEB07EB89E89383C32ADB34 /* TaskActivityAttributes.swift */; };
|
Initial commit: KisaniCal iOS app
Task management, Eisenhower matrix, workout logging with persistence,
and calendar with 6 view modes (Month, List, Year, Week, 3 Day, Day).
Custom floating tab bar, dynamic calendar icon, and workout data seeded.
2026-05-27 02:09:44 +03:00
|
|
|
9070521B1D36A5551976C275 /* CalendarView.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADF6CCD95A587E26E30F5712 /* CalendarView.swift */; };
|
2026-07-07 23:23:54 +03:00
|
|
|
9AA3E4808E88CA639BF3F28B /* AnalyticsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C6CEBCB6041EA41ED482F67 /* AnalyticsView.swift */; };
|
Initial commit: KisaniCal iOS app
Task management, Eisenhower matrix, workout logging with persistence,
and calendar with 6 view modes (Month, List, Year, Week, 3 Day, Day).
Custom floating tab bar, dynamic calendar icon, and workout data seeded.
2026-05-27 02:09:44 +03:00
|
|
|
9E3F966F6B6AF2E4F8109E51 /* WorkoutView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 20DAD771EFCC8B3B1DBD4DD6 /* WorkoutView.swift */; };
|
|
|
|
|
A1DBC4D2F09C02B8CEE6449E /* AddExerciseSheet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 768D4E314252E2A90A06CCF2 /* AddExerciseSheet.swift */; };
|
Calendar: fix weekday-header/week-number alignment to firstWeekday + tests
Root cause: a data-integrity bug, not visual. The month grid is built from
.weekOfMonth (respects Calendar.current.firstWeekday), but the weekday header
was hardcoded Sunday-first ("S M T W T F S") and the week-number label was gated
on isSunday (weekday == 1). On any non-Sunday-first locale (or when the user sets
"Start Week On" = Monday) every column was mislabeled by one and the W-number
landed on the wrong column — e.g. June 1 2026 (a Monday) appearing under "S".
Fix:
- Extract pure, testable date math into CalendarGrid (monthGrid + weekdaySymbols).
- Header now derived from firstWeekday, so it always matches the grid.
- Week-number label gated on isWeekStart (weekday == firstWeekday), not Sunday.
- Document that week numbers are locale weekOfYear (consistent with the layout),
not ISO.
- gridDays() and the year-view mini-month dedupe to CalendarGrid.
Verification:
- New KisaniCalTests target with 9 tests, all passing on simulator: exact
Sunday-first June 2026 grid, header↔grid alignment for firstWeekday 1...7,
cell date identity, month navigation (May/Jul/Feb 2026 + Feb 2028 leap +
Dec 2026→Jan 2027), and event-day bucketing (all-day, late-night, midnight-
crossing) across 4 timezones.
- Verified in the running app: header S M T W T F S, May 31 in the Sunday
column, June 1 under Monday, June 24 (Wednesday) selected.
Adds a DEBUG-only KISANI_INITIAL_TAB launch env (compiled out of Release) used
to screenshot the calendar past the sign-in gate.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-24 19:24:49 +03:00
|
|
|
A292B0492135BA40F6B6A951 /* CalendarGrid.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0FCB2077D9509CB5C0978E58 /* CalendarGrid.swift */; };
|
Initial commit: KisaniCal iOS app
Task management, Eisenhower matrix, workout logging with persistence,
and calendar with 6 view modes (Month, List, Year, Week, 3 Day, Day).
Custom floating tab bar, dynamic calendar icon, and workout data seeded.
2026-05-27 02:09:44 +03:00
|
|
|
A3B2D6622A2EE35C8D5A3C9B /* SettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 72308FEE0226F45414C04DDD /* SettingsView.swift */; };
|
|
|
|
|
A9FF93259AE8FF0ABF69D71A /* DesignTokens.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD4A35C0E1270E2E15C03F23 /* DesignTokens.swift */; };
|
2026-06-03 12:27:45 +03:00
|
|
|
AC0D814DA54D5EF5E25CEB99 /* WidgetData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 61BFF3BA28331A16D0ADE9D0 /* WidgetData.swift */; };
|
2026-07-07 22:53:20 +03:00
|
|
|
B0B83389E72D6DF4563D3DD4 /* AnalyticsAdapterTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 713DAF7EA146A779E4AC1D1A /* AnalyticsAdapterTests.swift */; };
|
|
|
|
|
B39F302F10FA4899AA0A5BAC /* AnalyticsDeepLink.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A32192C8620C6AB8499869F /* AnalyticsDeepLink.swift */; };
|
2026-06-03 12:27:45 +03:00
|
|
|
BD0DB4B0AA8A63D124EDFF2C /* HealthKitManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = FF5AFD143B693B77D07FBDA4 /* HealthKitManager.swift */; };
|
Initial commit: KisaniCal iOS app
Task management, Eisenhower matrix, workout logging with persistence,
and calendar with 6 view modes (Month, List, Year, Week, 3 Day, Day).
Custom floating tab bar, dynamic calendar icon, and workout data seeded.
2026-05-27 02:09:44 +03:00
|
|
|
BEAFF968632A34C70B11C5AC /* MatrixView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D44530A77DF12A17E52AAF34 /* MatrixView.swift */; };
|
2026-07-07 22:53:20 +03:00
|
|
|
C69A21EC244513185A1F59BD /* WorkoutAnalyticsAdapter.swift in Sources */ = {isa = PBXBuildFile; fileRef = E839E4F5E6272515C3EA14D7 /* WorkoutAnalyticsAdapter.swift */; };
|
2026-06-03 12:27:45 +03:00
|
|
|
C7767143D9617ECA04ED1935 /* KisaniCalWidgets.swift in Sources */ = {isa = PBXBuildFile; fileRef = 42650F655DB8B320C7C03929 /* KisaniCalWidgets.swift */; };
|
Initial commit: KisaniCal iOS app
Task management, Eisenhower matrix, workout logging with persistence,
and calendar with 6 view modes (Month, List, Year, Week, 3 Day, Day).
Custom floating tab bar, dynamic calendar icon, and workout data seeded.
2026-05-27 02:09:44 +03:00
|
|
|
C79C33BE2802E81AA00175CC /* TodayView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C786EBC7DF879D64EB28165E /* TodayView.swift */; };
|
2026-05-28 20:35:44 +03:00
|
|
|
CBE7295BF5ADE08FE93AFAAF /* FloatingTabState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9100804DB1E61EA882CC54DA /* FloatingTabState.swift */; };
|
2026-07-05 15:05:14 +03:00
|
|
|
D1F2189D03CFF743A534A0C6 /* ActivityHistoryView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 69F0950E6F31016C848B2A63 /* ActivityHistoryView.swift */; };
|
Initial commit: KisaniCal iOS app
Task management, Eisenhower matrix, workout logging with persistence,
and calendar with 6 view modes (Month, List, Year, Week, 3 Day, Day).
Custom floating tab bar, dynamic calendar icon, and workout data seeded.
2026-05-27 02:09:44 +03:00
|
|
|
D591A72235A53D4038FBC2B4 /* KisaniCalApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 001F67ADC72FBAEC03EB7E01 /* KisaniCalApp.swift */; };
|
2026-07-05 15:05:14 +03:00
|
|
|
E135F5118E1D006F03AE2178 /* StreakLogicTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D230156A72AAFBBAB7626629 /* StreakLogicTests.swift */; };
|
2026-07-07 22:34:32 +03:00
|
|
|
E6FCFC0D429627201A52C616 /* AnalyticsStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 10BD058FC3875B6BD6B10C90 /* AnalyticsStore.swift */; };
|
2026-06-03 12:27:45 +03:00
|
|
|
ECEAA5CF7309E5993D12B571 /* AuthView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4AD014B7E3E30A34E18696A0 /* AuthView.swift */; };
|
2026-06-06 19:29:25 +03:00
|
|
|
EE7BCEB45B1F0B91C9D3C1D2 /* TaskContextMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = 670A8C6F8243EC973A1BC431 /* TaskContextMenu.swift */; };
|
2026-05-28 19:48:01 +03:00
|
|
|
EF03EC9F974B14D100DD5528 /* NotificationManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 93D045FE3DEB1D22D908A29F /* NotificationManager.swift */; };
|
2026-07-07 22:53:20 +03:00
|
|
|
FC3D7406706ADC96500AB764 /* AnalyticsCoordinatorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A0E5E96C6FC5DFC4E76452BF /* AnalyticsCoordinatorTests.swift */; };
|
Initial commit: KisaniCal iOS app
Task management, Eisenhower matrix, workout logging with persistence,
and calendar with 6 view modes (Month, List, Year, Week, 3 Day, Day).
Custom floating tab bar, dynamic calendar icon, and workout data seeded.
2026-05-27 02:09:44 +03:00
|
|
|
/* End PBXBuildFile section */
|
|
|
|
|
|
2026-06-03 12:27:45 +03:00
|
|
|
/* Begin PBXContainerItemProxy section */
|
Calendar: fix weekday-header/week-number alignment to firstWeekday + tests
Root cause: a data-integrity bug, not visual. The month grid is built from
.weekOfMonth (respects Calendar.current.firstWeekday), but the weekday header
was hardcoded Sunday-first ("S M T W T F S") and the week-number label was gated
on isSunday (weekday == 1). On any non-Sunday-first locale (or when the user sets
"Start Week On" = Monday) every column was mislabeled by one and the W-number
landed on the wrong column — e.g. June 1 2026 (a Monday) appearing under "S".
Fix:
- Extract pure, testable date math into CalendarGrid (monthGrid + weekdaySymbols).
- Header now derived from firstWeekday, so it always matches the grid.
- Week-number label gated on isWeekStart (weekday == firstWeekday), not Sunday.
- Document that week numbers are locale weekOfYear (consistent with the layout),
not ISO.
- gridDays() and the year-view mini-month dedupe to CalendarGrid.
Verification:
- New KisaniCalTests target with 9 tests, all passing on simulator: exact
Sunday-first June 2026 grid, header↔grid alignment for firstWeekday 1...7,
cell date identity, month navigation (May/Jul/Feb 2026 + Feb 2028 leap +
Dec 2026→Jan 2027), and event-day bucketing (all-day, late-night, midnight-
crossing) across 4 timezones.
- Verified in the running app: header S M T W T F S, May 31 in the Sunday
column, June 1 under Monday, June 24 (Wednesday) selected.
Adds a DEBUG-only KISANI_INITIAL_TAB launch env (compiled out of Release) used
to screenshot the calendar past the sign-in gate.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-24 19:24:49 +03:00
|
|
|
BF401FDD105729FB67DF02D6 /* PBXContainerItemProxy */ = {
|
|
|
|
|
isa = PBXContainerItemProxy;
|
|
|
|
|
containerPortal = AF6DE7A812408E3742522E90 /* Project object */;
|
|
|
|
|
proxyType = 1;
|
|
|
|
|
remoteGlobalIDString = 297C0C2BFBA10AB52D5D49CE;
|
|
|
|
|
remoteInfo = KisaniCal;
|
|
|
|
|
};
|
2026-06-03 12:27:45 +03:00
|
|
|
D04FCEE0BDF30AEFD1C969B6 /* PBXContainerItemProxy */ = {
|
|
|
|
|
isa = PBXContainerItemProxy;
|
|
|
|
|
containerPortal = AF6DE7A812408E3742522E90 /* Project object */;
|
|
|
|
|
proxyType = 1;
|
|
|
|
|
remoteGlobalIDString = 28B43516AD88946E21D9BFE0;
|
|
|
|
|
remoteInfo = KisaniCalWidgets;
|
|
|
|
|
};
|
|
|
|
|
/* End PBXContainerItemProxy section */
|
|
|
|
|
|
|
|
|
|
/* Begin PBXCopyFilesBuildPhase section */
|
|
|
|
|
B3BE3000B362E4DDC4EE9E76 /* Embed Foundation Extensions */ = {
|
|
|
|
|
isa = PBXCopyFilesBuildPhase;
|
|
|
|
|
buildActionMask = 2147483647;
|
|
|
|
|
dstPath = "";
|
|
|
|
|
dstSubfolderSpec = 13;
|
|
|
|
|
files = (
|
|
|
|
|
79FC1DF6762C6F02D01AB643 /* KisaniCalWidgets.appex in Embed Foundation Extensions */,
|
|
|
|
|
);
|
|
|
|
|
name = "Embed Foundation Extensions";
|
|
|
|
|
runOnlyForDeploymentPostprocessing = 0;
|
|
|
|
|
};
|
|
|
|
|
/* End PBXCopyFilesBuildPhase section */
|
|
|
|
|
|
Initial commit: KisaniCal iOS app
Task management, Eisenhower matrix, workout logging with persistence,
and calendar with 6 view modes (Month, List, Year, Week, 3 Day, Day).
Custom floating tab bar, dynamic calendar icon, and workout data seeded.
2026-05-27 02:09:44 +03:00
|
|
|
/* Begin PBXFileReference section */
|
|
|
|
|
001F67ADC72FBAEC03EB7E01 /* KisaniCalApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KisaniCalApp.swift; sourceTree = "<group>"; };
|
2026-06-03 12:27:45 +03:00
|
|
|
01A27D42E141DC056D32C1A3 /* TutorialManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TutorialManager.swift; sourceTree = "<group>"; };
|
analytics(engine): pure deterministic AnalyticsEngine + models + tests (KC-51 ph1)
Phase 1 of the analytics system (/goal): the framework-independent analysis
engine. Value-type models (MetricDelta, TrendResult, DaySample, WeeklyReport,
MonthlyReport, ...) and AnalyticsEngine with documented formulas (volume,
%change, consistency, trend) and honest degradation (nil/zero/tiny baseline,
new exercise, rest day, outliers via winsorize, unit-dimension compatibility,
divide-by-zero). Calendar math takes an injected Calendar (locale/firstWeekday/
timezone/DST-safe).
AnalyticsEngineTests: 35 XCTest cases. Independently verified by compiling the
engine with swiftc and running a 42-assertion harness — all pass. (Xcode test
target not runnable in this env; assertions mirror the XCTest file.)
Registered the new files via xcodegen. Logs KC-51 phase-1 progress in ISSUES.md.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-07 22:06:59 +03:00
|
|
|
0379128BF8B6C1CA7DF026D0 /* AnalyticsModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnalyticsModels.swift; sourceTree = "<group>"; };
|
2026-06-06 19:29:25 +03:00
|
|
|
0506183945D16EC443A69651 /* LiveActivityManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LiveActivityManager.swift; sourceTree = "<group>"; };
|
|
|
|
|
0513EB8C7F6B6853B9E93E09 /* TaskLiveActivity.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TaskLiveActivity.swift; sourceTree = "<group>"; };
|
2026-06-03 12:27:45 +03:00
|
|
|
0C96EC00F6B021DBA3CC1A79 /* ProfileSetupView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProfileSetupView.swift; sourceTree = "<group>"; };
|
2026-07-07 22:34:32 +03:00
|
|
|
0D6D6740721F01A74E404EB9 /* KisaniCalWidgets.appex */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = "wrapper.app-extension"; path = KisaniCalWidgets.appex; sourceTree = BUILT_PRODUCTS_DIR; };
|
Calendar: fix weekday-header/week-number alignment to firstWeekday + tests
Root cause: a data-integrity bug, not visual. The month grid is built from
.weekOfMonth (respects Calendar.current.firstWeekday), but the weekday header
was hardcoded Sunday-first ("S M T W T F S") and the week-number label was gated
on isSunday (weekday == 1). On any non-Sunday-first locale (or when the user sets
"Start Week On" = Monday) every column was mislabeled by one and the W-number
landed on the wrong column — e.g. June 1 2026 (a Monday) appearing under "S".
Fix:
- Extract pure, testable date math into CalendarGrid (monthGrid + weekdaySymbols).
- Header now derived from firstWeekday, so it always matches the grid.
- Week-number label gated on isWeekStart (weekday == firstWeekday), not Sunday.
- Document that week numbers are locale weekOfYear (consistent with the layout),
not ISO.
- gridDays() and the year-view mini-month dedupe to CalendarGrid.
Verification:
- New KisaniCalTests target with 9 tests, all passing on simulator: exact
Sunday-first June 2026 grid, header↔grid alignment for firstWeekday 1...7,
cell date identity, month navigation (May/Jul/Feb 2026 + Feb 2028 leap +
Dec 2026→Jan 2027), and event-day bucketing (all-day, late-night, midnight-
crossing) across 4 timezones.
- Verified in the running app: header S M T W T F S, May 31 in the Sunday
column, June 1 under Monday, June 24 (Wednesday) selected.
Adds a DEBUG-only KISANI_INITIAL_TAB launch env (compiled out of Release) used
to screenshot the calendar past the sign-in gate.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-24 19:24:49 +03:00
|
|
|
0FCB2077D9509CB5C0978E58 /* CalendarGrid.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CalendarGrid.swift; sourceTree = "<group>"; };
|
2026-05-28 19:48:01 +03:00
|
|
|
106EEF572C6F8990408329F0 /* OnboardingView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OnboardingView.swift; sourceTree = "<group>"; };
|
2026-07-07 22:34:32 +03:00
|
|
|
10BD058FC3875B6BD6B10C90 /* AnalyticsStore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnalyticsStore.swift; sourceTree = "<group>"; };
|
2026-06-03 12:27:45 +03:00
|
|
|
1AA7498EFED7692022F3E7E1 /* KisaniCal.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = KisaniCal.entitlements; sourceTree = "<group>"; };
|
2026-07-07 23:23:54 +03:00
|
|
|
1C6CEBCB6041EA41ED482F67 /* AnalyticsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnalyticsView.swift; sourceTree = "<group>"; };
|
2026-06-03 13:31:04 +03:00
|
|
|
208F82348DEBD9FF7B0DCF17 /* MyTasksWidget.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MyTasksWidget.swift; sourceTree = "<group>"; };
|
Initial commit: KisaniCal iOS app
Task management, Eisenhower matrix, workout logging with persistence,
and calendar with 6 view modes (Month, List, Year, Week, 3 Day, Day).
Custom floating tab bar, dynamic calendar icon, and workout data seeded.
2026-05-27 02:09:44 +03:00
|
|
|
20DAD771EFCC8B3B1DBD4DD6 /* WorkoutView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WorkoutView.swift; sourceTree = "<group>"; };
|
2026-07-07 22:34:32 +03:00
|
|
|
20E29A9264577A89891DAEC1 /* KisaniCalTests.xctest */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.cfbundle; path = KisaniCalTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
|
Initial commit: KisaniCal iOS app
Task management, Eisenhower matrix, workout logging with persistence,
and calendar with 6 view modes (Month, List, Year, Week, 3 Day, Day).
Custom floating tab bar, dynamic calendar icon, and workout data seeded.
2026-05-27 02:09:44 +03:00
|
|
|
23A4491BFA50721082024756 /* SharedComponents.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SharedComponents.swift; sourceTree = "<group>"; };
|
2026-05-30 02:38:15 +03:00
|
|
|
326B77A7B317A7DB44E13EA5 /* ShortcutHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShortcutHandler.swift; sourceTree = "<group>"; };
|
2026-06-16 23:50:37 +03:00
|
|
|
35FF274EFF2361B7F3D2D227 /* WenzaWatch.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = WenzaWatch.entitlements; sourceTree = "<group>"; };
|
2026-07-07 23:05:02 +03:00
|
|
|
3A22FCC3FA1A10F52415E5AF /* AnalyticsService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnalyticsService.swift; sourceTree = "<group>"; };
|
2026-07-07 22:34:32 +03:00
|
|
|
3E8855698633CC9A1172AEF1 /* AnalyticsStoreTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnalyticsStoreTests.swift; sourceTree = "<group>"; };
|
2026-06-03 12:27:45 +03:00
|
|
|
42650F655DB8B320C7C03929 /* KisaniCalWidgets.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KisaniCalWidgets.swift; sourceTree = "<group>"; };
|
|
|
|
|
429806CE1021C8DE2EB770CE /* WidgetViews.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WidgetViews.swift; sourceTree = "<group>"; };
|
|
|
|
|
449C34805DC6B2CB66886544 /* CloudSyncManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CloudSyncManager.swift; sourceTree = "<group>"; };
|
|
|
|
|
4AD014B7E3E30A34E18696A0 /* AuthView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AuthView.swift; sourceTree = "<group>"; };
|
Initial commit: KisaniCal iOS app
Task management, Eisenhower matrix, workout logging with persistence,
and calendar with 6 view modes (Month, List, Year, Week, 3 Day, Day).
Custom floating tab bar, dynamic calendar icon, and workout data seeded.
2026-05-27 02:09:44 +03:00
|
|
|
5722CC4B59E3939724142710 /* ExerciseModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExerciseModels.swift; sourceTree = "<group>"; };
|
|
|
|
|
57714B79AFFF60DA90EB86E3 /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = "<group>"; };
|
2026-06-03 12:27:45 +03:00
|
|
|
61BFF3BA28331A16D0ADE9D0 /* WidgetData.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WidgetData.swift; sourceTree = "<group>"; };
|
2026-06-06 19:29:25 +03:00
|
|
|
670A8C6F8243EC973A1BC431 /* TaskContextMenu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TaskContextMenu.swift; sourceTree = "<group>"; };
|
2026-07-05 15:05:14 +03:00
|
|
|
69F0950E6F31016C848B2A63 /* ActivityHistoryView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ActivityHistoryView.swift; sourceTree = "<group>"; };
|
2026-07-07 22:53:20 +03:00
|
|
|
713DAF7EA146A779E4AC1D1A /* AnalyticsAdapterTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnalyticsAdapterTests.swift; sourceTree = "<group>"; };
|
Initial commit: KisaniCal iOS app
Task management, Eisenhower matrix, workout logging with persistence,
and calendar with 6 view modes (Month, List, Year, Week, 3 Day, Day).
Custom floating tab bar, dynamic calendar icon, and workout data seeded.
2026-05-27 02:09:44 +03:00
|
|
|
72308FEE0226F45414C04DDD /* SettingsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsView.swift; sourceTree = "<group>"; };
|
|
|
|
|
72FDF9C8DD37134576356B89 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
|
Calendar: fix weekday-header/week-number alignment to firstWeekday + tests
Root cause: a data-integrity bug, not visual. The month grid is built from
.weekOfMonth (respects Calendar.current.firstWeekday), but the weekday header
was hardcoded Sunday-first ("S M T W T F S") and the week-number label was gated
on isSunday (weekday == 1). On any non-Sunday-first locale (or when the user sets
"Start Week On" = Monday) every column was mislabeled by one and the W-number
landed on the wrong column — e.g. June 1 2026 (a Monday) appearing under "S".
Fix:
- Extract pure, testable date math into CalendarGrid (monthGrid + weekdaySymbols).
- Header now derived from firstWeekday, so it always matches the grid.
- Week-number label gated on isWeekStart (weekday == firstWeekday), not Sunday.
- Document that week numbers are locale weekOfYear (consistent with the layout),
not ISO.
- gridDays() and the year-view mini-month dedupe to CalendarGrid.
Verification:
- New KisaniCalTests target with 9 tests, all passing on simulator: exact
Sunday-first June 2026 grid, header↔grid alignment for firstWeekday 1...7,
cell date identity, month navigation (May/Jul/Feb 2026 + Feb 2028 leap +
Dec 2026→Jan 2027), and event-day bucketing (all-day, late-night, midnight-
crossing) across 4 timezones.
- Verified in the running app: header S M T W T F S, May 31 in the Sunday
column, June 1 under Monday, June 24 (Wednesday) selected.
Adds a DEBUG-only KISANI_INITIAL_TAB launch env (compiled out of Release) used
to screenshot the calendar past the sign-in gate.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-24 19:24:49 +03:00
|
|
|
74FAA2B41FCEBC7E3F156F0F /* CalendarGridTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CalendarGridTests.swift; sourceTree = "<group>"; };
|
Initial commit: KisaniCal iOS app
Task management, Eisenhower matrix, workout logging with persistence,
and calendar with 6 view modes (Month, List, Year, Week, 3 Day, Day).
Custom floating tab bar, dynamic calendar icon, and workout data seeded.
2026-05-27 02:09:44 +03:00
|
|
|
768D4E314252E2A90A06CCF2 /* AddExerciseSheet.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AddExerciseSheet.swift; sourceTree = "<group>"; };
|
analytics(engine): pure deterministic AnalyticsEngine + models + tests (KC-51 ph1)
Phase 1 of the analytics system (/goal): the framework-independent analysis
engine. Value-type models (MetricDelta, TrendResult, DaySample, WeeklyReport,
MonthlyReport, ...) and AnalyticsEngine with documented formulas (volume,
%change, consistency, trend) and honest degradation (nil/zero/tiny baseline,
new exercise, rest day, outliers via winsorize, unit-dimension compatibility,
divide-by-zero). Calendar math takes an injected Calendar (locale/firstWeekday/
timezone/DST-safe).
AnalyticsEngineTests: 35 XCTest cases. Independently verified by compiling the
engine with swiftc and running a 42-assertion harness — all pass. (Xcode test
target not runnable in this env; assertions mirror the XCTest file.)
Registered the new files via xcodegen. Logs KC-51 phase-1 progress in ISSUES.md.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-07 22:06:59 +03:00
|
|
|
78EEE7568265196447E54D6B /* AnalyticsEngine.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnalyticsEngine.swift; sourceTree = "<group>"; };
|
2026-07-07 22:53:20 +03:00
|
|
|
7A32192C8620C6AB8499869F /* AnalyticsDeepLink.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnalyticsDeepLink.swift; sourceTree = "<group>"; };
|
2026-06-16 23:50:37 +03:00
|
|
|
7A9D47B284FD6A217AEF813B /* WenzaWatch.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = WenzaWatch.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
2026-06-24 19:48:00 +03:00
|
|
|
86906905A4FA7A2384B3E24E /* SpeechRecognizer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SpeechRecognizer.swift; sourceTree = "<group>"; };
|
2026-06-03 12:27:45 +03:00
|
|
|
89550F2CD19B950CCC6AD37F /* AuthManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AuthManager.swift; sourceTree = "<group>"; };
|
|
|
|
|
8DC8687EA2FBA9FB2EEE51C6 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = "<group>"; };
|
|
|
|
|
8E7FC6446D5C5B2A2D9387DA /* KisaniCalWidgets.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = KisaniCalWidgets.entitlements; sourceTree = "<group>"; };
|
2026-05-28 20:35:44 +03:00
|
|
|
9100804DB1E61EA882CC54DA /* FloatingTabState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FloatingTabState.swift; sourceTree = "<group>"; };
|
2026-06-06 19:29:25 +03:00
|
|
|
92824ED40ECD41EFD4F78BEC /* ISSUES.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = ISSUES.md; sourceTree = "<group>"; };
|
2026-05-28 19:48:01 +03:00
|
|
|
93D045FE3DEB1D22D908A29F /* NotificationManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationManager.swift; sourceTree = "<group>"; };
|
2026-06-24 21:02:57 +03:00
|
|
|
9BBF7B0464EE05D113396B93 /* NLRecurrenceParseTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NLRecurrenceParseTests.swift; sourceTree = "<group>"; };
|
2026-07-07 22:34:32 +03:00
|
|
|
9BD1F84B4F45B12CB9B9F1B2 /* KisaniCal.app */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.application; path = KisaniCal.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
analytics(engine): pure deterministic AnalyticsEngine + models + tests (KC-51 ph1)
Phase 1 of the analytics system (/goal): the framework-independent analysis
engine. Value-type models (MetricDelta, TrendResult, DaySample, WeeklyReport,
MonthlyReport, ...) and AnalyticsEngine with documented formulas (volume,
%change, consistency, trend) and honest degradation (nil/zero/tiny baseline,
new exercise, rest day, outliers via winsorize, unit-dimension compatibility,
divide-by-zero). Calendar math takes an injected Calendar (locale/firstWeekday/
timezone/DST-safe).
AnalyticsEngineTests: 35 XCTest cases. Independently verified by compiling the
engine with swiftc and running a 42-assertion harness — all pass. (Xcode test
target not runnable in this env; assertions mirror the XCTest file.)
Registered the new files via xcodegen. Logs KC-51 phase-1 progress in ISSUES.md.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-07 22:06:59 +03:00
|
|
|
9DEAB6A9224E02484292362A /* AnalyticsEngineTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnalyticsEngineTests.swift; sourceTree = "<group>"; };
|
2026-07-07 22:53:20 +03:00
|
|
|
A0E5E96C6FC5DFC4E76452BF /* AnalyticsCoordinatorTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnalyticsCoordinatorTests.swift; sourceTree = "<group>"; };
|
Initial commit: KisaniCal iOS app
Task management, Eisenhower matrix, workout logging with persistence,
and calendar with 6 view modes (Month, List, Year, Week, 3 Day, Day).
Custom floating tab bar, dynamic calendar icon, and workout data seeded.
2026-05-27 02:09:44 +03:00
|
|
|
ADF6CCD95A587E26E30F5712 /* CalendarView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CalendarView.swift; sourceTree = "<group>"; };
|
2026-06-03 12:27:45 +03:00
|
|
|
AF905C574F34B4EE51A8D21E /* AppGroup.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppGroup.swift; sourceTree = "<group>"; };
|
2026-06-16 23:50:37 +03:00
|
|
|
B4CFFDFE4653A9E901CEF28D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = "<group>"; };
|
Initial commit: KisaniCal iOS app
Task management, Eisenhower matrix, workout logging with persistence,
and calendar with 6 view modes (Month, List, Year, Week, 3 Day, Day).
Custom floating tab bar, dynamic calendar icon, and workout data seeded.
2026-05-27 02:09:44 +03:00
|
|
|
BC5E179A9189B0A8C3F856F6 /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = "<group>"; };
|
|
|
|
|
BD4A35C0E1270E2E15C03F23 /* DesignTokens.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DesignTokens.swift; sourceTree = "<group>"; };
|
2026-05-28 19:48:01 +03:00
|
|
|
BE2D50B4B4AC227BD21F4B60 /* SplashView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SplashView.swift; sourceTree = "<group>"; };
|
2026-06-07 12:20:41 +03:00
|
|
|
C5EF0E7944C7F0763B83BB0F /* LaunchScreen.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = LaunchScreen.storyboard; sourceTree = "<group>"; };
|
Initial commit: KisaniCal iOS app
Task management, Eisenhower matrix, workout logging with persistence,
and calendar with 6 view modes (Month, List, Year, Week, 3 Day, Day).
Custom floating tab bar, dynamic calendar icon, and workout data seeded.
2026-05-27 02:09:44 +03:00
|
|
|
C786EBC7DF879D64EB28165E /* TodayView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TodayView.swift; sourceTree = "<group>"; };
|
2026-07-05 15:05:14 +03:00
|
|
|
D230156A72AAFBBAB7626629 /* StreakLogicTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StreakLogicTests.swift; sourceTree = "<group>"; };
|
Initial commit: KisaniCal iOS app
Task management, Eisenhower matrix, workout logging with persistence,
and calendar with 6 view modes (Month, List, Year, Week, 3 Day, Day).
Custom floating tab bar, dynamic calendar icon, and workout data seeded.
2026-05-27 02:09:44 +03:00
|
|
|
D44530A77DF12A17E52AAF34 /* MatrixView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MatrixView.swift; sourceTree = "<group>"; };
|
2026-07-07 22:53:20 +03:00
|
|
|
D4FB8B5BFF3FF62728E9498A /* AnalyticsCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnalyticsCoordinator.swift; sourceTree = "<group>"; };
|
2026-06-24 20:59:43 +03:00
|
|
|
D72D757FA29923B6C150B5EE /* RecurrenceTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RecurrenceTests.swift; sourceTree = "<group>"; };
|
Initial commit: KisaniCal iOS app
Task management, Eisenhower matrix, workout logging with persistence,
and calendar with 6 view modes (Month, List, Year, Week, 3 Day, Day).
Custom floating tab bar, dynamic calendar icon, and workout data seeded.
2026-05-27 02:09:44 +03:00
|
|
|
DCC2AFB4FA765383740767CB /* TaskItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TaskItem.swift; sourceTree = "<group>"; };
|
2026-07-07 22:53:20 +03:00
|
|
|
E839E4F5E6272515C3EA14D7 /* WorkoutAnalyticsAdapter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WorkoutAnalyticsAdapter.swift; sourceTree = "<group>"; };
|
2026-06-15 19:53:14 +03:00
|
|
|
ED5DB5340BEB3EF7A78CA153 /* TodayMenuFeatures.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TodayMenuFeatures.swift; sourceTree = "<group>"; };
|
2026-06-03 12:27:45 +03:00
|
|
|
FA3D5289C5F93484E22DEB63 /* TutorialView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TutorialView.swift; sourceTree = "<group>"; };
|
|
|
|
|
FC17C7BA15BD2E84AE5F77CF /* EventCountdownWidget.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EventCountdownWidget.swift; sourceTree = "<group>"; };
|
2026-06-06 19:29:25 +03:00
|
|
|
FEEB07EB89E89383C32ADB34 /* TaskActivityAttributes.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TaskActivityAttributes.swift; sourceTree = "<group>"; };
|
2026-06-16 23:50:37 +03:00
|
|
|
FF528FCC224EF283F95851AD /* WenzaWatchApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WenzaWatchApp.swift; sourceTree = "<group>"; };
|
2026-06-03 12:27:45 +03:00
|
|
|
FF5AFD143B693B77D07FBDA4 /* HealthKitManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HealthKitManager.swift; sourceTree = "<group>"; };
|
Initial commit: KisaniCal iOS app
Task management, Eisenhower matrix, workout logging with persistence,
and calendar with 6 view modes (Month, List, Year, Week, 3 Day, Day).
Custom floating tab bar, dynamic calendar icon, and workout data seeded.
2026-05-27 02:09:44 +03:00
|
|
|
/* End PBXFileReference section */
|
|
|
|
|
|
|
|
|
|
/* Begin PBXGroup section */
|
Calendar: fix weekday-header/week-number alignment to firstWeekday + tests
Root cause: a data-integrity bug, not visual. The month grid is built from
.weekOfMonth (respects Calendar.current.firstWeekday), but the weekday header
was hardcoded Sunday-first ("S M T W T F S") and the week-number label was gated
on isSunday (weekday == 1). On any non-Sunday-first locale (or when the user sets
"Start Week On" = Monday) every column was mislabeled by one and the W-number
landed on the wrong column — e.g. June 1 2026 (a Monday) appearing under "S".
Fix:
- Extract pure, testable date math into CalendarGrid (monthGrid + weekdaySymbols).
- Header now derived from firstWeekday, so it always matches the grid.
- Week-number label gated on isWeekStart (weekday == firstWeekday), not Sunday.
- Document that week numbers are locale weekOfYear (consistent with the layout),
not ISO.
- gridDays() and the year-view mini-month dedupe to CalendarGrid.
Verification:
- New KisaniCalTests target with 9 tests, all passing on simulator: exact
Sunday-first June 2026 grid, header↔grid alignment for firstWeekday 1...7,
cell date identity, month navigation (May/Jul/Feb 2026 + Feb 2028 leap +
Dec 2026→Jan 2027), and event-day bucketing (all-day, late-night, midnight-
crossing) across 4 timezones.
- Verified in the running app: header S M T W T F S, May 31 in the Sunday
column, June 1 under Monday, June 24 (Wednesday) selected.
Adds a DEBUG-only KISANI_INITIAL_TAB launch env (compiled out of Release) used
to screenshot the calendar past the sign-in gate.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-24 19:24:49 +03:00
|
|
|
068B77B2F01C399C7A430292 /* KisaniCalTests */ = {
|
|
|
|
|
isa = PBXGroup;
|
|
|
|
|
children = (
|
2026-07-07 22:53:20 +03:00
|
|
|
713DAF7EA146A779E4AC1D1A /* AnalyticsAdapterTests.swift */,
|
|
|
|
|
A0E5E96C6FC5DFC4E76452BF /* AnalyticsCoordinatorTests.swift */,
|
analytics(engine): pure deterministic AnalyticsEngine + models + tests (KC-51 ph1)
Phase 1 of the analytics system (/goal): the framework-independent analysis
engine. Value-type models (MetricDelta, TrendResult, DaySample, WeeklyReport,
MonthlyReport, ...) and AnalyticsEngine with documented formulas (volume,
%change, consistency, trend) and honest degradation (nil/zero/tiny baseline,
new exercise, rest day, outliers via winsorize, unit-dimension compatibility,
divide-by-zero). Calendar math takes an injected Calendar (locale/firstWeekday/
timezone/DST-safe).
AnalyticsEngineTests: 35 XCTest cases. Independently verified by compiling the
engine with swiftc and running a 42-assertion harness — all pass. (Xcode test
target not runnable in this env; assertions mirror the XCTest file.)
Registered the new files via xcodegen. Logs KC-51 phase-1 progress in ISSUES.md.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-07 22:06:59 +03:00
|
|
|
9DEAB6A9224E02484292362A /* AnalyticsEngineTests.swift */,
|
2026-07-07 22:34:32 +03:00
|
|
|
3E8855698633CC9A1172AEF1 /* AnalyticsStoreTests.swift */,
|
Calendar: fix weekday-header/week-number alignment to firstWeekday + tests
Root cause: a data-integrity bug, not visual. The month grid is built from
.weekOfMonth (respects Calendar.current.firstWeekday), but the weekday header
was hardcoded Sunday-first ("S M T W T F S") and the week-number label was gated
on isSunday (weekday == 1). On any non-Sunday-first locale (or when the user sets
"Start Week On" = Monday) every column was mislabeled by one and the W-number
landed on the wrong column — e.g. June 1 2026 (a Monday) appearing under "S".
Fix:
- Extract pure, testable date math into CalendarGrid (monthGrid + weekdaySymbols).
- Header now derived from firstWeekday, so it always matches the grid.
- Week-number label gated on isWeekStart (weekday == firstWeekday), not Sunday.
- Document that week numbers are locale weekOfYear (consistent with the layout),
not ISO.
- gridDays() and the year-view mini-month dedupe to CalendarGrid.
Verification:
- New KisaniCalTests target with 9 tests, all passing on simulator: exact
Sunday-first June 2026 grid, header↔grid alignment for firstWeekday 1...7,
cell date identity, month navigation (May/Jul/Feb 2026 + Feb 2028 leap +
Dec 2026→Jan 2027), and event-day bucketing (all-day, late-night, midnight-
crossing) across 4 timezones.
- Verified in the running app: header S M T W T F S, May 31 in the Sunday
column, June 1 under Monday, June 24 (Wednesday) selected.
Adds a DEBUG-only KISANI_INITIAL_TAB launch env (compiled out of Release) used
to screenshot the calendar past the sign-in gate.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-24 19:24:49 +03:00
|
|
|
74FAA2B41FCEBC7E3F156F0F /* CalendarGridTests.swift */,
|
2026-06-24 21:02:57 +03:00
|
|
|
9BBF7B0464EE05D113396B93 /* NLRecurrenceParseTests.swift */,
|
2026-06-24 20:59:43 +03:00
|
|
|
D72D757FA29923B6C150B5EE /* RecurrenceTests.swift */,
|
2026-07-05 15:05:14 +03:00
|
|
|
D230156A72AAFBBAB7626629 /* StreakLogicTests.swift */,
|
Calendar: fix weekday-header/week-number alignment to firstWeekday + tests
Root cause: a data-integrity bug, not visual. The month grid is built from
.weekOfMonth (respects Calendar.current.firstWeekday), but the weekday header
was hardcoded Sunday-first ("S M T W T F S") and the week-number label was gated
on isSunday (weekday == 1). On any non-Sunday-first locale (or when the user sets
"Start Week On" = Monday) every column was mislabeled by one and the W-number
landed on the wrong column — e.g. June 1 2026 (a Monday) appearing under "S".
Fix:
- Extract pure, testable date math into CalendarGrid (monthGrid + weekdaySymbols).
- Header now derived from firstWeekday, so it always matches the grid.
- Week-number label gated on isWeekStart (weekday == firstWeekday), not Sunday.
- Document that week numbers are locale weekOfYear (consistent with the layout),
not ISO.
- gridDays() and the year-view mini-month dedupe to CalendarGrid.
Verification:
- New KisaniCalTests target with 9 tests, all passing on simulator: exact
Sunday-first June 2026 grid, header↔grid alignment for firstWeekday 1...7,
cell date identity, month navigation (May/Jul/Feb 2026 + Feb 2028 leap +
Dec 2026→Jan 2027), and event-day bucketing (all-day, late-night, midnight-
crossing) across 4 timezones.
- Verified in the running app: header S M T W T F S, May 31 in the Sunday
column, June 1 under Monday, June 24 (Wednesday) selected.
Adds a DEBUG-only KISANI_INITIAL_TAB launch env (compiled out of Release) used
to screenshot the calendar past the sign-in gate.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-24 19:24:49 +03:00
|
|
|
);
|
|
|
|
|
path = KisaniCalTests;
|
|
|
|
|
sourceTree = "<group>";
|
|
|
|
|
};
|
Initial commit: KisaniCal iOS app
Task management, Eisenhower matrix, workout logging with persistence,
and calendar with 6 view modes (Month, List, Year, Week, 3 Day, Day).
Custom floating tab bar, dynamic calendar icon, and workout data seeded.
2026-05-27 02:09:44 +03:00
|
|
|
21B93C269F283F11B415B18C /* Components */ = {
|
|
|
|
|
isa = PBXGroup;
|
|
|
|
|
children = (
|
2026-05-28 20:35:44 +03:00
|
|
|
9100804DB1E61EA882CC54DA /* FloatingTabState.swift */,
|
Initial commit: KisaniCal iOS app
Task management, Eisenhower matrix, workout logging with persistence,
and calendar with 6 view modes (Month, List, Year, Week, 3 Day, Day).
Custom floating tab bar, dynamic calendar icon, and workout data seeded.
2026-05-27 02:09:44 +03:00
|
|
|
23A4491BFA50721082024756 /* SharedComponents.swift */,
|
|
|
|
|
);
|
|
|
|
|
path = Components;
|
|
|
|
|
sourceTree = "<group>";
|
|
|
|
|
};
|
|
|
|
|
23CBCF100C5EF55E737379CA /* Models */ = {
|
|
|
|
|
isa = PBXGroup;
|
|
|
|
|
children = (
|
Calendar: fix weekday-header/week-number alignment to firstWeekday + tests
Root cause: a data-integrity bug, not visual. The month grid is built from
.weekOfMonth (respects Calendar.current.firstWeekday), but the weekday header
was hardcoded Sunday-first ("S M T W T F S") and the week-number label was gated
on isSunday (weekday == 1). On any non-Sunday-first locale (or when the user sets
"Start Week On" = Monday) every column was mislabeled by one and the W-number
landed on the wrong column — e.g. June 1 2026 (a Monday) appearing under "S".
Fix:
- Extract pure, testable date math into CalendarGrid (monthGrid + weekdaySymbols).
- Header now derived from firstWeekday, so it always matches the grid.
- Week-number label gated on isWeekStart (weekday == firstWeekday), not Sunday.
- Document that week numbers are locale weekOfYear (consistent with the layout),
not ISO.
- gridDays() and the year-view mini-month dedupe to CalendarGrid.
Verification:
- New KisaniCalTests target with 9 tests, all passing on simulator: exact
Sunday-first June 2026 grid, header↔grid alignment for firstWeekday 1...7,
cell date identity, month navigation (May/Jul/Feb 2026 + Feb 2028 leap +
Dec 2026→Jan 2027), and event-day bucketing (all-day, late-night, midnight-
crossing) across 4 timezones.
- Verified in the running app: header S M T W T F S, May 31 in the Sunday
column, June 1 under Monday, June 24 (Wednesday) selected.
Adds a DEBUG-only KISANI_INITIAL_TAB launch env (compiled out of Release) used
to screenshot the calendar past the sign-in gate.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-24 19:24:49 +03:00
|
|
|
0FCB2077D9509CB5C0978E58 /* CalendarGrid.swift */,
|
Initial commit: KisaniCal iOS app
Task management, Eisenhower matrix, workout logging with persistence,
and calendar with 6 view modes (Month, List, Year, Week, 3 Day, Day).
Custom floating tab bar, dynamic calendar icon, and workout data seeded.
2026-05-27 02:09:44 +03:00
|
|
|
5722CC4B59E3939724142710 /* ExerciseModels.swift */,
|
|
|
|
|
DCC2AFB4FA765383740767CB /* TaskItem.swift */,
|
|
|
|
|
);
|
|
|
|
|
path = Models;
|
|
|
|
|
sourceTree = "<group>";
|
|
|
|
|
};
|
2026-06-16 23:50:37 +03:00
|
|
|
48146B56E740528496663D47 /* WenzaWatch */ = {
|
|
|
|
|
isa = PBXGroup;
|
|
|
|
|
children = (
|
|
|
|
|
B4CFFDFE4653A9E901CEF28D /* Info.plist */,
|
|
|
|
|
35FF274EFF2361B7F3D2D227 /* WenzaWatch.entitlements */,
|
|
|
|
|
FF528FCC224EF283F95851AD /* WenzaWatchApp.swift */,
|
|
|
|
|
);
|
|
|
|
|
path = WenzaWatch;
|
|
|
|
|
sourceTree = "<group>";
|
|
|
|
|
};
|
Initial commit: KisaniCal iOS app
Task management, Eisenhower matrix, workout logging with persistence,
and calendar with 6 view modes (Month, List, Year, Week, 3 Day, Day).
Custom floating tab bar, dynamic calendar icon, and workout data seeded.
2026-05-27 02:09:44 +03:00
|
|
|
4D2F2B3472A5A6D99F2FFCD2 = {
|
|
|
|
|
isa = PBXGroup;
|
|
|
|
|
children = (
|
|
|
|
|
F70DA4746C68CD405435DAB6 /* KisaniCal */,
|
Calendar: fix weekday-header/week-number alignment to firstWeekday + tests
Root cause: a data-integrity bug, not visual. The month grid is built from
.weekOfMonth (respects Calendar.current.firstWeekday), but the weekday header
was hardcoded Sunday-first ("S M T W T F S") and the week-number label was gated
on isSunday (weekday == 1). On any non-Sunday-first locale (or when the user sets
"Start Week On" = Monday) every column was mislabeled by one and the W-number
landed on the wrong column — e.g. June 1 2026 (a Monday) appearing under "S".
Fix:
- Extract pure, testable date math into CalendarGrid (monthGrid + weekdaySymbols).
- Header now derived from firstWeekday, so it always matches the grid.
- Week-number label gated on isWeekStart (weekday == firstWeekday), not Sunday.
- Document that week numbers are locale weekOfYear (consistent with the layout),
not ISO.
- gridDays() and the year-view mini-month dedupe to CalendarGrid.
Verification:
- New KisaniCalTests target with 9 tests, all passing on simulator: exact
Sunday-first June 2026 grid, header↔grid alignment for firstWeekday 1...7,
cell date identity, month navigation (May/Jul/Feb 2026 + Feb 2028 leap +
Dec 2026→Jan 2027), and event-day bucketing (all-day, late-night, midnight-
crossing) across 4 timezones.
- Verified in the running app: header S M T W T F S, May 31 in the Sunday
column, June 1 under Monday, June 24 (Wednesday) selected.
Adds a DEBUG-only KISANI_INITIAL_TAB launch env (compiled out of Release) used
to screenshot the calendar past the sign-in gate.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-24 19:24:49 +03:00
|
|
|
068B77B2F01C399C7A430292 /* KisaniCalTests */,
|
2026-06-03 12:27:45 +03:00
|
|
|
E8D727EEA0C3A4B8006FB087 /* KisaniCalWidgets */,
|
2026-06-16 23:50:37 +03:00
|
|
|
48146B56E740528496663D47 /* WenzaWatch */,
|
Initial commit: KisaniCal iOS app
Task management, Eisenhower matrix, workout logging with persistence,
and calendar with 6 view modes (Month, List, Year, Week, 3 Day, Day).
Custom floating tab bar, dynamic calendar icon, and workout data seeded.
2026-05-27 02:09:44 +03:00
|
|
|
51BD1B5DEDE9FAD9CA2FF6DA /* Products */,
|
|
|
|
|
);
|
|
|
|
|
sourceTree = "<group>";
|
|
|
|
|
};
|
|
|
|
|
51BD1B5DEDE9FAD9CA2FF6DA /* Products */ = {
|
|
|
|
|
isa = PBXGroup;
|
|
|
|
|
children = (
|
|
|
|
|
9BD1F84B4F45B12CB9B9F1B2 /* KisaniCal.app */,
|
Calendar: fix weekday-header/week-number alignment to firstWeekday + tests
Root cause: a data-integrity bug, not visual. The month grid is built from
.weekOfMonth (respects Calendar.current.firstWeekday), but the weekday header
was hardcoded Sunday-first ("S M T W T F S") and the week-number label was gated
on isSunday (weekday == 1). On any non-Sunday-first locale (or when the user sets
"Start Week On" = Monday) every column was mislabeled by one and the W-number
landed on the wrong column — e.g. June 1 2026 (a Monday) appearing under "S".
Fix:
- Extract pure, testable date math into CalendarGrid (monthGrid + weekdaySymbols).
- Header now derived from firstWeekday, so it always matches the grid.
- Week-number label gated on isWeekStart (weekday == firstWeekday), not Sunday.
- Document that week numbers are locale weekOfYear (consistent with the layout),
not ISO.
- gridDays() and the year-view mini-month dedupe to CalendarGrid.
Verification:
- New KisaniCalTests target with 9 tests, all passing on simulator: exact
Sunday-first June 2026 grid, header↔grid alignment for firstWeekday 1...7,
cell date identity, month navigation (May/Jul/Feb 2026 + Feb 2028 leap +
Dec 2026→Jan 2027), and event-day bucketing (all-day, late-night, midnight-
crossing) across 4 timezones.
- Verified in the running app: header S M T W T F S, May 31 in the Sunday
column, June 1 under Monday, June 24 (Wednesday) selected.
Adds a DEBUG-only KISANI_INITIAL_TAB launch env (compiled out of Release) used
to screenshot the calendar past the sign-in gate.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-24 19:24:49 +03:00
|
|
|
20E29A9264577A89891DAEC1 /* KisaniCalTests.xctest */,
|
2026-06-03 12:27:45 +03:00
|
|
|
0D6D6740721F01A74E404EB9 /* KisaniCalWidgets.appex */,
|
2026-06-16 23:50:37 +03:00
|
|
|
7A9D47B284FD6A217AEF813B /* WenzaWatch.app */,
|
Initial commit: KisaniCal iOS app
Task management, Eisenhower matrix, workout logging with persistence,
and calendar with 6 view modes (Month, List, Year, Week, 3 Day, Day).
Custom floating tab bar, dynamic calendar icon, and workout data seeded.
2026-05-27 02:09:44 +03:00
|
|
|
);
|
|
|
|
|
name = Products;
|
|
|
|
|
sourceTree = "<group>";
|
|
|
|
|
};
|
|
|
|
|
5E9A0E064E153429180400E6 /* Views */ = {
|
|
|
|
|
isa = PBXGroup;
|
|
|
|
|
children = (
|
2026-07-05 15:05:14 +03:00
|
|
|
69F0950E6F31016C848B2A63 /* ActivityHistoryView.swift */,
|
Initial commit: KisaniCal iOS app
Task management, Eisenhower matrix, workout logging with persistence,
and calendar with 6 view modes (Month, List, Year, Week, 3 Day, Day).
Custom floating tab bar, dynamic calendar icon, and workout data seeded.
2026-05-27 02:09:44 +03:00
|
|
|
768D4E314252E2A90A06CCF2 /* AddExerciseSheet.swift */,
|
2026-07-07 23:23:54 +03:00
|
|
|
1C6CEBCB6041EA41ED482F67 /* AnalyticsView.swift */,
|
2026-06-03 12:27:45 +03:00
|
|
|
4AD014B7E3E30A34E18696A0 /* AuthView.swift */,
|
Initial commit: KisaniCal iOS app
Task management, Eisenhower matrix, workout logging with persistence,
and calendar with 6 view modes (Month, List, Year, Week, 3 Day, Day).
Custom floating tab bar, dynamic calendar icon, and workout data seeded.
2026-05-27 02:09:44 +03:00
|
|
|
ADF6CCD95A587E26E30F5712 /* CalendarView.swift */,
|
|
|
|
|
D44530A77DF12A17E52AAF34 /* MatrixView.swift */,
|
2026-05-28 19:48:01 +03:00
|
|
|
106EEF572C6F8990408329F0 /* OnboardingView.swift */,
|
2026-06-03 12:27:45 +03:00
|
|
|
0C96EC00F6B021DBA3CC1A79 /* ProfileSetupView.swift */,
|
Initial commit: KisaniCal iOS app
Task management, Eisenhower matrix, workout logging with persistence,
and calendar with 6 view modes (Month, List, Year, Week, 3 Day, Day).
Custom floating tab bar, dynamic calendar icon, and workout data seeded.
2026-05-27 02:09:44 +03:00
|
|
|
72308FEE0226F45414C04DDD /* SettingsView.swift */,
|
2026-05-28 19:48:01 +03:00
|
|
|
BE2D50B4B4AC227BD21F4B60 /* SplashView.swift */,
|
2026-06-06 19:29:25 +03:00
|
|
|
670A8C6F8243EC973A1BC431 /* TaskContextMenu.swift */,
|
2026-06-15 19:53:14 +03:00
|
|
|
ED5DB5340BEB3EF7A78CA153 /* TodayMenuFeatures.swift */,
|
Initial commit: KisaniCal iOS app
Task management, Eisenhower matrix, workout logging with persistence,
and calendar with 6 view modes (Month, List, Year, Week, 3 Day, Day).
Custom floating tab bar, dynamic calendar icon, and workout data seeded.
2026-05-27 02:09:44 +03:00
|
|
|
C786EBC7DF879D64EB28165E /* TodayView.swift */,
|
2026-06-03 12:27:45 +03:00
|
|
|
FA3D5289C5F93484E22DEB63 /* TutorialView.swift */,
|
Initial commit: KisaniCal iOS app
Task management, Eisenhower matrix, workout logging with persistence,
and calendar with 6 view modes (Month, List, Year, Week, 3 Day, Day).
Custom floating tab bar, dynamic calendar icon, and workout data seeded.
2026-05-27 02:09:44 +03:00
|
|
|
20DAD771EFCC8B3B1DBD4DD6 /* WorkoutView.swift */,
|
|
|
|
|
);
|
|
|
|
|
path = Views;
|
|
|
|
|
sourceTree = "<group>";
|
|
|
|
|
};
|
|
|
|
|
9981C53A4E263A0DBC3DF194 /* Preview Content */ = {
|
|
|
|
|
isa = PBXGroup;
|
|
|
|
|
children = (
|
|
|
|
|
57714B79AFFF60DA90EB86E3 /* Preview Assets.xcassets */,
|
|
|
|
|
);
|
|
|
|
|
path = "Preview Content";
|
|
|
|
|
sourceTree = "<group>";
|
|
|
|
|
};
|
analytics(engine): pure deterministic AnalyticsEngine + models + tests (KC-51 ph1)
Phase 1 of the analytics system (/goal): the framework-independent analysis
engine. Value-type models (MetricDelta, TrendResult, DaySample, WeeklyReport,
MonthlyReport, ...) and AnalyticsEngine with documented formulas (volume,
%change, consistency, trend) and honest degradation (nil/zero/tiny baseline,
new exercise, rest day, outliers via winsorize, unit-dimension compatibility,
divide-by-zero). Calendar math takes an injected Calendar (locale/firstWeekday/
timezone/DST-safe).
AnalyticsEngineTests: 35 XCTest cases. Independently verified by compiling the
engine with swiftc and running a 42-assertion harness — all pass. (Xcode test
target not runnable in this env; assertions mirror the XCTest file.)
Registered the new files via xcodegen. Logs KC-51 phase-1 progress in ISSUES.md.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-07 22:06:59 +03:00
|
|
|
C7409CC354029293D424BEDA /* Analytics */ = {
|
|
|
|
|
isa = PBXGroup;
|
|
|
|
|
children = (
|
2026-07-07 22:53:20 +03:00
|
|
|
D4FB8B5BFF3FF62728E9498A /* AnalyticsCoordinator.swift */,
|
|
|
|
|
7A32192C8620C6AB8499869F /* AnalyticsDeepLink.swift */,
|
analytics(engine): pure deterministic AnalyticsEngine + models + tests (KC-51 ph1)
Phase 1 of the analytics system (/goal): the framework-independent analysis
engine. Value-type models (MetricDelta, TrendResult, DaySample, WeeklyReport,
MonthlyReport, ...) and AnalyticsEngine with documented formulas (volume,
%change, consistency, trend) and honest degradation (nil/zero/tiny baseline,
new exercise, rest day, outliers via winsorize, unit-dimension compatibility,
divide-by-zero). Calendar math takes an injected Calendar (locale/firstWeekday/
timezone/DST-safe).
AnalyticsEngineTests: 35 XCTest cases. Independently verified by compiling the
engine with swiftc and running a 42-assertion harness — all pass. (Xcode test
target not runnable in this env; assertions mirror the XCTest file.)
Registered the new files via xcodegen. Logs KC-51 phase-1 progress in ISSUES.md.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-07 22:06:59 +03:00
|
|
|
78EEE7568265196447E54D6B /* AnalyticsEngine.swift */,
|
|
|
|
|
0379128BF8B6C1CA7DF026D0 /* AnalyticsModels.swift */,
|
2026-07-07 23:05:02 +03:00
|
|
|
3A22FCC3FA1A10F52415E5AF /* AnalyticsService.swift */,
|
2026-07-07 22:34:32 +03:00
|
|
|
10BD058FC3875B6BD6B10C90 /* AnalyticsStore.swift */,
|
2026-07-07 22:53:20 +03:00
|
|
|
E839E4F5E6272515C3EA14D7 /* WorkoutAnalyticsAdapter.swift */,
|
analytics(engine): pure deterministic AnalyticsEngine + models + tests (KC-51 ph1)
Phase 1 of the analytics system (/goal): the framework-independent analysis
engine. Value-type models (MetricDelta, TrendResult, DaySample, WeeklyReport,
MonthlyReport, ...) and AnalyticsEngine with documented formulas (volume,
%change, consistency, trend) and honest degradation (nil/zero/tiny baseline,
new exercise, rest day, outliers via winsorize, unit-dimension compatibility,
divide-by-zero). Calendar math takes an injected Calendar (locale/firstWeekday/
timezone/DST-safe).
AnalyticsEngineTests: 35 XCTest cases. Independently verified by compiling the
engine with swiftc and running a 42-assertion harness — all pass. (Xcode test
target not runnable in this env; assertions mirror the XCTest file.)
Registered the new files via xcodegen. Logs KC-51 phase-1 progress in ISSUES.md.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-07 22:06:59 +03:00
|
|
|
);
|
|
|
|
|
path = Analytics;
|
|
|
|
|
sourceTree = "<group>";
|
|
|
|
|
};
|
Initial commit: KisaniCal iOS app
Task management, Eisenhower matrix, workout logging with persistence,
and calendar with 6 view modes (Month, List, Year, Week, 3 Day, Day).
Custom floating tab bar, dynamic calendar icon, and workout data seeded.
2026-05-27 02:09:44 +03:00
|
|
|
E0A03E79A679740978E61BF1 /* Theme */ = {
|
|
|
|
|
isa = PBXGroup;
|
|
|
|
|
children = (
|
|
|
|
|
BD4A35C0E1270E2E15C03F23 /* DesignTokens.swift */,
|
|
|
|
|
);
|
|
|
|
|
path = Theme;
|
|
|
|
|
sourceTree = "<group>";
|
|
|
|
|
};
|
2026-06-03 12:27:45 +03:00
|
|
|
E8D727EEA0C3A4B8006FB087 /* KisaniCalWidgets */ = {
|
|
|
|
|
isa = PBXGroup;
|
|
|
|
|
children = (
|
|
|
|
|
FC17C7BA15BD2E84AE5F77CF /* EventCountdownWidget.swift */,
|
|
|
|
|
8DC8687EA2FBA9FB2EEE51C6 /* Info.plist */,
|
|
|
|
|
8E7FC6446D5C5B2A2D9387DA /* KisaniCalWidgets.entitlements */,
|
|
|
|
|
42650F655DB8B320C7C03929 /* KisaniCalWidgets.swift */,
|
2026-06-03 13:31:04 +03:00
|
|
|
208F82348DEBD9FF7B0DCF17 /* MyTasksWidget.swift */,
|
2026-06-06 19:29:25 +03:00
|
|
|
0513EB8C7F6B6853B9E93E09 /* TaskLiveActivity.swift */,
|
2026-06-03 12:27:45 +03:00
|
|
|
61BFF3BA28331A16D0ADE9D0 /* WidgetData.swift */,
|
|
|
|
|
429806CE1021C8DE2EB770CE /* WidgetViews.swift */,
|
|
|
|
|
);
|
|
|
|
|
path = KisaniCalWidgets;
|
|
|
|
|
sourceTree = "<group>";
|
|
|
|
|
};
|
Initial commit: KisaniCal iOS app
Task management, Eisenhower matrix, workout logging with persistence,
and calendar with 6 view modes (Month, List, Year, Week, 3 Day, Day).
Custom floating tab bar, dynamic calendar icon, and workout data seeded.
2026-05-27 02:09:44 +03:00
|
|
|
F70DA4746C68CD405435DAB6 /* KisaniCal */ = {
|
|
|
|
|
isa = PBXGroup;
|
|
|
|
|
children = (
|
|
|
|
|
72FDF9C8DD37134576356B89 /* Assets.xcassets */,
|
|
|
|
|
BC5E179A9189B0A8C3F856F6 /* ContentView.swift */,
|
2026-06-06 19:29:25 +03:00
|
|
|
92824ED40ECD41EFD4F78BEC /* ISSUES.md */,
|
2026-06-03 12:27:45 +03:00
|
|
|
1AA7498EFED7692022F3E7E1 /* KisaniCal.entitlements */,
|
Initial commit: KisaniCal iOS app
Task management, Eisenhower matrix, workout logging with persistence,
and calendar with 6 view modes (Month, List, Year, Week, 3 Day, Day).
Custom floating tab bar, dynamic calendar icon, and workout data seeded.
2026-05-27 02:09:44 +03:00
|
|
|
001F67ADC72FBAEC03EB7E01 /* KisaniCalApp.swift */,
|
2026-06-07 12:20:41 +03:00
|
|
|
C5EF0E7944C7F0763B83BB0F /* LaunchScreen.storyboard */,
|
analytics(engine): pure deterministic AnalyticsEngine + models + tests (KC-51 ph1)
Phase 1 of the analytics system (/goal): the framework-independent analysis
engine. Value-type models (MetricDelta, TrendResult, DaySample, WeeklyReport,
MonthlyReport, ...) and AnalyticsEngine with documented formulas (volume,
%change, consistency, trend) and honest degradation (nil/zero/tiny baseline,
new exercise, rest day, outliers via winsorize, unit-dimension compatibility,
divide-by-zero). Calendar math takes an injected Calendar (locale/firstWeekday/
timezone/DST-safe).
AnalyticsEngineTests: 35 XCTest cases. Independently verified by compiling the
engine with swiftc and running a 42-assertion harness — all pass. (Xcode test
target not runnable in this env; assertions mirror the XCTest file.)
Registered the new files via xcodegen. Logs KC-51 phase-1 progress in ISSUES.md.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-07 22:06:59 +03:00
|
|
|
C7409CC354029293D424BEDA /* Analytics */,
|
Initial commit: KisaniCal iOS app
Task management, Eisenhower matrix, workout logging with persistence,
and calendar with 6 view modes (Month, List, Year, Week, 3 Day, Day).
Custom floating tab bar, dynamic calendar icon, and workout data seeded.
2026-05-27 02:09:44 +03:00
|
|
|
21B93C269F283F11B415B18C /* Components */,
|
2026-05-28 19:48:01 +03:00
|
|
|
FB9BF734B9E493EEB09ACE21 /* Managers */,
|
Initial commit: KisaniCal iOS app
Task management, Eisenhower matrix, workout logging with persistence,
and calendar with 6 view modes (Month, List, Year, Week, 3 Day, Day).
Custom floating tab bar, dynamic calendar icon, and workout data seeded.
2026-05-27 02:09:44 +03:00
|
|
|
23CBCF100C5EF55E737379CA /* Models */,
|
|
|
|
|
9981C53A4E263A0DBC3DF194 /* Preview Content */,
|
|
|
|
|
E0A03E79A679740978E61BF1 /* Theme */,
|
|
|
|
|
5E9A0E064E153429180400E6 /* Views */,
|
|
|
|
|
);
|
|
|
|
|
path = KisaniCal;
|
|
|
|
|
sourceTree = "<group>";
|
|
|
|
|
};
|
2026-05-28 19:48:01 +03:00
|
|
|
FB9BF734B9E493EEB09ACE21 /* Managers */ = {
|
|
|
|
|
isa = PBXGroup;
|
|
|
|
|
children = (
|
2026-06-03 12:27:45 +03:00
|
|
|
AF905C574F34B4EE51A8D21E /* AppGroup.swift */,
|
|
|
|
|
89550F2CD19B950CCC6AD37F /* AuthManager.swift */,
|
|
|
|
|
449C34805DC6B2CB66886544 /* CloudSyncManager.swift */,
|
|
|
|
|
FF5AFD143B693B77D07FBDA4 /* HealthKitManager.swift */,
|
2026-06-06 19:29:25 +03:00
|
|
|
0506183945D16EC443A69651 /* LiveActivityManager.swift */,
|
2026-05-28 19:48:01 +03:00
|
|
|
93D045FE3DEB1D22D908A29F /* NotificationManager.swift */,
|
2026-05-30 02:38:15 +03:00
|
|
|
326B77A7B317A7DB44E13EA5 /* ShortcutHandler.swift */,
|
2026-06-24 19:48:00 +03:00
|
|
|
86906905A4FA7A2384B3E24E /* SpeechRecognizer.swift */,
|
2026-06-06 19:29:25 +03:00
|
|
|
FEEB07EB89E89383C32ADB34 /* TaskActivityAttributes.swift */,
|
2026-06-03 12:27:45 +03:00
|
|
|
01A27D42E141DC056D32C1A3 /* TutorialManager.swift */,
|
2026-05-28 19:48:01 +03:00
|
|
|
);
|
|
|
|
|
path = Managers;
|
|
|
|
|
sourceTree = "<group>";
|
|
|
|
|
};
|
Initial commit: KisaniCal iOS app
Task management, Eisenhower matrix, workout logging with persistence,
and calendar with 6 view modes (Month, List, Year, Week, 3 Day, Day).
Custom floating tab bar, dynamic calendar icon, and workout data seeded.
2026-05-27 02:09:44 +03:00
|
|
|
/* End PBXGroup section */
|
|
|
|
|
|
|
|
|
|
/* Begin PBXNativeTarget section */
|
2026-06-03 12:27:45 +03:00
|
|
|
28B43516AD88946E21D9BFE0 /* KisaniCalWidgets */ = {
|
|
|
|
|
isa = PBXNativeTarget;
|
|
|
|
|
buildConfigurationList = 63EDFF56CC5312509E567D37 /* Build configuration list for PBXNativeTarget "KisaniCalWidgets" */;
|
|
|
|
|
buildPhases = (
|
|
|
|
|
B1361CC76F252F2A0F8D64CD /* Sources */,
|
|
|
|
|
);
|
|
|
|
|
buildRules = (
|
|
|
|
|
);
|
|
|
|
|
dependencies = (
|
|
|
|
|
);
|
|
|
|
|
name = KisaniCalWidgets;
|
|
|
|
|
packageProductDependencies = (
|
|
|
|
|
);
|
|
|
|
|
productName = KisaniCalWidgets;
|
|
|
|
|
productReference = 0D6D6740721F01A74E404EB9 /* KisaniCalWidgets.appex */;
|
|
|
|
|
productType = "com.apple.product-type.app-extension";
|
|
|
|
|
};
|
Initial commit: KisaniCal iOS app
Task management, Eisenhower matrix, workout logging with persistence,
and calendar with 6 view modes (Month, List, Year, Week, 3 Day, Day).
Custom floating tab bar, dynamic calendar icon, and workout data seeded.
2026-05-27 02:09:44 +03:00
|
|
|
297C0C2BFBA10AB52D5D49CE /* KisaniCal */ = {
|
|
|
|
|
isa = PBXNativeTarget;
|
|
|
|
|
buildConfigurationList = B60FDD2C88D1D33CF1EC02B3 /* Build configuration list for PBXNativeTarget "KisaniCal" */;
|
|
|
|
|
buildPhases = (
|
|
|
|
|
82EA49FE155821D424C46912 /* Sources */,
|
|
|
|
|
E1F1A3EE4469B851B972E4AE /* Resources */,
|
2026-06-03 12:27:45 +03:00
|
|
|
B3BE3000B362E4DDC4EE9E76 /* Embed Foundation Extensions */,
|
Initial commit: KisaniCal iOS app
Task management, Eisenhower matrix, workout logging with persistence,
and calendar with 6 view modes (Month, List, Year, Week, 3 Day, Day).
Custom floating tab bar, dynamic calendar icon, and workout data seeded.
2026-05-27 02:09:44 +03:00
|
|
|
);
|
|
|
|
|
buildRules = (
|
|
|
|
|
);
|
|
|
|
|
dependencies = (
|
2026-06-03 12:27:45 +03:00
|
|
|
8B1A9D9F3CF53BD8088AEC59 /* PBXTargetDependency */,
|
Initial commit: KisaniCal iOS app
Task management, Eisenhower matrix, workout logging with persistence,
and calendar with 6 view modes (Month, List, Year, Week, 3 Day, Day).
Custom floating tab bar, dynamic calendar icon, and workout data seeded.
2026-05-27 02:09:44 +03:00
|
|
|
);
|
|
|
|
|
name = KisaniCal;
|
|
|
|
|
packageProductDependencies = (
|
|
|
|
|
);
|
|
|
|
|
productName = KisaniCal;
|
|
|
|
|
productReference = 9BD1F84B4F45B12CB9B9F1B2 /* KisaniCal.app */;
|
|
|
|
|
productType = "com.apple.product-type.application";
|
|
|
|
|
};
|
2026-06-16 23:50:37 +03:00
|
|
|
403D989BDC6268361CFFB479 /* WenzaWatch */ = {
|
|
|
|
|
isa = PBXNativeTarget;
|
|
|
|
|
buildConfigurationList = 6F608724A2EAA63171766586 /* Build configuration list for PBXNativeTarget "WenzaWatch" */;
|
|
|
|
|
buildPhases = (
|
|
|
|
|
6DEFD550940764CA28D993CE /* Sources */,
|
|
|
|
|
);
|
|
|
|
|
buildRules = (
|
|
|
|
|
);
|
|
|
|
|
dependencies = (
|
|
|
|
|
);
|
|
|
|
|
name = WenzaWatch;
|
|
|
|
|
packageProductDependencies = (
|
|
|
|
|
);
|
|
|
|
|
productName = WenzaWatch;
|
|
|
|
|
productReference = 7A9D47B284FD6A217AEF813B /* WenzaWatch.app */;
|
|
|
|
|
productType = "com.apple.product-type.application";
|
|
|
|
|
};
|
Calendar: fix weekday-header/week-number alignment to firstWeekday + tests
Root cause: a data-integrity bug, not visual. The month grid is built from
.weekOfMonth (respects Calendar.current.firstWeekday), but the weekday header
was hardcoded Sunday-first ("S M T W T F S") and the week-number label was gated
on isSunday (weekday == 1). On any non-Sunday-first locale (or when the user sets
"Start Week On" = Monday) every column was mislabeled by one and the W-number
landed on the wrong column — e.g. June 1 2026 (a Monday) appearing under "S".
Fix:
- Extract pure, testable date math into CalendarGrid (monthGrid + weekdaySymbols).
- Header now derived from firstWeekday, so it always matches the grid.
- Week-number label gated on isWeekStart (weekday == firstWeekday), not Sunday.
- Document that week numbers are locale weekOfYear (consistent with the layout),
not ISO.
- gridDays() and the year-view mini-month dedupe to CalendarGrid.
Verification:
- New KisaniCalTests target with 9 tests, all passing on simulator: exact
Sunday-first June 2026 grid, header↔grid alignment for firstWeekday 1...7,
cell date identity, month navigation (May/Jul/Feb 2026 + Feb 2028 leap +
Dec 2026→Jan 2027), and event-day bucketing (all-day, late-night, midnight-
crossing) across 4 timezones.
- Verified in the running app: header S M T W T F S, May 31 in the Sunday
column, June 1 under Monday, June 24 (Wednesday) selected.
Adds a DEBUG-only KISANI_INITIAL_TAB launch env (compiled out of Release) used
to screenshot the calendar past the sign-in gate.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-24 19:24:49 +03:00
|
|
|
75535A64153951A3C35F75FC /* KisaniCalTests */ = {
|
|
|
|
|
isa = PBXNativeTarget;
|
|
|
|
|
buildConfigurationList = A0CF5E0496CC1077B2417541 /* Build configuration list for PBXNativeTarget "KisaniCalTests" */;
|
|
|
|
|
buildPhases = (
|
|
|
|
|
474D88E5A3251407875B5C24 /* Sources */,
|
|
|
|
|
);
|
|
|
|
|
buildRules = (
|
|
|
|
|
);
|
|
|
|
|
dependencies = (
|
|
|
|
|
EEF70F5652B35E046A79A5A3 /* PBXTargetDependency */,
|
|
|
|
|
);
|
|
|
|
|
name = KisaniCalTests;
|
|
|
|
|
packageProductDependencies = (
|
|
|
|
|
);
|
|
|
|
|
productName = KisaniCalTests;
|
|
|
|
|
productReference = 20E29A9264577A89891DAEC1 /* KisaniCalTests.xctest */;
|
|
|
|
|
productType = "com.apple.product-type.bundle.unit-test";
|
|
|
|
|
};
|
Initial commit: KisaniCal iOS app
Task management, Eisenhower matrix, workout logging with persistence,
and calendar with 6 view modes (Month, List, Year, Week, 3 Day, Day).
Custom floating tab bar, dynamic calendar icon, and workout data seeded.
2026-05-27 02:09:44 +03:00
|
|
|
/* End PBXNativeTarget section */
|
|
|
|
|
|
|
|
|
|
/* Begin PBXProject section */
|
|
|
|
|
AF6DE7A812408E3742522E90 /* Project object */ = {
|
|
|
|
|
isa = PBXProject;
|
|
|
|
|
attributes = {
|
|
|
|
|
BuildIndependentTargetsInParallel = YES;
|
2026-07-07 22:34:32 +03:00
|
|
|
LastUpgradeCheck = 1500;
|
Initial commit: KisaniCal iOS app
Task management, Eisenhower matrix, workout logging with persistence,
and calendar with 6 view modes (Month, List, Year, Week, 3 Day, Day).
Custom floating tab bar, dynamic calendar icon, and workout data seeded.
2026-05-27 02:09:44 +03:00
|
|
|
TargetAttributes = {
|
2026-06-03 12:27:45 +03:00
|
|
|
28B43516AD88946E21D9BFE0 = {
|
|
|
|
|
DevelopmentTeam = K8BLMMR883;
|
|
|
|
|
ProvisioningStyle = Automatic;
|
|
|
|
|
};
|
Initial commit: KisaniCal iOS app
Task management, Eisenhower matrix, workout logging with persistence,
and calendar with 6 view modes (Month, List, Year, Week, 3 Day, Day).
Custom floating tab bar, dynamic calendar icon, and workout data seeded.
2026-05-27 02:09:44 +03:00
|
|
|
297C0C2BFBA10AB52D5D49CE = {
|
2026-06-03 12:27:45 +03:00
|
|
|
DevelopmentTeam = K8BLMMR883;
|
Initial commit: KisaniCal iOS app
Task management, Eisenhower matrix, workout logging with persistence,
and calendar with 6 view modes (Month, List, Year, Week, 3 Day, Day).
Custom floating tab bar, dynamic calendar icon, and workout data seeded.
2026-05-27 02:09:44 +03:00
|
|
|
ProvisioningStyle = Automatic;
|
|
|
|
|
};
|
2026-06-16 23:50:37 +03:00
|
|
|
403D989BDC6268361CFFB479 = {
|
|
|
|
|
DevelopmentTeam = K8BLMMR883;
|
|
|
|
|
ProvisioningStyle = Automatic;
|
|
|
|
|
};
|
Calendar: fix weekday-header/week-number alignment to firstWeekday + tests
Root cause: a data-integrity bug, not visual. The month grid is built from
.weekOfMonth (respects Calendar.current.firstWeekday), but the weekday header
was hardcoded Sunday-first ("S M T W T F S") and the week-number label was gated
on isSunday (weekday == 1). On any non-Sunday-first locale (or when the user sets
"Start Week On" = Monday) every column was mislabeled by one and the W-number
landed on the wrong column — e.g. June 1 2026 (a Monday) appearing under "S".
Fix:
- Extract pure, testable date math into CalendarGrid (monthGrid + weekdaySymbols).
- Header now derived from firstWeekday, so it always matches the grid.
- Week-number label gated on isWeekStart (weekday == firstWeekday), not Sunday.
- Document that week numbers are locale weekOfYear (consistent with the layout),
not ISO.
- gridDays() and the year-view mini-month dedupe to CalendarGrid.
Verification:
- New KisaniCalTests target with 9 tests, all passing on simulator: exact
Sunday-first June 2026 grid, header↔grid alignment for firstWeekday 1...7,
cell date identity, month navigation (May/Jul/Feb 2026 + Feb 2028 leap +
Dec 2026→Jan 2027), and event-day bucketing (all-day, late-night, midnight-
crossing) across 4 timezones.
- Verified in the running app: header S M T W T F S, May 31 in the Sunday
column, June 1 under Monday, June 24 (Wednesday) selected.
Adds a DEBUG-only KISANI_INITIAL_TAB launch env (compiled out of Release) used
to screenshot the calendar past the sign-in gate.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-24 19:24:49 +03:00
|
|
|
75535A64153951A3C35F75FC = {
|
|
|
|
|
DevelopmentTeam = K8BLMMR883;
|
|
|
|
|
};
|
Initial commit: KisaniCal iOS app
Task management, Eisenhower matrix, workout logging with persistence,
and calendar with 6 view modes (Month, List, Year, Week, 3 Day, Day).
Custom floating tab bar, dynamic calendar icon, and workout data seeded.
2026-05-27 02:09:44 +03:00
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
buildConfigurationList = EF1C4F3BDA4AA7E008FC2CDE /* Build configuration list for PBXProject "KisaniCal" */;
|
|
|
|
|
developmentRegion = en;
|
|
|
|
|
hasScannedForEncodings = 0;
|
|
|
|
|
knownRegions = (
|
|
|
|
|
Base,
|
|
|
|
|
en,
|
|
|
|
|
);
|
|
|
|
|
mainGroup = 4D2F2B3472A5A6D99F2FFCD2;
|
|
|
|
|
minimizedProjectReferenceProxies = 1;
|
|
|
|
|
preferredProjectObjectVersion = 77;
|
|
|
|
|
productRefGroup = 51BD1B5DEDE9FAD9CA2FF6DA /* Products */;
|
|
|
|
|
projectDirPath = "";
|
|
|
|
|
projectRoot = "";
|
|
|
|
|
targets = (
|
|
|
|
|
297C0C2BFBA10AB52D5D49CE /* KisaniCal */,
|
Calendar: fix weekday-header/week-number alignment to firstWeekday + tests
Root cause: a data-integrity bug, not visual. The month grid is built from
.weekOfMonth (respects Calendar.current.firstWeekday), but the weekday header
was hardcoded Sunday-first ("S M T W T F S") and the week-number label was gated
on isSunday (weekday == 1). On any non-Sunday-first locale (or when the user sets
"Start Week On" = Monday) every column was mislabeled by one and the W-number
landed on the wrong column — e.g. June 1 2026 (a Monday) appearing under "S".
Fix:
- Extract pure, testable date math into CalendarGrid (monthGrid + weekdaySymbols).
- Header now derived from firstWeekday, so it always matches the grid.
- Week-number label gated on isWeekStart (weekday == firstWeekday), not Sunday.
- Document that week numbers are locale weekOfYear (consistent with the layout),
not ISO.
- gridDays() and the year-view mini-month dedupe to CalendarGrid.
Verification:
- New KisaniCalTests target with 9 tests, all passing on simulator: exact
Sunday-first June 2026 grid, header↔grid alignment for firstWeekday 1...7,
cell date identity, month navigation (May/Jul/Feb 2026 + Feb 2028 leap +
Dec 2026→Jan 2027), and event-day bucketing (all-day, late-night, midnight-
crossing) across 4 timezones.
- Verified in the running app: header S M T W T F S, May 31 in the Sunday
column, June 1 under Monday, June 24 (Wednesday) selected.
Adds a DEBUG-only KISANI_INITIAL_TAB launch env (compiled out of Release) used
to screenshot the calendar past the sign-in gate.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-24 19:24:49 +03:00
|
|
|
75535A64153951A3C35F75FC /* KisaniCalTests */,
|
2026-06-03 12:27:45 +03:00
|
|
|
28B43516AD88946E21D9BFE0 /* KisaniCalWidgets */,
|
2026-06-16 23:50:37 +03:00
|
|
|
403D989BDC6268361CFFB479 /* WenzaWatch */,
|
Initial commit: KisaniCal iOS app
Task management, Eisenhower matrix, workout logging with persistence,
and calendar with 6 view modes (Month, List, Year, Week, 3 Day, Day).
Custom floating tab bar, dynamic calendar icon, and workout data seeded.
2026-05-27 02:09:44 +03:00
|
|
|
);
|
|
|
|
|
};
|
|
|
|
|
/* End PBXProject section */
|
|
|
|
|
|
|
|
|
|
/* Begin PBXResourcesBuildPhase section */
|
|
|
|
|
E1F1A3EE4469B851B972E4AE /* Resources */ = {
|
|
|
|
|
isa = PBXResourcesBuildPhase;
|
|
|
|
|
buildActionMask = 2147483647;
|
|
|
|
|
files = (
|
|
|
|
|
3C793FD5DA00D3E9C0D51FEC /* Assets.xcassets in Resources */,
|
2026-06-06 19:29:25 +03:00
|
|
|
703E068364256D6F3F867961 /* ISSUES.md in Resources */,
|
2026-06-07 12:20:41 +03:00
|
|
|
45AA93D76970B39DB8BA6A5B /* LaunchScreen.storyboard in Resources */,
|
Initial commit: KisaniCal iOS app
Task management, Eisenhower matrix, workout logging with persistence,
and calendar with 6 view modes (Month, List, Year, Week, 3 Day, Day).
Custom floating tab bar, dynamic calendar icon, and workout data seeded.
2026-05-27 02:09:44 +03:00
|
|
|
7CEBC340BFA9238D121946AC /* Preview Assets.xcassets in Resources */,
|
|
|
|
|
);
|
|
|
|
|
runOnlyForDeploymentPostprocessing = 0;
|
|
|
|
|
};
|
|
|
|
|
/* End PBXResourcesBuildPhase section */
|
|
|
|
|
|
|
|
|
|
/* Begin PBXSourcesBuildPhase section */
|
Calendar: fix weekday-header/week-number alignment to firstWeekday + tests
Root cause: a data-integrity bug, not visual. The month grid is built from
.weekOfMonth (respects Calendar.current.firstWeekday), but the weekday header
was hardcoded Sunday-first ("S M T W T F S") and the week-number label was gated
on isSunday (weekday == 1). On any non-Sunday-first locale (or when the user sets
"Start Week On" = Monday) every column was mislabeled by one and the W-number
landed on the wrong column — e.g. June 1 2026 (a Monday) appearing under "S".
Fix:
- Extract pure, testable date math into CalendarGrid (monthGrid + weekdaySymbols).
- Header now derived from firstWeekday, so it always matches the grid.
- Week-number label gated on isWeekStart (weekday == firstWeekday), not Sunday.
- Document that week numbers are locale weekOfYear (consistent with the layout),
not ISO.
- gridDays() and the year-view mini-month dedupe to CalendarGrid.
Verification:
- New KisaniCalTests target with 9 tests, all passing on simulator: exact
Sunday-first June 2026 grid, header↔grid alignment for firstWeekday 1...7,
cell date identity, month navigation (May/Jul/Feb 2026 + Feb 2028 leap +
Dec 2026→Jan 2027), and event-day bucketing (all-day, late-night, midnight-
crossing) across 4 timezones.
- Verified in the running app: header S M T W T F S, May 31 in the Sunday
column, June 1 under Monday, June 24 (Wednesday) selected.
Adds a DEBUG-only KISANI_INITIAL_TAB launch env (compiled out of Release) used
to screenshot the calendar past the sign-in gate.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-24 19:24:49 +03:00
|
|
|
474D88E5A3251407875B5C24 /* Sources */ = {
|
|
|
|
|
isa = PBXSourcesBuildPhase;
|
|
|
|
|
buildActionMask = 2147483647;
|
|
|
|
|
files = (
|
2026-07-07 22:53:20 +03:00
|
|
|
B0B83389E72D6DF4563D3DD4 /* AnalyticsAdapterTests.swift in Sources */,
|
|
|
|
|
FC3D7406706ADC96500AB764 /* AnalyticsCoordinatorTests.swift in Sources */,
|
analytics(engine): pure deterministic AnalyticsEngine + models + tests (KC-51 ph1)
Phase 1 of the analytics system (/goal): the framework-independent analysis
engine. Value-type models (MetricDelta, TrendResult, DaySample, WeeklyReport,
MonthlyReport, ...) and AnalyticsEngine with documented formulas (volume,
%change, consistency, trend) and honest degradation (nil/zero/tiny baseline,
new exercise, rest day, outliers via winsorize, unit-dimension compatibility,
divide-by-zero). Calendar math takes an injected Calendar (locale/firstWeekday/
timezone/DST-safe).
AnalyticsEngineTests: 35 XCTest cases. Independently verified by compiling the
engine with swiftc and running a 42-assertion harness — all pass. (Xcode test
target not runnable in this env; assertions mirror the XCTest file.)
Registered the new files via xcodegen. Logs KC-51 phase-1 progress in ISSUES.md.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-07 22:06:59 +03:00
|
|
|
550E9A86BE36228C705E91C1 /* AnalyticsEngineTests.swift in Sources */,
|
2026-07-07 22:34:32 +03:00
|
|
|
87564C27F644ED9CFF1E517B /* AnalyticsStoreTests.swift in Sources */,
|
Calendar: fix weekday-header/week-number alignment to firstWeekday + tests
Root cause: a data-integrity bug, not visual. The month grid is built from
.weekOfMonth (respects Calendar.current.firstWeekday), but the weekday header
was hardcoded Sunday-first ("S M T W T F S") and the week-number label was gated
on isSunday (weekday == 1). On any non-Sunday-first locale (or when the user sets
"Start Week On" = Monday) every column was mislabeled by one and the W-number
landed on the wrong column — e.g. June 1 2026 (a Monday) appearing under "S".
Fix:
- Extract pure, testable date math into CalendarGrid (monthGrid + weekdaySymbols).
- Header now derived from firstWeekday, so it always matches the grid.
- Week-number label gated on isWeekStart (weekday == firstWeekday), not Sunday.
- Document that week numbers are locale weekOfYear (consistent with the layout),
not ISO.
- gridDays() and the year-view mini-month dedupe to CalendarGrid.
Verification:
- New KisaniCalTests target with 9 tests, all passing on simulator: exact
Sunday-first June 2026 grid, header↔grid alignment for firstWeekday 1...7,
cell date identity, month navigation (May/Jul/Feb 2026 + Feb 2028 leap +
Dec 2026→Jan 2027), and event-day bucketing (all-day, late-night, midnight-
crossing) across 4 timezones.
- Verified in the running app: header S M T W T F S, May 31 in the Sunday
column, June 1 under Monday, June 24 (Wednesday) selected.
Adds a DEBUG-only KISANI_INITIAL_TAB launch env (compiled out of Release) used
to screenshot the calendar past the sign-in gate.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-24 19:24:49 +03:00
|
|
|
6BCBF3902E38FBAA7348840D /* CalendarGridTests.swift in Sources */,
|
2026-06-24 21:02:57 +03:00
|
|
|
16FFC465D8646DED9A5C69D1 /* NLRecurrenceParseTests.swift in Sources */,
|
2026-06-24 20:59:43 +03:00
|
|
|
4FB79BBC1EE0F6C7EF844B02 /* RecurrenceTests.swift in Sources */,
|
2026-07-05 15:05:14 +03:00
|
|
|
E135F5118E1D006F03AE2178 /* StreakLogicTests.swift in Sources */,
|
Calendar: fix weekday-header/week-number alignment to firstWeekday + tests
Root cause: a data-integrity bug, not visual. The month grid is built from
.weekOfMonth (respects Calendar.current.firstWeekday), but the weekday header
was hardcoded Sunday-first ("S M T W T F S") and the week-number label was gated
on isSunday (weekday == 1). On any non-Sunday-first locale (or when the user sets
"Start Week On" = Monday) every column was mislabeled by one and the W-number
landed on the wrong column — e.g. June 1 2026 (a Monday) appearing under "S".
Fix:
- Extract pure, testable date math into CalendarGrid (monthGrid + weekdaySymbols).
- Header now derived from firstWeekday, so it always matches the grid.
- Week-number label gated on isWeekStart (weekday == firstWeekday), not Sunday.
- Document that week numbers are locale weekOfYear (consistent with the layout),
not ISO.
- gridDays() and the year-view mini-month dedupe to CalendarGrid.
Verification:
- New KisaniCalTests target with 9 tests, all passing on simulator: exact
Sunday-first June 2026 grid, header↔grid alignment for firstWeekday 1...7,
cell date identity, month navigation (May/Jul/Feb 2026 + Feb 2028 leap +
Dec 2026→Jan 2027), and event-day bucketing (all-day, late-night, midnight-
crossing) across 4 timezones.
- Verified in the running app: header S M T W T F S, May 31 in the Sunday
column, June 1 under Monday, June 24 (Wednesday) selected.
Adds a DEBUG-only KISANI_INITIAL_TAB launch env (compiled out of Release) used
to screenshot the calendar past the sign-in gate.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-24 19:24:49 +03:00
|
|
|
);
|
|
|
|
|
runOnlyForDeploymentPostprocessing = 0;
|
|
|
|
|
};
|
2026-06-16 23:50:37 +03:00
|
|
|
6DEFD550940764CA28D993CE /* Sources */ = {
|
|
|
|
|
isa = PBXSourcesBuildPhase;
|
|
|
|
|
buildActionMask = 2147483647;
|
|
|
|
|
files = (
|
|
|
|
|
8387093D19FB3397CCB8FEF8 /* WenzaWatchApp.swift in Sources */,
|
|
|
|
|
);
|
|
|
|
|
runOnlyForDeploymentPostprocessing = 0;
|
|
|
|
|
};
|
Initial commit: KisaniCal iOS app
Task management, Eisenhower matrix, workout logging with persistence,
and calendar with 6 view modes (Month, List, Year, Week, 3 Day, Day).
Custom floating tab bar, dynamic calendar icon, and workout data seeded.
2026-05-27 02:09:44 +03:00
|
|
|
82EA49FE155821D424C46912 /* Sources */ = {
|
|
|
|
|
isa = PBXSourcesBuildPhase;
|
|
|
|
|
buildActionMask = 2147483647;
|
|
|
|
|
files = (
|
2026-07-05 15:05:14 +03:00
|
|
|
D1F2189D03CFF743A534A0C6 /* ActivityHistoryView.swift in Sources */,
|
Initial commit: KisaniCal iOS app
Task management, Eisenhower matrix, workout logging with persistence,
and calendar with 6 view modes (Month, List, Year, Week, 3 Day, Day).
Custom floating tab bar, dynamic calendar icon, and workout data seeded.
2026-05-27 02:09:44 +03:00
|
|
|
A1DBC4D2F09C02B8CEE6449E /* AddExerciseSheet.swift in Sources */,
|
2026-07-07 22:53:20 +03:00
|
|
|
023A636FF533304DA5578D1C /* AnalyticsCoordinator.swift in Sources */,
|
|
|
|
|
B39F302F10FA4899AA0A5BAC /* AnalyticsDeepLink.swift in Sources */,
|
analytics(engine): pure deterministic AnalyticsEngine + models + tests (KC-51 ph1)
Phase 1 of the analytics system (/goal): the framework-independent analysis
engine. Value-type models (MetricDelta, TrendResult, DaySample, WeeklyReport,
MonthlyReport, ...) and AnalyticsEngine with documented formulas (volume,
%change, consistency, trend) and honest degradation (nil/zero/tiny baseline,
new exercise, rest day, outliers via winsorize, unit-dimension compatibility,
divide-by-zero). Calendar math takes an injected Calendar (locale/firstWeekday/
timezone/DST-safe).
AnalyticsEngineTests: 35 XCTest cases. Independently verified by compiling the
engine with swiftc and running a 42-assertion harness — all pass. (Xcode test
target not runnable in this env; assertions mirror the XCTest file.)
Registered the new files via xcodegen. Logs KC-51 phase-1 progress in ISSUES.md.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-07 22:06:59 +03:00
|
|
|
152AECD42FCF554C582E2DEA /* AnalyticsEngine.swift in Sources */,
|
|
|
|
|
42E3B90A981E75FFC10C221F /* AnalyticsModels.swift in Sources */,
|
2026-07-07 23:05:02 +03:00
|
|
|
5F91DDE0B64C8AE1F142F434 /* AnalyticsService.swift in Sources */,
|
2026-07-07 22:34:32 +03:00
|
|
|
E6FCFC0D429627201A52C616 /* AnalyticsStore.swift in Sources */,
|
2026-07-07 23:23:54 +03:00
|
|
|
9AA3E4808E88CA639BF3F28B /* AnalyticsView.swift in Sources */,
|
2026-06-03 12:27:45 +03:00
|
|
|
2CD2313EDC4BFCE6E89C6787 /* AppGroup.swift in Sources */,
|
|
|
|
|
3B57EA3600AFE975850DF39A /* AuthManager.swift in Sources */,
|
|
|
|
|
ECEAA5CF7309E5993D12B571 /* AuthView.swift in Sources */,
|
Calendar: fix weekday-header/week-number alignment to firstWeekday + tests
Root cause: a data-integrity bug, not visual. The month grid is built from
.weekOfMonth (respects Calendar.current.firstWeekday), but the weekday header
was hardcoded Sunday-first ("S M T W T F S") and the week-number label was gated
on isSunday (weekday == 1). On any non-Sunday-first locale (or when the user sets
"Start Week On" = Monday) every column was mislabeled by one and the W-number
landed on the wrong column — e.g. June 1 2026 (a Monday) appearing under "S".
Fix:
- Extract pure, testable date math into CalendarGrid (monthGrid + weekdaySymbols).
- Header now derived from firstWeekday, so it always matches the grid.
- Week-number label gated on isWeekStart (weekday == firstWeekday), not Sunday.
- Document that week numbers are locale weekOfYear (consistent with the layout),
not ISO.
- gridDays() and the year-view mini-month dedupe to CalendarGrid.
Verification:
- New KisaniCalTests target with 9 tests, all passing on simulator: exact
Sunday-first June 2026 grid, header↔grid alignment for firstWeekday 1...7,
cell date identity, month navigation (May/Jul/Feb 2026 + Feb 2028 leap +
Dec 2026→Jan 2027), and event-day bucketing (all-day, late-night, midnight-
crossing) across 4 timezones.
- Verified in the running app: header S M T W T F S, May 31 in the Sunday
column, June 1 under Monday, June 24 (Wednesday) selected.
Adds a DEBUG-only KISANI_INITIAL_TAB launch env (compiled out of Release) used
to screenshot the calendar past the sign-in gate.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-24 19:24:49 +03:00
|
|
|
A292B0492135BA40F6B6A951 /* CalendarGrid.swift in Sources */,
|
Initial commit: KisaniCal iOS app
Task management, Eisenhower matrix, workout logging with persistence,
and calendar with 6 view modes (Month, List, Year, Week, 3 Day, Day).
Custom floating tab bar, dynamic calendar icon, and workout data seeded.
2026-05-27 02:09:44 +03:00
|
|
|
9070521B1D36A5551976C275 /* CalendarView.swift in Sources */,
|
2026-06-03 12:27:45 +03:00
|
|
|
06CA0F336E64D9F6D56F7472 /* CloudSyncManager.swift in Sources */,
|
Initial commit: KisaniCal iOS app
Task management, Eisenhower matrix, workout logging with persistence,
and calendar with 6 view modes (Month, List, Year, Week, 3 Day, Day).
Custom floating tab bar, dynamic calendar icon, and workout data seeded.
2026-05-27 02:09:44 +03:00
|
|
|
13E4B9854F595394FC9D5912 /* ContentView.swift in Sources */,
|
|
|
|
|
A9FF93259AE8FF0ABF69D71A /* DesignTokens.swift in Sources */,
|
|
|
|
|
1A22EE21460821170E44B1DF /* ExerciseModels.swift in Sources */,
|
2026-05-28 20:35:44 +03:00
|
|
|
CBE7295BF5ADE08FE93AFAAF /* FloatingTabState.swift in Sources */,
|
2026-06-03 12:27:45 +03:00
|
|
|
BD0DB4B0AA8A63D124EDFF2C /* HealthKitManager.swift in Sources */,
|
Initial commit: KisaniCal iOS app
Task management, Eisenhower matrix, workout logging with persistence,
and calendar with 6 view modes (Month, List, Year, Week, 3 Day, Day).
Custom floating tab bar, dynamic calendar icon, and workout data seeded.
2026-05-27 02:09:44 +03:00
|
|
|
D591A72235A53D4038FBC2B4 /* KisaniCalApp.swift in Sources */,
|
2026-06-06 19:29:25 +03:00
|
|
|
754D3DE3CEB998E36E585A61 /* LiveActivityManager.swift in Sources */,
|
Initial commit: KisaniCal iOS app
Task management, Eisenhower matrix, workout logging with persistence,
and calendar with 6 view modes (Month, List, Year, Week, 3 Day, Day).
Custom floating tab bar, dynamic calendar icon, and workout data seeded.
2026-05-27 02:09:44 +03:00
|
|
|
BEAFF968632A34C70B11C5AC /* MatrixView.swift in Sources */,
|
2026-06-03 12:27:45 +03:00
|
|
|
EF03EC9F974B14D100DD5528 /* NotificationManager.swift in Sources */,
|
2026-05-28 19:48:01 +03:00
|
|
|
67CE1747E5DB3FDA79D0FDFD /* OnboardingView.swift in Sources */,
|
2026-06-03 12:27:45 +03:00
|
|
|
5EF4A5B6CE91ADA0CCF72D0D /* ProfileSetupView.swift in Sources */,
|
Initial commit: KisaniCal iOS app
Task management, Eisenhower matrix, workout logging with persistence,
and calendar with 6 view modes (Month, List, Year, Week, 3 Day, Day).
Custom floating tab bar, dynamic calendar icon, and workout data seeded.
2026-05-27 02:09:44 +03:00
|
|
|
A3B2D6622A2EE35C8D5A3C9B /* SettingsView.swift in Sources */,
|
|
|
|
|
8BE9D3D650B0F06169EC7048 /* SharedComponents.swift in Sources */,
|
2026-05-30 02:38:15 +03:00
|
|
|
497732557745AE9BDA44FB2F /* ShortcutHandler.swift in Sources */,
|
2026-06-24 19:48:00 +03:00
|
|
|
2885D000426D063F2125804C /* SpeechRecognizer.swift in Sources */,
|
2026-05-28 19:48:01 +03:00
|
|
|
6921CB73A3257502FF778381 /* SplashView.swift in Sources */,
|
2026-06-06 19:29:25 +03:00
|
|
|
32C63D81925FBFE51CAE1FB7 /* TaskActivityAttributes.swift in Sources */,
|
|
|
|
|
EE7BCEB45B1F0B91C9D3C1D2 /* TaskContextMenu.swift in Sources */,
|
Initial commit: KisaniCal iOS app
Task management, Eisenhower matrix, workout logging with persistence,
and calendar with 6 view modes (Month, List, Year, Week, 3 Day, Day).
Custom floating tab bar, dynamic calendar icon, and workout data seeded.
2026-05-27 02:09:44 +03:00
|
|
|
096804560A2F0A7D74E64780 /* TaskItem.swift in Sources */,
|
2026-06-15 19:53:14 +03:00
|
|
|
83EA218392952885C97144D1 /* TodayMenuFeatures.swift in Sources */,
|
Initial commit: KisaniCal iOS app
Task management, Eisenhower matrix, workout logging with persistence,
and calendar with 6 view modes (Month, List, Year, Week, 3 Day, Day).
Custom floating tab bar, dynamic calendar icon, and workout data seeded.
2026-05-27 02:09:44 +03:00
|
|
|
C79C33BE2802E81AA00175CC /* TodayView.swift in Sources */,
|
2026-06-03 12:27:45 +03:00
|
|
|
3AD7F62D231DCFFFFCB31649 /* TutorialManager.swift in Sources */,
|
|
|
|
|
8C9567A3DE3F63A1ECAE84D5 /* TutorialView.swift in Sources */,
|
2026-07-07 22:53:20 +03:00
|
|
|
C69A21EC244513185A1F59BD /* WorkoutAnalyticsAdapter.swift in Sources */,
|
Initial commit: KisaniCal iOS app
Task management, Eisenhower matrix, workout logging with persistence,
and calendar with 6 view modes (Month, List, Year, Week, 3 Day, Day).
Custom floating tab bar, dynamic calendar icon, and workout data seeded.
2026-05-27 02:09:44 +03:00
|
|
|
9E3F966F6B6AF2E4F8109E51 /* WorkoutView.swift in Sources */,
|
2026-05-28 19:48:01 +03:00
|
|
|
);
|
|
|
|
|
runOnlyForDeploymentPostprocessing = 0;
|
|
|
|
|
};
|
2026-06-03 12:27:45 +03:00
|
|
|
B1361CC76F252F2A0F8D64CD /* Sources */ = {
|
|
|
|
|
isa = PBXSourcesBuildPhase;
|
|
|
|
|
buildActionMask = 2147483647;
|
|
|
|
|
files = (
|
|
|
|
|
12E42CE8B8E535FAE6268A0C /* AppGroup.swift in Sources */,
|
|
|
|
|
552E2F85B01C9CC437D383B5 /* EventCountdownWidget.swift in Sources */,
|
|
|
|
|
C7767143D9617ECA04ED1935 /* KisaniCalWidgets.swift in Sources */,
|
2026-06-03 13:31:04 +03:00
|
|
|
3E9DE1CF20BAC479805DF940 /* MyTasksWidget.swift in Sources */,
|
2026-06-06 19:29:25 +03:00
|
|
|
8DA396DACE99DC4B7B4A460E /* TaskActivityAttributes.swift in Sources */,
|
|
|
|
|
205846F9651EDCE0D8207358 /* TaskLiveActivity.swift in Sources */,
|
2026-06-03 12:27:45 +03:00
|
|
|
AC0D814DA54D5EF5E25CEB99 /* WidgetData.swift in Sources */,
|
|
|
|
|
55F00C433F853F7B54F136B3 /* WidgetViews.swift in Sources */,
|
|
|
|
|
);
|
|
|
|
|
runOnlyForDeploymentPostprocessing = 0;
|
|
|
|
|
};
|
Initial commit: KisaniCal iOS app
Task management, Eisenhower matrix, workout logging with persistence,
and calendar with 6 view modes (Month, List, Year, Week, 3 Day, Day).
Custom floating tab bar, dynamic calendar icon, and workout data seeded.
2026-05-27 02:09:44 +03:00
|
|
|
/* End PBXSourcesBuildPhase section */
|
|
|
|
|
|
2026-06-03 12:27:45 +03:00
|
|
|
/* Begin PBXTargetDependency section */
|
|
|
|
|
8B1A9D9F3CF53BD8088AEC59 /* PBXTargetDependency */ = {
|
|
|
|
|
isa = PBXTargetDependency;
|
|
|
|
|
target = 28B43516AD88946E21D9BFE0 /* KisaniCalWidgets */;
|
|
|
|
|
targetProxy = D04FCEE0BDF30AEFD1C969B6 /* PBXContainerItemProxy */;
|
|
|
|
|
};
|
Calendar: fix weekday-header/week-number alignment to firstWeekday + tests
Root cause: a data-integrity bug, not visual. The month grid is built from
.weekOfMonth (respects Calendar.current.firstWeekday), but the weekday header
was hardcoded Sunday-first ("S M T W T F S") and the week-number label was gated
on isSunday (weekday == 1). On any non-Sunday-first locale (or when the user sets
"Start Week On" = Monday) every column was mislabeled by one and the W-number
landed on the wrong column — e.g. June 1 2026 (a Monday) appearing under "S".
Fix:
- Extract pure, testable date math into CalendarGrid (monthGrid + weekdaySymbols).
- Header now derived from firstWeekday, so it always matches the grid.
- Week-number label gated on isWeekStart (weekday == firstWeekday), not Sunday.
- Document that week numbers are locale weekOfYear (consistent with the layout),
not ISO.
- gridDays() and the year-view mini-month dedupe to CalendarGrid.
Verification:
- New KisaniCalTests target with 9 tests, all passing on simulator: exact
Sunday-first June 2026 grid, header↔grid alignment for firstWeekday 1...7,
cell date identity, month navigation (May/Jul/Feb 2026 + Feb 2028 leap +
Dec 2026→Jan 2027), and event-day bucketing (all-day, late-night, midnight-
crossing) across 4 timezones.
- Verified in the running app: header S M T W T F S, May 31 in the Sunday
column, June 1 under Monday, June 24 (Wednesday) selected.
Adds a DEBUG-only KISANI_INITIAL_TAB launch env (compiled out of Release) used
to screenshot the calendar past the sign-in gate.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-24 19:24:49 +03:00
|
|
|
EEF70F5652B35E046A79A5A3 /* PBXTargetDependency */ = {
|
|
|
|
|
isa = PBXTargetDependency;
|
|
|
|
|
target = 297C0C2BFBA10AB52D5D49CE /* KisaniCal */;
|
|
|
|
|
targetProxy = BF401FDD105729FB67DF02D6 /* PBXContainerItemProxy */;
|
|
|
|
|
};
|
2026-06-03 12:27:45 +03:00
|
|
|
/* End PBXTargetDependency section */
|
|
|
|
|
|
Initial commit: KisaniCal iOS app
Task management, Eisenhower matrix, workout logging with persistence,
and calendar with 6 view modes (Month, List, Year, Week, 3 Day, Day).
Custom floating tab bar, dynamic calendar icon, and workout data seeded.
2026-05-27 02:09:44 +03:00
|
|
|
/* Begin XCBuildConfiguration section */
|
|
|
|
|
0CEA6637F45C32A237FBA20D /* Release */ = {
|
|
|
|
|
isa = XCBuildConfiguration;
|
|
|
|
|
buildSettings = {
|
|
|
|
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
|
|
|
|
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
|
2026-06-01 01:16:19 +03:00
|
|
|
CODE_SIGN_ENTITLEMENTS = KisaniCal/KisaniCal.entitlements;
|
Initial commit: KisaniCal iOS app
Task management, Eisenhower matrix, workout logging with persistence,
and calendar with 6 view modes (Month, List, Year, Week, 3 Day, Day).
Custom floating tab bar, dynamic calendar icon, and workout data seeded.
2026-05-27 02:09:44 +03:00
|
|
|
CODE_SIGN_IDENTITY = "iPhone Developer";
|
|
|
|
|
CODE_SIGN_STYLE = Automatic;
|
|
|
|
|
ENABLE_PREVIEWS = YES;
|
|
|
|
|
GENERATE_INFOPLIST_FILE = YES;
|
Rebrand app to "Wenza" (display name + user-facing copy)
Renames the user-facing app to Wenza without changing identity:
- CFBundleDisplayName → "Wenza" (app) and "Wenza Widgets" (widget extension).
- Calendar/Health permission prompts now reference Wenza.
- In-app copy updated: sidebar title, Auth + Onboarding screens, Settings
about/help rows, feedback email subject, tutorial text, widget description.
Bundle identifier, App Group, UserDefaults storage keys, team ID, and the
internal Xcode target/project names are intentionally unchanged, so this stays
the same App Store app with no user data loss. App Store listing name must be
changed separately in App Store Connect.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-15 18:31:51 +03:00
|
|
|
INFOPLIST_KEY_CFBundleDisplayName = Wenza;
|
|
|
|
|
INFOPLIST_KEY_NSCalendarsFullAccessUsageDescription = "Wenza shows your calendar events alongside tasks.";
|
|
|
|
|
INFOPLIST_KEY_NSCalendarsUsageDescription = "Wenza shows your calendar events alongside tasks.";
|
|
|
|
|
INFOPLIST_KEY_NSHealthShareUsageDescription = "Wenza reads your steps, energy, heart rate, and workouts to show health stats on your dashboard.";
|
|
|
|
|
INFOPLIST_KEY_NSHealthUpdateUsageDescription = "Wenza saves workouts you complete to the Health app.";
|
2026-06-24 19:48:00 +03:00
|
|
|
INFOPLIST_KEY_NSMicrophoneUsageDescription = "Wenza uses your microphone to convert speech into task text.";
|
|
|
|
|
INFOPLIST_KEY_NSSpeechRecognitionUsageDescription = "Wenza uses speech recognition so you can add tasks by voice.";
|
2026-06-06 19:29:25 +03:00
|
|
|
INFOPLIST_KEY_NSSupportsLiveActivities = YES;
|
Initial commit: KisaniCal iOS app
Task management, Eisenhower matrix, workout logging with persistence,
and calendar with 6 view modes (Month, List, Year, Week, 3 Day, Day).
Custom floating tab bar, dynamic calendar icon, and workout data seeded.
2026-05-27 02:09:44 +03:00
|
|
|
INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES;
|
2026-06-07 12:20:41 +03:00
|
|
|
INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen;
|
Initial commit: KisaniCal iOS app
Task management, Eisenhower matrix, workout logging with persistence,
and calendar with 6 view modes (Month, List, Year, Week, 3 Day, Day).
Custom floating tab bar, dynamic calendar icon, and workout data seeded.
2026-05-27 02:09:44 +03:00
|
|
|
INFOPLIST_KEY_UIStatusBarStyle = UIStatusBarStyleDefault;
|
2026-06-21 03:03:28 +03:00
|
|
|
INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
|
|
|
|
|
INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
|
Initial commit: KisaniCal iOS app
Task management, Eisenhower matrix, workout logging with persistence,
and calendar with 6 view modes (Month, List, Year, Week, 3 Day, Day).
Custom floating tab bar, dynamic calendar icon, and workout data seeded.
2026-05-27 02:09:44 +03:00
|
|
|
IPHONEOS_DEPLOYMENT_TARGET = 16.0;
|
|
|
|
|
LD_RUNPATH_SEARCH_PATHS = (
|
|
|
|
|
"$(inherited)",
|
|
|
|
|
"@executable_path/Frameworks",
|
|
|
|
|
);
|
|
|
|
|
PRODUCT_BUNDLE_IDENTIFIER = com.kutesir.KisaniCal;
|
|
|
|
|
SDKROOT = iphoneos;
|
|
|
|
|
SWIFT_VERSION = 5.9;
|
|
|
|
|
TARGETED_DEVICE_FAMILY = "1,2";
|
|
|
|
|
};
|
|
|
|
|
name = Release;
|
|
|
|
|
};
|
Calendar: fix weekday-header/week-number alignment to firstWeekday + tests
Root cause: a data-integrity bug, not visual. The month grid is built from
.weekOfMonth (respects Calendar.current.firstWeekday), but the weekday header
was hardcoded Sunday-first ("S M T W T F S") and the week-number label was gated
on isSunday (weekday == 1). On any non-Sunday-first locale (or when the user sets
"Start Week On" = Monday) every column was mislabeled by one and the W-number
landed on the wrong column — e.g. June 1 2026 (a Monday) appearing under "S".
Fix:
- Extract pure, testable date math into CalendarGrid (monthGrid + weekdaySymbols).
- Header now derived from firstWeekday, so it always matches the grid.
- Week-number label gated on isWeekStart (weekday == firstWeekday), not Sunday.
- Document that week numbers are locale weekOfYear (consistent with the layout),
not ISO.
- gridDays() and the year-view mini-month dedupe to CalendarGrid.
Verification:
- New KisaniCalTests target with 9 tests, all passing on simulator: exact
Sunday-first June 2026 grid, header↔grid alignment for firstWeekday 1...7,
cell date identity, month navigation (May/Jul/Feb 2026 + Feb 2028 leap +
Dec 2026→Jan 2027), and event-day bucketing (all-day, late-night, midnight-
crossing) across 4 timezones.
- Verified in the running app: header S M T W T F S, May 31 in the Sunday
column, June 1 under Monday, June 24 (Wednesday) selected.
Adds a DEBUG-only KISANI_INITIAL_TAB launch env (compiled out of Release) used
to screenshot the calendar past the sign-in gate.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-24 19:24:49 +03:00
|
|
|
1092C43DF580318C5090D54B /* Release */ = {
|
|
|
|
|
isa = XCBuildConfiguration;
|
|
|
|
|
buildSettings = {
|
|
|
|
|
BUNDLE_LOADER = "$(TEST_HOST)";
|
|
|
|
|
GENERATE_INFOPLIST_FILE = YES;
|
|
|
|
|
IPHONEOS_DEPLOYMENT_TARGET = 16.0;
|
|
|
|
|
LD_RUNPATH_SEARCH_PATHS = (
|
|
|
|
|
"$(inherited)",
|
|
|
|
|
"@executable_path/Frameworks",
|
|
|
|
|
"@loader_path/Frameworks",
|
|
|
|
|
);
|
|
|
|
|
PRODUCT_BUNDLE_IDENTIFIER = com.kutesir.KisaniCalTests;
|
|
|
|
|
SDKROOT = iphoneos;
|
|
|
|
|
SWIFT_VERSION = 5.9;
|
|
|
|
|
TARGETED_DEVICE_FAMILY = "1,2";
|
|
|
|
|
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/KisaniCal.app/KisaniCal";
|
|
|
|
|
};
|
|
|
|
|
name = Release;
|
|
|
|
|
};
|
Initial commit: KisaniCal iOS app
Task management, Eisenhower matrix, workout logging with persistence,
and calendar with 6 view modes (Month, List, Year, Week, 3 Day, Day).
Custom floating tab bar, dynamic calendar icon, and workout data seeded.
2026-05-27 02:09:44 +03:00
|
|
|
20E23A89279CC26778E21856 /* Release */ = {
|
|
|
|
|
isa = XCBuildConfiguration;
|
|
|
|
|
buildSettings = {
|
|
|
|
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
|
|
|
|
CLANG_ANALYZER_NONNULL = YES;
|
|
|
|
|
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
|
|
|
|
|
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
|
|
|
|
|
CLANG_CXX_LIBRARY = "libc++";
|
|
|
|
|
CLANG_ENABLE_MODULES = YES;
|
|
|
|
|
CLANG_ENABLE_OBJC_ARC = YES;
|
|
|
|
|
CLANG_ENABLE_OBJC_WEAK = YES;
|
|
|
|
|
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
|
|
|
|
|
CLANG_WARN_BOOL_CONVERSION = YES;
|
|
|
|
|
CLANG_WARN_COMMA = YES;
|
|
|
|
|
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
|
|
|
|
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
|
|
|
|
|
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
|
|
|
|
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
|
|
|
|
|
CLANG_WARN_EMPTY_BODY = YES;
|
|
|
|
|
CLANG_WARN_ENUM_CONVERSION = YES;
|
|
|
|
|
CLANG_WARN_INFINITE_RECURSION = YES;
|
|
|
|
|
CLANG_WARN_INT_CONVERSION = YES;
|
|
|
|
|
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
|
|
|
|
|
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
|
|
|
|
|
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
|
|
|
|
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
|
|
|
|
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
|
|
|
|
|
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
|
|
|
|
CLANG_WARN_STRICT_PROTOTYPES = YES;
|
|
|
|
|
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
|
|
|
|
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
|
|
|
|
|
CLANG_WARN_UNREACHABLE_CODE = YES;
|
|
|
|
|
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
|
|
|
|
COPY_PHASE_STRIP = NO;
|
2026-06-25 01:10:36 +03:00
|
|
|
CURRENT_PROJECT_VERSION = 9;
|
Initial commit: KisaniCal iOS app
Task management, Eisenhower matrix, workout logging with persistence,
and calendar with 6 view modes (Month, List, Year, Week, 3 Day, Day).
Custom floating tab bar, dynamic calendar icon, and workout data seeded.
2026-05-27 02:09:44 +03:00
|
|
|
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
2026-06-01 01:16:19 +03:00
|
|
|
DEVELOPMENT_TEAM = K8BLMMR883;
|
Initial commit: KisaniCal iOS app
Task management, Eisenhower matrix, workout logging with persistence,
and calendar with 6 view modes (Month, List, Year, Week, 3 Day, Day).
Custom floating tab bar, dynamic calendar icon, and workout data seeded.
2026-05-27 02:09:44 +03:00
|
|
|
ENABLE_NS_ASSERTIONS = NO;
|
|
|
|
|
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
|
|
|
|
GCC_C_LANGUAGE_STANDARD = gnu11;
|
|
|
|
|
GCC_NO_COMMON_BLOCKS = YES;
|
|
|
|
|
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
|
|
|
|
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
|
|
|
|
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
|
|
|
|
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
|
|
|
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
|
|
|
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
|
|
|
|
IPHONEOS_DEPLOYMENT_TARGET = 16.0;
|
2026-06-10 10:29:17 +03:00
|
|
|
MARKETING_VERSION = 2.0;
|
Initial commit: KisaniCal iOS app
Task management, Eisenhower matrix, workout logging with persistence,
and calendar with 6 view modes (Month, List, Year, Week, 3 Day, Day).
Custom floating tab bar, dynamic calendar icon, and workout data seeded.
2026-05-27 02:09:44 +03:00
|
|
|
MTL_ENABLE_DEBUG_INFO = NO;
|
|
|
|
|
MTL_FAST_MATH = YES;
|
|
|
|
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
|
|
|
|
SWIFT_COMPILATION_MODE = wholemodule;
|
|
|
|
|
SWIFT_OPTIMIZATION_LEVEL = "-O";
|
|
|
|
|
SWIFT_VERSION = 5.0;
|
|
|
|
|
};
|
|
|
|
|
name = Release;
|
|
|
|
|
};
|
Calendar: fix weekday-header/week-number alignment to firstWeekday + tests
Root cause: a data-integrity bug, not visual. The month grid is built from
.weekOfMonth (respects Calendar.current.firstWeekday), but the weekday header
was hardcoded Sunday-first ("S M T W T F S") and the week-number label was gated
on isSunday (weekday == 1). On any non-Sunday-first locale (or when the user sets
"Start Week On" = Monday) every column was mislabeled by one and the W-number
landed on the wrong column — e.g. June 1 2026 (a Monday) appearing under "S".
Fix:
- Extract pure, testable date math into CalendarGrid (monthGrid + weekdaySymbols).
- Header now derived from firstWeekday, so it always matches the grid.
- Week-number label gated on isWeekStart (weekday == firstWeekday), not Sunday.
- Document that week numbers are locale weekOfYear (consistent with the layout),
not ISO.
- gridDays() and the year-view mini-month dedupe to CalendarGrid.
Verification:
- New KisaniCalTests target with 9 tests, all passing on simulator: exact
Sunday-first June 2026 grid, header↔grid alignment for firstWeekday 1...7,
cell date identity, month navigation (May/Jul/Feb 2026 + Feb 2028 leap +
Dec 2026→Jan 2027), and event-day bucketing (all-day, late-night, midnight-
crossing) across 4 timezones.
- Verified in the running app: header S M T W T F S, May 31 in the Sunday
column, June 1 under Monday, June 24 (Wednesday) selected.
Adds a DEBUG-only KISANI_INITIAL_TAB launch env (compiled out of Release) used
to screenshot the calendar past the sign-in gate.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-24 19:24:49 +03:00
|
|
|
4F022C5E53C268A49F093011 /* Debug */ = {
|
|
|
|
|
isa = XCBuildConfiguration;
|
|
|
|
|
buildSettings = {
|
|
|
|
|
BUNDLE_LOADER = "$(TEST_HOST)";
|
|
|
|
|
GENERATE_INFOPLIST_FILE = YES;
|
|
|
|
|
IPHONEOS_DEPLOYMENT_TARGET = 16.0;
|
|
|
|
|
LD_RUNPATH_SEARCH_PATHS = (
|
|
|
|
|
"$(inherited)",
|
|
|
|
|
"@executable_path/Frameworks",
|
|
|
|
|
"@loader_path/Frameworks",
|
|
|
|
|
);
|
|
|
|
|
PRODUCT_BUNDLE_IDENTIFIER = com.kutesir.KisaniCalTests;
|
|
|
|
|
SDKROOT = iphoneos;
|
|
|
|
|
SWIFT_VERSION = 5.9;
|
|
|
|
|
TARGETED_DEVICE_FAMILY = "1,2";
|
|
|
|
|
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/KisaniCal.app/KisaniCal";
|
|
|
|
|
};
|
|
|
|
|
name = Debug;
|
|
|
|
|
};
|
2026-06-03 12:27:45 +03:00
|
|
|
B60AA89AB378D4EA773989AA /* Release */ = {
|
|
|
|
|
isa = XCBuildConfiguration;
|
|
|
|
|
buildSettings = {
|
|
|
|
|
APPLICATION_EXTENSION_API_ONLY = YES;
|
|
|
|
|
CODE_SIGN_ENTITLEMENTS = KisaniCalWidgets/KisaniCalWidgets.entitlements;
|
|
|
|
|
CODE_SIGN_STYLE = Automatic;
|
|
|
|
|
GENERATE_INFOPLIST_FILE = NO;
|
|
|
|
|
INFOPLIST_FILE = KisaniCalWidgets/Info.plist;
|
|
|
|
|
IPHONEOS_DEPLOYMENT_TARGET = 18.0;
|
2026-07-07 22:34:32 +03:00
|
|
|
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks";
|
2026-06-03 12:27:45 +03:00
|
|
|
PRODUCT_BUNDLE_IDENTIFIER = com.kutesir.KisaniCal.KisaniCalWidgets;
|
|
|
|
|
SDKROOT = iphoneos;
|
|
|
|
|
SWIFT_VERSION = 5.9;
|
|
|
|
|
TARGETED_DEVICE_FAMILY = "1,2";
|
|
|
|
|
};
|
|
|
|
|
name = Release;
|
|
|
|
|
};
|
Initial commit: KisaniCal iOS app
Task management, Eisenhower matrix, workout logging with persistence,
and calendar with 6 view modes (Month, List, Year, Week, 3 Day, Day).
Custom floating tab bar, dynamic calendar icon, and workout data seeded.
2026-05-27 02:09:44 +03:00
|
|
|
BD527AA54887489CC665FB9D /* Debug */ = {
|
|
|
|
|
isa = XCBuildConfiguration;
|
|
|
|
|
buildSettings = {
|
|
|
|
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
|
|
|
|
CLANG_ANALYZER_NONNULL = YES;
|
|
|
|
|
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
|
|
|
|
|
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
|
|
|
|
|
CLANG_CXX_LIBRARY = "libc++";
|
|
|
|
|
CLANG_ENABLE_MODULES = YES;
|
|
|
|
|
CLANG_ENABLE_OBJC_ARC = YES;
|
|
|
|
|
CLANG_ENABLE_OBJC_WEAK = YES;
|
|
|
|
|
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
|
|
|
|
|
CLANG_WARN_BOOL_CONVERSION = YES;
|
|
|
|
|
CLANG_WARN_COMMA = YES;
|
|
|
|
|
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
|
|
|
|
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
|
|
|
|
|
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
|
|
|
|
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
|
|
|
|
|
CLANG_WARN_EMPTY_BODY = YES;
|
|
|
|
|
CLANG_WARN_ENUM_CONVERSION = YES;
|
|
|
|
|
CLANG_WARN_INFINITE_RECURSION = YES;
|
|
|
|
|
CLANG_WARN_INT_CONVERSION = YES;
|
|
|
|
|
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
|
|
|
|
|
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
|
|
|
|
|
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
|
|
|
|
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
|
|
|
|
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
|
|
|
|
|
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
|
|
|
|
CLANG_WARN_STRICT_PROTOTYPES = YES;
|
|
|
|
|
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
|
|
|
|
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
|
|
|
|
|
CLANG_WARN_UNREACHABLE_CODE = YES;
|
|
|
|
|
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
|
|
|
|
COPY_PHASE_STRIP = NO;
|
2026-06-25 01:10:36 +03:00
|
|
|
CURRENT_PROJECT_VERSION = 9;
|
Initial commit: KisaniCal iOS app
Task management, Eisenhower matrix, workout logging with persistence,
and calendar with 6 view modes (Month, List, Year, Week, 3 Day, Day).
Custom floating tab bar, dynamic calendar icon, and workout data seeded.
2026-05-27 02:09:44 +03:00
|
|
|
DEBUG_INFORMATION_FORMAT = dwarf;
|
2026-06-01 01:16:19 +03:00
|
|
|
DEVELOPMENT_TEAM = K8BLMMR883;
|
Initial commit: KisaniCal iOS app
Task management, Eisenhower matrix, workout logging with persistence,
and calendar with 6 view modes (Month, List, Year, Week, 3 Day, Day).
Custom floating tab bar, dynamic calendar icon, and workout data seeded.
2026-05-27 02:09:44 +03:00
|
|
|
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
|
|
|
|
ENABLE_TESTABILITY = YES;
|
|
|
|
|
GCC_C_LANGUAGE_STANDARD = gnu11;
|
|
|
|
|
GCC_DYNAMIC_NO_PIC = NO;
|
|
|
|
|
GCC_NO_COMMON_BLOCKS = YES;
|
|
|
|
|
GCC_OPTIMIZATION_LEVEL = 0;
|
|
|
|
|
GCC_PREPROCESSOR_DEFINITIONS = (
|
|
|
|
|
"$(inherited)",
|
|
|
|
|
"DEBUG=1",
|
|
|
|
|
);
|
|
|
|
|
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
|
|
|
|
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
|
|
|
|
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
|
|
|
|
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
|
|
|
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
|
|
|
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
|
|
|
|
IPHONEOS_DEPLOYMENT_TARGET = 16.0;
|
2026-06-10 10:29:17 +03:00
|
|
|
MARKETING_VERSION = 2.0;
|
Initial commit: KisaniCal iOS app
Task management, Eisenhower matrix, workout logging with persistence,
and calendar with 6 view modes (Month, List, Year, Week, 3 Day, Day).
Custom floating tab bar, dynamic calendar icon, and workout data seeded.
2026-05-27 02:09:44 +03:00
|
|
|
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
|
|
|
|
|
MTL_FAST_MATH = YES;
|
|
|
|
|
ONLY_ACTIVE_ARCH = YES;
|
|
|
|
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
|
|
|
|
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
|
|
|
|
|
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
|
|
|
|
SWIFT_VERSION = 5.0;
|
|
|
|
|
};
|
|
|
|
|
name = Debug;
|
|
|
|
|
};
|
2026-06-16 23:50:37 +03:00
|
|
|
D3A1329FCB6BBA1E8CC25FFC /* Release */ = {
|
|
|
|
|
isa = XCBuildConfiguration;
|
|
|
|
|
buildSettings = {
|
|
|
|
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
|
|
|
|
CODE_SIGN_ENTITLEMENTS = WenzaWatch/WenzaWatch.entitlements;
|
|
|
|
|
CODE_SIGN_STYLE = Automatic;
|
|
|
|
|
GENERATE_INFOPLIST_FILE = NO;
|
|
|
|
|
INFOPLIST_FILE = WenzaWatch/Info.plist;
|
|
|
|
|
INFOPLIST_KEY_CFBundleDisplayName = Wenza;
|
|
|
|
|
PRODUCT_BUNDLE_IDENTIFIER = com.kutesir.KisaniCal.watchkitapp;
|
|
|
|
|
SDKROOT = watchos;
|
|
|
|
|
SKIP_INSTALL = YES;
|
|
|
|
|
SWIFT_VERSION = 5.9;
|
|
|
|
|
TARGETED_DEVICE_FAMILY = 4;
|
|
|
|
|
WATCHOS_DEPLOYMENT_TARGET = 10.0;
|
|
|
|
|
};
|
|
|
|
|
name = Release;
|
|
|
|
|
};
|
2026-06-03 12:27:45 +03:00
|
|
|
DF56CDD73E9B177D57AE17FB /* Debug */ = {
|
|
|
|
|
isa = XCBuildConfiguration;
|
|
|
|
|
buildSettings = {
|
|
|
|
|
APPLICATION_EXTENSION_API_ONLY = YES;
|
|
|
|
|
CODE_SIGN_ENTITLEMENTS = KisaniCalWidgets/KisaniCalWidgets.entitlements;
|
|
|
|
|
CODE_SIGN_STYLE = Automatic;
|
|
|
|
|
GENERATE_INFOPLIST_FILE = NO;
|
|
|
|
|
INFOPLIST_FILE = KisaniCalWidgets/Info.plist;
|
|
|
|
|
IPHONEOS_DEPLOYMENT_TARGET = 18.0;
|
2026-07-07 22:34:32 +03:00
|
|
|
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks";
|
2026-06-03 12:27:45 +03:00
|
|
|
PRODUCT_BUNDLE_IDENTIFIER = com.kutesir.KisaniCal.KisaniCalWidgets;
|
|
|
|
|
SDKROOT = iphoneos;
|
|
|
|
|
SWIFT_VERSION = 5.9;
|
|
|
|
|
TARGETED_DEVICE_FAMILY = "1,2";
|
|
|
|
|
};
|
|
|
|
|
name = Debug;
|
|
|
|
|
};
|
2026-06-16 23:50:37 +03:00
|
|
|
F00C7E0C784B90820717D614 /* Debug */ = {
|
|
|
|
|
isa = XCBuildConfiguration;
|
|
|
|
|
buildSettings = {
|
|
|
|
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
|
|
|
|
CODE_SIGN_ENTITLEMENTS = WenzaWatch/WenzaWatch.entitlements;
|
|
|
|
|
CODE_SIGN_STYLE = Automatic;
|
|
|
|
|
GENERATE_INFOPLIST_FILE = NO;
|
|
|
|
|
INFOPLIST_FILE = WenzaWatch/Info.plist;
|
|
|
|
|
INFOPLIST_KEY_CFBundleDisplayName = Wenza;
|
|
|
|
|
PRODUCT_BUNDLE_IDENTIFIER = com.kutesir.KisaniCal.watchkitapp;
|
|
|
|
|
SDKROOT = watchos;
|
|
|
|
|
SKIP_INSTALL = YES;
|
|
|
|
|
SWIFT_VERSION = 5.9;
|
|
|
|
|
TARGETED_DEVICE_FAMILY = 4;
|
|
|
|
|
WATCHOS_DEPLOYMENT_TARGET = 10.0;
|
|
|
|
|
};
|
|
|
|
|
name = Debug;
|
|
|
|
|
};
|
Initial commit: KisaniCal iOS app
Task management, Eisenhower matrix, workout logging with persistence,
and calendar with 6 view modes (Month, List, Year, Week, 3 Day, Day).
Custom floating tab bar, dynamic calendar icon, and workout data seeded.
2026-05-27 02:09:44 +03:00
|
|
|
F364512BEB70ECB7CB83FBFE /* Debug */ = {
|
|
|
|
|
isa = XCBuildConfiguration;
|
|
|
|
|
buildSettings = {
|
|
|
|
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
|
|
|
|
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
|
2026-06-01 01:16:19 +03:00
|
|
|
CODE_SIGN_ENTITLEMENTS = KisaniCal/KisaniCal.entitlements;
|
Initial commit: KisaniCal iOS app
Task management, Eisenhower matrix, workout logging with persistence,
and calendar with 6 view modes (Month, List, Year, Week, 3 Day, Day).
Custom floating tab bar, dynamic calendar icon, and workout data seeded.
2026-05-27 02:09:44 +03:00
|
|
|
CODE_SIGN_IDENTITY = "iPhone Developer";
|
|
|
|
|
CODE_SIGN_STYLE = Automatic;
|
|
|
|
|
ENABLE_PREVIEWS = YES;
|
|
|
|
|
GENERATE_INFOPLIST_FILE = YES;
|
Rebrand app to "Wenza" (display name + user-facing copy)
Renames the user-facing app to Wenza without changing identity:
- CFBundleDisplayName → "Wenza" (app) and "Wenza Widgets" (widget extension).
- Calendar/Health permission prompts now reference Wenza.
- In-app copy updated: sidebar title, Auth + Onboarding screens, Settings
about/help rows, feedback email subject, tutorial text, widget description.
Bundle identifier, App Group, UserDefaults storage keys, team ID, and the
internal Xcode target/project names are intentionally unchanged, so this stays
the same App Store app with no user data loss. App Store listing name must be
changed separately in App Store Connect.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-15 18:31:51 +03:00
|
|
|
INFOPLIST_KEY_CFBundleDisplayName = Wenza;
|
|
|
|
|
INFOPLIST_KEY_NSCalendarsFullAccessUsageDescription = "Wenza shows your calendar events alongside tasks.";
|
|
|
|
|
INFOPLIST_KEY_NSCalendarsUsageDescription = "Wenza shows your calendar events alongside tasks.";
|
|
|
|
|
INFOPLIST_KEY_NSHealthShareUsageDescription = "Wenza reads your steps, energy, heart rate, and workouts to show health stats on your dashboard.";
|
|
|
|
|
INFOPLIST_KEY_NSHealthUpdateUsageDescription = "Wenza saves workouts you complete to the Health app.";
|
2026-06-24 19:48:00 +03:00
|
|
|
INFOPLIST_KEY_NSMicrophoneUsageDescription = "Wenza uses your microphone to convert speech into task text.";
|
|
|
|
|
INFOPLIST_KEY_NSSpeechRecognitionUsageDescription = "Wenza uses speech recognition so you can add tasks by voice.";
|
2026-06-06 19:29:25 +03:00
|
|
|
INFOPLIST_KEY_NSSupportsLiveActivities = YES;
|
Initial commit: KisaniCal iOS app
Task management, Eisenhower matrix, workout logging with persistence,
and calendar with 6 view modes (Month, List, Year, Week, 3 Day, Day).
Custom floating tab bar, dynamic calendar icon, and workout data seeded.
2026-05-27 02:09:44 +03:00
|
|
|
INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES;
|
2026-06-07 12:20:41 +03:00
|
|
|
INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen;
|
Initial commit: KisaniCal iOS app
Task management, Eisenhower matrix, workout logging with persistence,
and calendar with 6 view modes (Month, List, Year, Week, 3 Day, Day).
Custom floating tab bar, dynamic calendar icon, and workout data seeded.
2026-05-27 02:09:44 +03:00
|
|
|
INFOPLIST_KEY_UIStatusBarStyle = UIStatusBarStyleDefault;
|
2026-06-21 03:03:28 +03:00
|
|
|
INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
|
|
|
|
|
INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
|
Initial commit: KisaniCal iOS app
Task management, Eisenhower matrix, workout logging with persistence,
and calendar with 6 view modes (Month, List, Year, Week, 3 Day, Day).
Custom floating tab bar, dynamic calendar icon, and workout data seeded.
2026-05-27 02:09:44 +03:00
|
|
|
IPHONEOS_DEPLOYMENT_TARGET = 16.0;
|
|
|
|
|
LD_RUNPATH_SEARCH_PATHS = (
|
|
|
|
|
"$(inherited)",
|
|
|
|
|
"@executable_path/Frameworks",
|
|
|
|
|
);
|
|
|
|
|
PRODUCT_BUNDLE_IDENTIFIER = com.kutesir.KisaniCal;
|
|
|
|
|
SDKROOT = iphoneos;
|
|
|
|
|
SWIFT_VERSION = 5.9;
|
|
|
|
|
TARGETED_DEVICE_FAMILY = "1,2";
|
|
|
|
|
};
|
|
|
|
|
name = Debug;
|
|
|
|
|
};
|
|
|
|
|
/* End XCBuildConfiguration section */
|
|
|
|
|
|
|
|
|
|
/* Begin XCConfigurationList section */
|
2026-06-03 12:27:45 +03:00
|
|
|
63EDFF56CC5312509E567D37 /* Build configuration list for PBXNativeTarget "KisaniCalWidgets" */ = {
|
|
|
|
|
isa = XCConfigurationList;
|
|
|
|
|
buildConfigurations = (
|
|
|
|
|
DF56CDD73E9B177D57AE17FB /* Debug */,
|
|
|
|
|
B60AA89AB378D4EA773989AA /* Release */,
|
|
|
|
|
);
|
|
|
|
|
defaultConfigurationIsVisible = 0;
|
|
|
|
|
defaultConfigurationName = Debug;
|
|
|
|
|
};
|
2026-06-16 23:50:37 +03:00
|
|
|
6F608724A2EAA63171766586 /* Build configuration list for PBXNativeTarget "WenzaWatch" */ = {
|
|
|
|
|
isa = XCConfigurationList;
|
|
|
|
|
buildConfigurations = (
|
|
|
|
|
F00C7E0C784B90820717D614 /* Debug */,
|
|
|
|
|
D3A1329FCB6BBA1E8CC25FFC /* Release */,
|
|
|
|
|
);
|
|
|
|
|
defaultConfigurationIsVisible = 0;
|
|
|
|
|
defaultConfigurationName = Debug;
|
|
|
|
|
};
|
Calendar: fix weekday-header/week-number alignment to firstWeekday + tests
Root cause: a data-integrity bug, not visual. The month grid is built from
.weekOfMonth (respects Calendar.current.firstWeekday), but the weekday header
was hardcoded Sunday-first ("S M T W T F S") and the week-number label was gated
on isSunday (weekday == 1). On any non-Sunday-first locale (or when the user sets
"Start Week On" = Monday) every column was mislabeled by one and the W-number
landed on the wrong column — e.g. June 1 2026 (a Monday) appearing under "S".
Fix:
- Extract pure, testable date math into CalendarGrid (monthGrid + weekdaySymbols).
- Header now derived from firstWeekday, so it always matches the grid.
- Week-number label gated on isWeekStart (weekday == firstWeekday), not Sunday.
- Document that week numbers are locale weekOfYear (consistent with the layout),
not ISO.
- gridDays() and the year-view mini-month dedupe to CalendarGrid.
Verification:
- New KisaniCalTests target with 9 tests, all passing on simulator: exact
Sunday-first June 2026 grid, header↔grid alignment for firstWeekday 1...7,
cell date identity, month navigation (May/Jul/Feb 2026 + Feb 2028 leap +
Dec 2026→Jan 2027), and event-day bucketing (all-day, late-night, midnight-
crossing) across 4 timezones.
- Verified in the running app: header S M T W T F S, May 31 in the Sunday
column, June 1 under Monday, June 24 (Wednesday) selected.
Adds a DEBUG-only KISANI_INITIAL_TAB launch env (compiled out of Release) used
to screenshot the calendar past the sign-in gate.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-24 19:24:49 +03:00
|
|
|
A0CF5E0496CC1077B2417541 /* Build configuration list for PBXNativeTarget "KisaniCalTests" */ = {
|
|
|
|
|
isa = XCConfigurationList;
|
|
|
|
|
buildConfigurations = (
|
|
|
|
|
4F022C5E53C268A49F093011 /* Debug */,
|
|
|
|
|
1092C43DF580318C5090D54B /* Release */,
|
|
|
|
|
);
|
|
|
|
|
defaultConfigurationIsVisible = 0;
|
|
|
|
|
defaultConfigurationName = Debug;
|
|
|
|
|
};
|
Initial commit: KisaniCal iOS app
Task management, Eisenhower matrix, workout logging with persistence,
and calendar with 6 view modes (Month, List, Year, Week, 3 Day, Day).
Custom floating tab bar, dynamic calendar icon, and workout data seeded.
2026-05-27 02:09:44 +03:00
|
|
|
B60FDD2C88D1D33CF1EC02B3 /* Build configuration list for PBXNativeTarget "KisaniCal" */ = {
|
|
|
|
|
isa = XCConfigurationList;
|
|
|
|
|
buildConfigurations = (
|
|
|
|
|
F364512BEB70ECB7CB83FBFE /* Debug */,
|
|
|
|
|
0CEA6637F45C32A237FBA20D /* Release */,
|
|
|
|
|
);
|
|
|
|
|
defaultConfigurationIsVisible = 0;
|
|
|
|
|
defaultConfigurationName = Debug;
|
|
|
|
|
};
|
|
|
|
|
EF1C4F3BDA4AA7E008FC2CDE /* Build configuration list for PBXProject "KisaniCal" */ = {
|
|
|
|
|
isa = XCConfigurationList;
|
|
|
|
|
buildConfigurations = (
|
|
|
|
|
BD527AA54887489CC665FB9D /* Debug */,
|
|
|
|
|
20E23A89279CC26778E21856 /* Release */,
|
|
|
|
|
);
|
|
|
|
|
defaultConfigurationIsVisible = 0;
|
|
|
|
|
defaultConfigurationName = Debug;
|
|
|
|
|
};
|
|
|
|
|
/* End XCConfigurationList section */
|
|
|
|
|
};
|
|
|
|
|
rootObject = AF6DE7A812408E3742522E90 /* Project object */;
|
|
|
|
|
}
|