Mobile — Accessibility
VoiceOver, TalkBack, Accessibility Inspector, Accessibility Scanner, axe for hybrid.
Accessibility on mobile is a per-platform discipline; the tooling is mostly first-party from Apple and Google. For web a11y see accessibility-testing. For wrapping web apps see Mobile Packaging.
iOS
- ★ VoiceOver — Apple's screen reader; the primary a11y test surface.
- ★ Accessibility Inspector (Xcode) — audits, missing labels, color contrast, dynamic type.
- ★ Dynamic Type — system-wide text scaling; SwiftUI handles it natively if you avoid hardcoded fonts.
- Voice Control — voice navigation; test number / name overlays don't conflict.
- Switch Control — alternative input; rare but important to support.
- Reduce Motion / Reduce Transparency — respect user prefs.
- Accessibility traits in SwiftUI (
accessibilityLabel,accessibilityHint,accessibilityValue,.accessibilityElement).
Android
- ★ TalkBack — Google's screen reader.
- ★ Accessibility Scanner — Google-published app; scans live screens for missing labels, low contrast, small touch targets.
- Switch Access — Android's alternative input.
- Live Transcribe / Live Caption — system-level.
- Compose semantics —
Modifier.semantics,contentDescription,Modifier.clearAndSetSemantics. - espresso-accessibility — automated a11y checks in Espresso tests.
Cross-platform
- react-native-a11y / react-native ARIA props — RN exposes most platform a11y APIs.
- accessibility plugins for Flutter — Semantics widget; Flutter Semantics tree maps to native.
- react-native-aria (Adobe) — accessible primitives library.
Hybrid / WebView (Capacitor / Tauri Mobile)
- axe-core — WebView a11y audits; works in Capacitor / Tauri Mobile shells.
- eslint-plugin-jsx-a11y — catches obvious issues at lint time.
- WCAG 2.2 / 2.1 — your hybrid app's web layer should meet WCAG; native chrome (status bar, sheet handles) gets handled by the shell.
Touch target size
- iOS HIG: minimum 44×44pt.
- Android Material: minimum 48×48dp.
- Compose / SwiftUI surface warnings for small targets; use Accessibility Scanner / Inspector.
Color contrast / dynamic type
- ★ Contrast (Apple — built into Accessibility Inspector) and Stark plugin for Figma — see design-handoff.
- Test with Increase Contrast (iOS) and High Contrast Text (Android).
- Test with Maximum Dynamic Type (iOS) and Largest Font Size (Android).
Testing automation
- espresso-accessibility — Android.
- Accessibility Audit in XCUITest — iOS 17+, runs WCAG-shape checks.
- axe-core for WebViews — hybrid.
Legal context
- EAA (European Accessibility Act) — June 2025 enforcement; commercial apps in the EU must meet accessibility requirements.
- ADA Title III (US) — applied to mobile apps in case law.
- Section 508 (US federal procurement).
Pick this if…
- iOS, default: VoiceOver test pass + Accessibility Inspector + XCUITest accessibility audits.
- Android, default: TalkBack + Accessibility Scanner + espresso-accessibility.
- Hybrid / Capacitor: axe-core in your web a11y CI.
- Cross-platform RN/Flutter: lean on each platform's first-party tools; both surface the underlying APIs.