Update signing configuration to use 88oakapps.feels identifiers
- Update App Group IDs from group.com.tt.feels to group.com.88oakapps.feels - Update iCloud container IDs from iCloud.com.tt.feels to iCloud.com.88oakapps.feels - Sync code constants with entitlements across all targets (iOS, Watch, Widget) - Update documentation in CLAUDE.md and PROJECT_OVERVIEW.md Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -21,6 +21,8 @@ struct SettingsContentView: View {
|
||||
@State private var showTrialDatePicker = false
|
||||
@State private var isExportingWidgets = false
|
||||
@State private var widgetExportPath: URL?
|
||||
@State private var isDeletingHealthKitData = false
|
||||
@State private var healthKitDeleteResult: String?
|
||||
@StateObject private var healthService = HealthService.shared
|
||||
|
||||
@AppStorage(UserDefaultsStore.Keys.firstLaunchDate.rawValue, store: GroupUserDefaults.groupDefaults)
|
||||
@@ -62,6 +64,7 @@ struct SettingsContentView: View {
|
||||
tipsPreviewButton
|
||||
testNotificationsButton
|
||||
exportWidgetsButton
|
||||
deleteHealthKitDataButton
|
||||
|
||||
clearDataButton
|
||||
#endif
|
||||
@@ -475,6 +478,58 @@ struct SettingsContentView: View {
|
||||
.cornerRadius(Constants.viewsCornerRaidus, corners: [.topLeft, .topRight, .bottomLeft, .bottomRight])
|
||||
}
|
||||
|
||||
private var deleteHealthKitDataButton: some View {
|
||||
ZStack {
|
||||
theme.currentTheme.secondaryBGColor
|
||||
Button {
|
||||
isDeletingHealthKitData = true
|
||||
healthKitDeleteResult = nil
|
||||
Task {
|
||||
do {
|
||||
let count = try await HealthKitManager.shared.deleteAllMoods()
|
||||
healthKitDeleteResult = "✓ Deleted \(count) records"
|
||||
} catch {
|
||||
healthKitDeleteResult = "✗ Error: \(error.localizedDescription)"
|
||||
}
|
||||
isDeletingHealthKitData = false
|
||||
}
|
||||
} label: {
|
||||
HStack(spacing: 12) {
|
||||
if isDeletingHealthKitData {
|
||||
ProgressView()
|
||||
.frame(width: 32)
|
||||
} else {
|
||||
Image(systemName: "heart.slash.fill")
|
||||
.font(.title2)
|
||||
.foregroundColor(.red)
|
||||
.frame(width: 32)
|
||||
}
|
||||
|
||||
VStack(alignment: .leading, spacing: 2) {
|
||||
Text("Delete HealthKit Data")
|
||||
.foregroundColor(textColor)
|
||||
|
||||
if let result = healthKitDeleteResult {
|
||||
Text(result)
|
||||
.font(.caption)
|
||||
.foregroundColor(result.contains("✓") ? .green : .red)
|
||||
} else {
|
||||
Text("Remove all State of Mind records")
|
||||
.font(.caption)
|
||||
.foregroundStyle(.secondary)
|
||||
}
|
||||
}
|
||||
|
||||
Spacer()
|
||||
}
|
||||
.padding()
|
||||
}
|
||||
.disabled(isDeletingHealthKitData)
|
||||
}
|
||||
.fixedSize(horizontal: false, vertical: true)
|
||||
.cornerRadius(Constants.viewsCornerRaidus, corners: [.topLeft, .topRight, .bottomLeft, .bottomRight])
|
||||
}
|
||||
|
||||
private var clearDataButton: some View {
|
||||
ZStack {
|
||||
theme.currentTheme.secondaryBGColor
|
||||
|
||||
Reference in New Issue
Block a user