VoiceOver
Keeping Score! is fully usable with VoiceOver, Apple’s built-in screen reader.
How It Works
Section titled “How It Works”Every interactive element in the app has an explicit accessibility label. VoiceOver reads these labels aloud as you navigate, giving you full control without seeing the screen.
Key Behaviors
Section titled “Key Behaviors”Player Rows
Section titled “Player Rows”Player rows in the gameplay view use .accessibilityElement(children: .combine) so VoiceOver reads them as a single element:
“Alice, rank 1, 42 points”
Gameplay rows also include a hint — “Double tap to open calculator” — so the calculator entry point is discoverable.
Calculator
Section titled “Calculator”Calculator buttons carry the .isKeyboardKey trait, matching Apple’s built-in Calculator app. This means:
- Keys are announced by their label (e.g., “7”, “plus”, “equals”)
- Operator keys announce their function (e.g., “multiply”, “divide”)
- VoiceOver users get the familiar calculator experience
All icon-only calculator controls (undo, backspace, operators) have explicit labels.
Date Headers
Section titled “Date Headers”Date section headers in score and game history carry the .isHeader trait, so VoiceOver’s rotor can jump between days.
Decorative Elements
Section titled “Decorative Elements”Chevrons, the person icon inside combined rows, and other visual decorations are hidden from VoiceOver so they don’t clutter navigation. All the information they convey is available through labels on functional elements.
Buttons
Section titled “Buttons”All icon-only buttons — toolbar buttons, calculator operators, undo, backspace, the game menu — have descriptive labels rather than being read as their glyph.
- The app uses standard SwiftUI navigation patterns, so VoiceOver gestures work as expected
- Player scores update live — VoiceOver announces changes as they happen
- The AirPlay display uses fixed fonts and doesn’t support VoiceOver (it’s designed for visual display on a shared screen)
Related Features
Section titled “Related Features”- Dynamic Type — Large text support
- Visual Accessibility — Color and contrast
Is the entire app accessible with VoiceOver?
Section titled “Is the entire app accessible with VoiceOver?”Yes. Every screen, button, and interactive element has accessibility labels. The app has been designed with VoiceOver support from the ground up.
How are score changes announced?
Section titled “How are score changes announced?”When a score changes, VoiceOver announces the new score for the affected player. The announcement includes the player name, new rank, and updated score.