Files
Kordant/tasks/ios-production/19-accessibility-audit.md
2026-05-26 16:06:34 -04:00

2.7 KiB

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