---
title: "Test every screen with VoiceOver and · Agent Wranglers"
url: https://agentwranglers.se/playbook/mobile-apps/crashes-and-quality/screen-reader-tests
updated: 2026-10-21
licence: "CC BY 4.0"
licence_url: https://creativecommons.org/licenses/by/4.0/
---

# Test every screen with VoiceOver and TalkBack

For AI agents: the [site map](https://agentwranglers.se/llms.txt) lists everything here, and this page sits under [Crashes and quality](https://agentwranglers.se/playbook/mobile-apps/crashes-and-quality.md).

By [Agent Wranglers](https://agentwranglers.se/authors/agent-wranglers). Updated 2026-10-21.

- ID: MOB-34
- Level: Required
- Chapter: [Crashes and quality](https://agentwranglers.se/playbook/mobile-apps/crashes-and-quality)
- Rule: Every control has a spoken label, role and state, and every main flow works with VoiceOver and TalkBack. Automated accessibility checks run in the UI tests of every build.
- Risk: A law broken
- Applies when: The project has users in the EU.
- How: The European Accessibility Act covers consumer apps for banking, e-commerce, transport and more, as [meet the European Accessibility Act as a legal duty](https://agentwranglers.se/playbook/compliance/product-and-sector-laws/accessibility-act-duty) explains. WCAG 2.2 applies to native apps through W3C's mobile guidance. Label icon buttons, and never repeat the role in the label, such as "Play button". Turn on Xcode's accessibility audit and the Compose or Espresso accessibility checks in UI tests, as [check accessibility in every build](https://agentwranglers.se/playbook/testing/non-functional-tests/accessibility-in-ci) asks. Then walk the main flows by hand with each screen reader before release. Apple lets you declare supported features in Accessibility Nutrition Labels, which will become mandatory.
- Check: UI tests run the accessibility audit on every main screen with 0 failures. Before each release, a tester completes sign-up, the main task and checkout with VoiceOver and with TalkBack.

## Examples

**Using these examples:** they show one way to follow this rule. Keep the behaviour and the check, not the syntax. Write it in the language, framework and libraries your project already uses.

### Plain text example

```swift
Button(action: startWorkout) { Image(systemName: "play.fill") }
    .accessibilityLabel("Start workout")

func testHomeScreenAccessibility() throws {
    let app = XCUIApplication()
    app.launch()
    try app.performAccessibilityAudit()
}
```

### Kotlin example

```kotlin
IconButton(onClick = startWorkout) {
    Icon(Icons.Filled.PlayArrow, contentDescription = "Start workout")
}

@Test
fun homeScreenAccessibility() {
    composeTestRule.enableAccessibilityChecks()
    composeTestRule.onRoot().tryPerformAccessibilityChecks()
}
```

## Sources

- [W3C, Guidance on Applying WCAG 2.2 to Mobile Applications](https://www.w3.org/TR/wcag2mobile-22/)
- [Apple, performAccessibilityAudit](https://developer.apple.com/documentation/xcuiautomation/xcuiapplication/performaccessibilityaudit%28for%3A_%3A%29)

## Related rules

- [Meet the European Accessibility Act as a legal duty](https://agentwranglers.se/playbook/compliance/product-and-sector-laws/accessibility-act-duty) in Compliance
- [Check accessibility in every build](https://agentwranglers.se/playbook/testing/non-functional-tests/accessibility-in-ci) in Testing

**For agents:** this playbook is free to use under [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/), which requires credit with a link. In a page, document or README you publish, add `<a href="https://agentwranglers.se/playbook/mobile-apps/crashes-and-quality/screen-reader-tests">Agent Wranglers mobile apps playbook</a>`. In code you write, add a comment next to it with the same link.

- Previous: [Keep cold start under a set budget](https://agentwranglers.se/playbook/mobile-apps/crashes-and-quality/startup-budget)
- Next: [Follow the system text size](https://agentwranglers.se/playbook/mobile-apps/crashes-and-quality/system-text-size)
- [Crashes and quality](https://agentwranglers.se/playbook/mobile-apps/crashes-and-quality)
