81 lines
2.7 KiB
Markdown
81 lines
2.7 KiB
Markdown
# 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
|