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:
14
SportsTime/Core/Services/CloudKitContainerConfig.swift
Normal file
14
SportsTime/Core/Services/CloudKitContainerConfig.swift
Normal file
@@ -0,0 +1,14 @@
|
||||
//
|
||||
// CloudKitContainerConfig.swift
|
||||
// SportsTime
|
||||
//
|
||||
|
||||
import CloudKit
|
||||
|
||||
enum CloudKitContainerConfig {
|
||||
nonisolated static let identifier = "iCloud.com.88oakapps.SportsTime"
|
||||
|
||||
nonisolated static func makeContainer() -> CKContainer {
|
||||
CKContainer(identifier: identifier)
|
||||
}
|
||||
}
|
||||
@@ -109,8 +109,7 @@ actor CloudKitService {
|
||||
private let deltaOverlapSeconds: TimeInterval = 120
|
||||
|
||||
private init() {
|
||||
// Use target entitlements (debug/prod) instead of hardcoding a container ID.
|
||||
self.container = CKContainer.default()
|
||||
self.container = CloudKitContainerConfig.makeContainer()
|
||||
self.publicDatabase = container.publicCloudDatabase
|
||||
}
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@ import CloudKit
|
||||
actor ItineraryItemService {
|
||||
static let shared = ItineraryItemService()
|
||||
|
||||
private let container = CKContainer.default()
|
||||
private let container = CloudKitContainerConfig.makeContainer()
|
||||
private var database: CKDatabase { container.privateCloudDatabase }
|
||||
|
||||
private let recordType = "ItineraryItem"
|
||||
|
||||
@@ -108,8 +108,9 @@ struct LocationPermissionView: View {
|
||||
var body: some View {
|
||||
VStack(spacing: 16) {
|
||||
Image(systemName: "location.circle.fill")
|
||||
.font(.system(size: 60))
|
||||
.font(.largeTitle)
|
||||
.foregroundStyle(.blue)
|
||||
.accessibilityHidden(true)
|
||||
|
||||
Text("Enable Location")
|
||||
.font(.title2)
|
||||
|
||||
@@ -52,8 +52,7 @@ actor PollService {
|
||||
private var pollSubscriptionID: CKSubscription.ID?
|
||||
|
||||
private init() {
|
||||
// Respect target entitlements so Debug and production stay isolated.
|
||||
self.container = CKContainer.default()
|
||||
self.container = CloudKitContainerConfig.makeContainer()
|
||||
self.publicDatabase = container.publicCloudDatabase
|
||||
}
|
||||
|
||||
|
||||
@@ -63,7 +63,7 @@ final class VisitPhotoService {
|
||||
|
||||
init(modelContext: ModelContext) {
|
||||
self.modelContext = modelContext
|
||||
self.container = CKContainer.default()
|
||||
self.container = CloudKitContainerConfig.makeContainer()
|
||||
self.privateDatabase = container.privateCloudDatabase
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user