Apple Platform Accessibility
Make essential content and actions perceivable, operable, understandable, and testable across supported assistive technologies.
Contents
Scope and Compatibility
This skill owns semantic labels/values/traits, grouping and traversal, custom actions, focus, Dynamic Type, contrast, motion/transparency preferences, Voice Control, keyboard access, and accessibility verification. Route visual layout implementation to the relevant UI skill and App Store declaration policy to app-store-review when submission readiness is the main request.
Inspect deployment target, platform, UI framework, and supported device classes before selecting APIs. Preserve existing interaction behavior unless remediation requires a change, and verify versioned APIs in SDK headers or primary Apple documentation.
Audit Workflow
- Identify the screen's essential information, primary actions, state changes, errors, and time-sensitive content.
- Inspect semantic output rather than inferring accessibility from visual appearance.
- Test navigation order, labels, values, traits, actions, focus, text scaling, contrast, Reduce Motion, Reduce Transparency, and keyboard/Voice Control paths that apply.
- Fix the narrowest semantic or layout boundary while preserving ordinary interaction.
- Re-run automated checks and manually exercise the affected assistive-technology path.
Read Accessibility Patterns for SwiftUI/UIKit/AppKit recipes, focus management, rotors, and XCTest examples.
Semantic Rules
- Prefer native controls because they provide semantics and interaction behavior together.
- Give every essential control an understandable accessible name; avoid labels that merely repeat the control type.
- Expose changing state through value or traits, not only color or animation.
- Combine children only when the combined element remains understandable and actionable.
- Hide decorative content, but never hide information needed to understand state or complete a task.
- Add named accessibility actions when a gesture or context menu is otherwise undiscoverable.
- Announce important asynchronous outcomes without flooding the user with routine updates.
- Keep focus order aligned with reading and task order; restore focus after modal or destructive transitions when needed.
Layout and Preferences
Support accessibility text sizes without clipping essential content or forcing a fixed horizontal layout. Let controls grow, wrap, or change axis where necessary. Minimum target size is a usability floor, not a substitute for spacing and clear labels.
Respect system preferences including Reduce Motion, Reduce Transparency, Differentiate Without Color, Increased Contrast, and Button Shapes when the UI depends on those channels. Route animation alternatives to swiftui-animation, ordinary container construction to swiftui-layout-components, and cross-size clipping or reflow fixes to swiftui-responsive-layout.
Media work should read Media Accessibility for captions, audio descriptions, and playback controls.
Verification
Automated accessibility audits and identifier-based UI tests catch regressions but do not prove usability. Manually test the core task with VoiceOver and the relevant input methods. Use Accessibility Inspector to inspect element hierarchy, names, values, actions, and contrast.
Do not claim App Store accessibility support from implementation alone. Read Accessibility Nutrition Labels, gather test evidence, and scope declarations to the platforms and features actually verified.
Common Mistakes
- Using icon-only buttons without an explicit
.accessibilityLabel.
- Implementing custom tap or swipe gestures without an equivalent
.accessibilityAction.
- Hardcoding fixed frame heights or widths that truncate text when Dynamic Type is scaled.
- Conveying essential status or validation solely through color without text or symbol indicators.
- Setting misleading accessibility traits (e.g. marking a non-interactive view as a
.isButton).
Review Checklist
References
- Implementation, focus, rotors, and testing patterns
- Media accessibility
- App Store Accessibility Nutrition Labels
1---2name: ios-accessibility3description: Implement or audit accessibility for SwiftUI, UIKit, and AppKit, including VoiceOver, Dynamic Type, focus, actions, traversal, contrast, motion preferences, keyboard access, and accessibility testing. Use when accessibility behavior or compliance evidence is in scope.4---56# Apple Platform Accessibility78Make essential content and actions perceivable, operable, understandable, and testable across supported assistive technologies.910## Contents1112- [Scope and Compatibility](#scope-and-compatibility)13- [Audit Workflow](#audit-workflow)14- [Semantic Rules](#semantic-rules)15- [Layout and Preferences](#layout-and-preferences)16- [Verification](#verification)17- [Common Mistakes](#common-mistakes)18- [Review Checklist](#review-checklist)19- [References](#references)2021## Scope and Compatibility2223This skill owns semantic labels/values/traits, grouping and traversal, custom actions, focus, Dynamic Type, contrast, motion/transparency preferences, Voice Control, keyboard access, and accessibility verification. Route visual layout implementation to the relevant UI skill and App Store declaration policy to `app-store-review` when submission readiness is the main request.2425Inspect deployment target, platform, UI framework, and supported device classes before selecting APIs. Preserve existing interaction behavior unless remediation requires a change, and verify versioned APIs in SDK headers or primary Apple documentation.2627## Audit Workflow28291. Identify the screen's essential information, primary actions, state changes, errors, and time-sensitive content.302. Inspect semantic output rather than inferring accessibility from visual appearance.313. Test navigation order, labels, values, traits, actions, focus, text scaling, contrast, Reduce Motion, Reduce Transparency, and keyboard/Voice Control paths that apply.324. Fix the narrowest semantic or layout boundary while preserving ordinary interaction.335. Re-run automated checks and manually exercise the affected assistive-technology path.3435Read [Accessibility Patterns](references/a11y-patterns.md) for SwiftUI/UIKit/AppKit recipes, focus management, rotors, and XCTest examples.3637## Semantic Rules3839- Prefer native controls because they provide semantics and interaction behavior together.40- Give every essential control an understandable accessible name; avoid labels that merely repeat the control type.41- Expose changing state through value or traits, not only color or animation.42- Combine children only when the combined element remains understandable and actionable.43- Hide decorative content, but never hide information needed to understand state or complete a task.44- Add named accessibility actions when a gesture or context menu is otherwise undiscoverable.45- Announce important asynchronous outcomes without flooding the user with routine updates.46- Keep focus order aligned with reading and task order; restore focus after modal or destructive transitions when needed.4748## Layout and Preferences4950Support accessibility text sizes without clipping essential content or forcing a fixed horizontal layout. Let controls grow, wrap, or change axis where necessary. Minimum target size is a usability floor, not a substitute for spacing and clear labels.5152Respect system preferences including Reduce Motion, Reduce Transparency, Differentiate Without Color, Increased Contrast, and Button Shapes when the UI depends on those channels. Route animation alternatives to `swiftui-animation`, ordinary container construction to `swiftui-layout-components`, and cross-size clipping or reflow fixes to `swiftui-responsive-layout`.5354Media work should read [Media Accessibility](references/media-accessibility.md) for captions, audio descriptions, and playback controls.5556## Verification5758Automated accessibility audits and identifier-based UI tests catch regressions but do not prove usability. Manually test the core task with VoiceOver and the relevant input methods. Use Accessibility Inspector to inspect element hierarchy, names, values, actions, and contrast.5960Do not claim App Store accessibility support from implementation alone. Read [Accessibility Nutrition Labels](references/nutrition-labels.md), gather test evidence, and scope declarations to the platforms and features actually verified.6162## Common Mistakes6364- Using icon-only buttons without an explicit `.accessibilityLabel`.65- Implementing custom tap or swipe gestures without an equivalent `.accessibilityAction`.66- Hardcoding fixed frame heights or widths that truncate text when Dynamic Type is scaled.67- Conveying essential status or validation solely through color without text or symbol indicators.68- Setting misleading accessibility traits (e.g. marking a non-interactive view as a `.isButton`).6970## Review Checklist7172- [ ] Essential controls have clear labels, values, traits, and hints where needed73- [ ] Meaning is not conveyed by color, shape, position, or motion alone74- [ ] Reading and focus order follows the task75- [ ] Custom gestures have accessible alternatives76- [ ] Dynamic Type works at accessibility sizes without losing essential content77- [ ] Motion/transparency/contrast preferences have appropriate behavior78- [ ] Errors and important completion states are exposed and announced appropriately79- [ ] Keyboard, Voice Control, Switch Control, or Full Keyboard Access paths are tested when in scope80- [ ] Automated audits pass and the primary flow is manually verified81- [ ] Store declarations are backed by current evidence8283## References8485- [Implementation, focus, rotors, and testing patterns](references/a11y-patterns.md)86- [Media accessibility](references/media-accessibility.md)87- [App Store Accessibility Nutrition Labels](references/nutrition-labels.md)