# 19. Accessibility Audit (VoiceOver) meta: id: ios-production-19 feature: ios-production priority: P2 depends_on: [] tags: [testing, accessibility, compliance] objective: - Ensure the iOS app is fully accessible with VoiceOver and meets WCAG 2.1 AA mobile guidelines deliverables: - VoiceOver audit report - Accessibility labels on all elements - Dynamic Type support - Color contrast verification steps: 1. Audit all screens with VoiceOver: - Turn on VoiceOver (Settings → Accessibility) - Navigate every screen using swipe gestures - Verify all interactive elements have labels - Verify logical reading order - Test with eyes closed 2. Add missing accessibility labels: - Add .accessibilityLabel to all buttons - Add .accessibilityHint where helpful - Add .accessibilityValue for dynamic content - Group related elements with .accessibilityElement(children:) 3. Test Dynamic Type: - Enable Larger Text in Settings - Test all screens at largest text size - Verify no truncation or overlap - Use ScrollView where content may overflow 4. Verify color contrast: - Test all text/background color combinations - Ensure 4.5:1 ratio for normal text - Ensure 3:1 ratio for large text and UI components - Test in both light and dark mode 5. Test Switch Control: - Enable Switch Control - Verify all actions reachable - Test with external switch device if available 6. Test Reduce Motion: - Enable Reduce Motion - Verify app still functional without animations - Respect prefersReducedMotion 7. Add accessibility tests: - XCTest checks for accessibility labels - Verify no unlabeled elements - Test with accessibility inspector tests: - Manual: Full VoiceOver navigation of all screens - Automated: XCTest accessibility label checks - Visual: Color contrast verification acceptance_criteria: - All interactive elements have accessibility labels - VoiceOver reads logical description for every element - Dynamic Type supported at all sizes (AX5) - Color contrast ≥4.5:1 for all text - Reduce Motion respected - Switch Control navigable - No accessibility warnings in Xcode - Accessibility audit report completed - Screenshots at largest text size showing no layout issues validation: - Turn on VoiceOver → navigate entire app without visual - Enable largest text size → all screens readable - Check contrast → all combinations pass - Xcode accessibility inspector → 0 warnings notes: - SwiftUI has good accessibility by default but custom views need attention - Use .accessibilityElement(children: .combine) for complex views - Test on physical device — simulator VoiceOver is limited - Consider hiring accessibility consultant for thorough audit