feat: add WCAG AA accessibility app-wide, fix CloudKit container config, remove debug logs
- Add VoiceOver labels, hints, and element grouping across all 60+ views - Add Reduce Motion support (Theme.Animation.prefersReducedMotion) to all animations - Replace fixed font sizes with semantic Dynamic Type styles - Hide decorative elements from VoiceOver with .accessibilityHidden(true) - Add .minimumHitTarget() modifier ensuring 44pt touch targets - Add AccessibilityAnnouncer utility for VoiceOver announcements - Improve color contrast values in Theme.swift for WCAG AA compliance - Extract CloudKitContainerConfig for explicit container identity - Remove PostHog debug console log from AnalyticsManager Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -238,16 +238,15 @@ struct BootstrappedContentView: View {
|
||||
private func performBackgroundSync(context: ModelContext) async {
|
||||
let log = SyncLogger.shared
|
||||
log.log("🔄 [SYNC] Starting background sync...")
|
||||
AccessibilityAnnouncer.announce("Sync started.")
|
||||
|
||||
// Log diagnostic info for debugging CloudKit container issues
|
||||
let bundleId = Bundle.main.bundleIdentifier ?? "unknown"
|
||||
let container = CKContainer.default()
|
||||
let container = CloudKitContainerConfig.makeContainer()
|
||||
let containerId = container.containerIdentifier ?? "unknown"
|
||||
log.log("🔧 [DIAG] Bundle ID: \(bundleId)")
|
||||
log.log("🔧 [DIAG] CKContainer.default(): \(containerId)")
|
||||
if let entitlementContainers = Bundle.main.object(forInfoDictionaryKey: "com.apple.developer.icloud-container-identifiers") as? [String] {
|
||||
log.log("🔧 [DIAG] Entitlement containers: \(entitlementContainers.joined(separator: ", "))")
|
||||
}
|
||||
log.log("🔧 [DIAG] CloudKit container: \(containerId)")
|
||||
log.log("🔧 [DIAG] Configured container: \(CloudKitContainerConfig.identifier)")
|
||||
if let accountStatus = try? await container.accountStatus() {
|
||||
log.log("🔧 [DIAG] iCloud account status: \(accountStatus.rawValue) (0=couldNotDetermine, 1=available, 2=restricted, 3=noAccount)")
|
||||
} else {
|
||||
@@ -294,10 +293,13 @@ struct BootstrappedContentView: View {
|
||||
} else {
|
||||
log.log("🔄 [SYNC] No updates - skipping DataProvider reload")
|
||||
}
|
||||
AccessibilityAnnouncer.announce("Sync complete. Updated \(result.totalUpdated) records.")
|
||||
} catch CanonicalSyncService.SyncError.cloudKitUnavailable {
|
||||
log.log("❌ [SYNC] CloudKit unavailable - using local data only")
|
||||
AccessibilityAnnouncer.announce("Cloud sync unavailable. Using local data.")
|
||||
} catch {
|
||||
log.log("❌ [SYNC] Error: \(error.localizedDescription)")
|
||||
AccessibilityAnnouncer.announce("Sync failed. \(error.localizedDescription)")
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user