- Widgets can't access app's Keychain (different sandbox)
- App writes data to shared UserDefaults (group.com.daniil.pulsehealth)
- Widgets read from shared UserDefaults — no API calls needed
- WidgetDataService: updates widget data + reloads timelines
- DashboardView: pushes habits/tasks data to widget after load
- HealthView: pushes health data to widget after load
- App Group capability added to both app and widget entitlements
- Widgets update every 15 minutes from cached data
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Remove kSecAttrAccessGroup from KeychainService (requires entitlement
that keeps getting stripped by Xcode)
- Basic Keychain works without accessGroup for the main app
- Fix health credentials migration check — use KeychainService.load directly
- Tokens now persist correctly between app launches
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>