fix: widgets use App Group shared UserDefaults instead of Keychain

- 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>
This commit is contained in:
2026-04-06 14:47:26 +03:00
parent 0c21a14cb9
commit a07696bd55
10 changed files with 165 additions and 314 deletions

View File

@@ -25,11 +25,16 @@ targets:
BackgroundModes:
modes:
- processing
AppGroups:
groups:
- group.com.daniil.pulsehealth
PulseWidgetExtension:
type: app-extension
platform: iOS
sources: PulseWidget
entitlements:
path: PulseWidget/PulseWidget.entitlements
settings:
base:
PRODUCT_BUNDLE_IDENTIFIER: com.daniil.pulsehealth.widget
@@ -40,3 +45,7 @@ targets:
MARKETING_VERSION: "1.0"
CURRENT_PROJECT_VERSION: "1"
INFOPLIST_KEY_CFBundleDisplayName: Pulse Widget
capabilities:
AppGroups:
groups:
- group.com.daniil.pulsehealth