-
Notifications
You must be signed in to change notification settings - Fork 6
Mobile Accessibility
github-actions[bot] edited this page Feb 23, 2026
·
1 revision
The mobile-accessibility agent audits React Native, Expo, iOS (SwiftUI/UIKit), and Android (Jetpack Compose/Views) code for accessibility compliance. It covers screen reader compatibility (VoiceOver, TalkBack), touch target sizes, accessible naming, focus management, and platform-specific semantics.
- Reviewing React Native or Expo components for accessibility props
- Auditing iOS SwiftUI or UIKit code for VoiceOver compatibility
- Auditing Android Jetpack Compose semantics or View XML accessibility attributes
- Checking touch target sizes against iOS (44 x 44pt) and Android (48 x 48dp) requirements
- Verifying screen reader compatibility before release
- Setting up automated accessibility testing (React Native Testing Library, Detox, Maestro)
- "Audit my React Native component for accessibility"
- "Check this component for VoiceOver compatibility"
- "Are my touch targets big enough?"
- "Review the Android screen for TalkBack"
- "Does this pass mobile accessibility?"
- "Set up mobile accessibility testing"
| Category | Props Checked |
|---|---|
| Naming |
accessibilityLabel, accessibilityHint, aria-label, aria-describedby
|
| Role |
accessibilityRole, aria-role
|
| State |
accessibilityState (checked/disabled/expanded/selected/busy), aria-* state equivalents |
| Value |
accessibilityValue (min/max/now/text) |
| Visibility |
accessibilityElementsHidden (iOS), importantForAccessibility (Android), aria-hidden
|
| Focus |
accessibilityViewIsModal, aria-modal, AccessibilityInfo.setAccessibilityFocus()
|
| Actions |
accessibilityActions, onAccessibilityAction
|
| Live regions |
accessibilityLiveRegion, aria-live
|
-
.accessibilityLabel,.accessibilityHint,.accessibilityValue -
.accessibilityAddTraits/.accessibilityRemoveTraits(15+ trait values) -
.accessibilityElement(children:)- combine, contain, ignore -
.accessibilityHidden,.accessibilitySortPriority -
.accessibilityAction(named:)for custom rotor actions -
UIAccessibilityTraits,accessibilityElementsordering,accessibilityViewIsModal
-
semantics { contentDescription, role, stateDescription }(Compose) -
semantics { mergeDescendants = true },clearAndSetSemantics {} -
semantics { liveRegion = LiveRegion.Polite }for dynamic content -
android:contentDescription,android:importantForAccessibility(Views) -
android:focusablefor Switch Access compatibility
| Platform | Minimum | Recommended |
|---|---|---|
| iOS | 44 x 44 pt | 44 x 44 pt (HIG) |
| Android | 48 x 48 dp | 48 x 48 dp (Material Design) |
| Web (WCAG 2.5.8, AA, 2.2) | 24 x 24 CSS px with spacing | 44 x 44 CSS px (WCAG 2.5.5 AAA) |
All TouchableOpacity, TouchableHighlight, Pressable, and accessible={true} View elements are checked against these minimums.
- Identify platform - React Native / Expo / iOS SwiftUI or UIKit / Android Compose or Views
- Core accessibility props - Every interactive and informational element is checked
- Touch targets - All interactive elements measured against platform minimums
- Screen reader compatibility - Focus order, modal trapping, live regions, state announcements
- Testing - Automated and manual testing guidance
- Report - Issue list with platform-specific IDs, WCAG SC, impact, and fix code
- Web companion audit ->
accessibility-lead - Token-level contrast / spacing issues ->
design-system-auditor - WCAG criterion explanations ->
wcag-guide - Testing setup ->
testing-coach
This agent uses the mobile-accessibility skill in .github/skills/mobile-accessibility/SKILL.md, which contains:
- Full React Native accessibility props reference table (30+ props with types, values, WCAG mapping, and required/optional status)
- Accessibility role values reference table (28 roles mapped to iOS traits and Android roles)
- Touch target detection patterns and auto-fix code examples
- iOS UIAccessibility / SwiftUI modifier quick reference tables
- Android Jetpack Compose semantics quick reference table
- Common violation patterns with before/after fix code: missing labels, missing state, modal focus trapping, decorative image handling, FlatList patterns
- Testing tool commands: Xcode Accessibility Inspector, Android Accessibility Scanner, ADB TalkBack enablement, React Native Testing Library examples, Detox examples, Maestro YAML examples
| Tool | Platform | Type |
|---|---|---|
| Accessibility Inspector (Xcode) | iOS | Manual + automated audit |
| Android Accessibility Scanner | Android | Manual audit |
| ADB shell | Android | CLI TalkBack toggle |
| React Native Testing Library | React Native | Unit testing |
| Detox | React Native | E2E testing |
| Maestro | React Native / iOS / Android | E2E testing, CI |
## Mobile Accessibility Audit - ProductCard Component
**Platform:** React Native (Expo SDK 51)
**Date:** 2025-01-15
### Summary
| Severity | Count |
|----------|-------|
| Error | 2 |
| Warning | 1 |
| Tip | 1 |
#### RN-001: Icon button missing accessibilityLabel - ERROR
- **File:** components/ProductCard.tsx (line 34)
- **WCAG:** 1.1.1 Non-text Content, 4.1.2 Name, Role, Value
- **Impact:** VoiceOver reads "button" with no context. Screen reader users cannot determine the button's purpose.
- **Current code:** `<TouchableOpacity onPress={addToCart}><Icon name="cart" /></TouchableOpacity>`
- **Fix:** `<TouchableOpacity onPress={addToCart} accessibilityRole="button" accessibilityLabel="Add to cart">`
#### RN-002: Touch target too small - ERROR
- **File:** components/ProductCard.tsx (line 34)
- **WCAG:** 2.5.5 Target Size (AAA), 2.5.8 Target Size Minimum (AA)
- **Impact:** 24 x 24 icon button falls below the 44 x 44pt iOS minimum. Users with motor impairments may be unable to activate it reliably.
- **Fix:** `style={{ width: 44, height: 44, alignItems: 'center', justifyContent: 'center' }}`- Accessibility Lead
- Web Accessibility Wizard
- Document Accessibility Wizard
- Alt Text and Headings
- ARIA Specialist
- Contrast Master
- Forms Specialist
- Keyboard Navigator
- Link Checker
- Live Region Controller
- Modal Specialist
- Tables Data Specialist
- Word Accessibility
- Excel Accessibility
- PowerPoint Accessibility
- PDF Accessibility
- Office Scan Config
- PDF Scan Config
- Testing Coach
- WCAG Guide