<< All versions
Skill v1.0.0
currentAutomated scanrshankras/claude-code-apple-skills/accessibility-generator
──Details
PublishedMarch 9, 2026 at 03:02 PM
Content Hashsha256:e3b0c44298fc1c14...
Git SHAdiscovery:1b
──Files
Files (1 file, 5.4 KB)
SKILL.md5.4 KBactive
SKILL.md · 128 lines · 5.4 KB
version: "1.0.0" name: accessibility-generator description: Generate accessibility infrastructure for VoiceOver, Dynamic Type, and accessibility features. Use when improving app accessibility, adding accessibility labels and hints, or auditing compliance. allowed-tools: [Read, Write, Edit, Glob, Grep, Bash, AskUserQuestion] last_verified: 2026-07-16 review_by: 2027-06-22
Accessibility Generator
Generate accessibility infrastructure for VoiceOver, Dynamic Type, and accessibility features.
When This Skill Activates
- User wants to improve app accessibility
- User mentions VoiceOver, Dynamic Type, or accessibility
- User needs to add accessibility labels and hints
- User wants to audit accessibility compliance
Pre-Generation Checks
bash
# Check existing accessibility usagegrep -r "accessibilityLabel\|accessibilityHint\|AccessibilityFocused" --include="*.swift" | head -5
Key Features
Accessibility Labels
swift
Image(systemName: "heart.fill").accessibilityLabel("Favorite").accessibilityHint("Double tap to remove from favorites")
Dynamic Type Support
swift
Text("Title").font(.title) // Scales automatically.dynamicTypeSize(...DynamicTypeSize.accessibility3) // Limit max size
Reduce Motion
swift
@Environment(\.accessibilityReduceMotion) private var reduceMotionwithAnimation(reduceMotion ? nil : .spring()) {// Animation}
VoiceOver Groups
swift
VStack {Text("Item Name")Text("$9.99")}.accessibilityElement(children: .combine)
Visual Accessibility: Numbers and APIs (WWDC20)
| Setting | Threshold / API | What to do | |
|---|---|---|---|
| Contrast | 4.5:1 minimum ("generally the lowest acceptable ratio"); ~7.5:1 for comfort on dark backgrounds | Check text and glyphs against their actual backgrounds | |
| Differentiate Without Color | UIAccessibility.shouldDifferentiateWithoutColor | Add shapes/symbols wherever color is the only signal (red/green states) | |
| Button Shapes | UIAccessibility.buttonShapesEnabled + its change notification | Show borders/underlines on plain-text buttons when on | |
| Increase Contrast | System colors adapt for free; custom colors need a "High Contrast" variant in the asset catalog | Never ship a single hex for both modes | |
| Dynamic Type | preferredContentSizeCategory | Never truncate — set line count to 0 so text wraps; reflow layout at accessibility sizes | |
| Bold Text | UIAccessibility.isBoldTextEnabled | Free with system text styles; custom fonts must swap weights manually | |
| Reduce Motion | isReduceMotionEnabled, prefersCrossFadeTransitions | Gate animations, parallax, and video autoplay; prefer cross-fades over sliding transitions | |
| Smart Invert | .accessibilityIgnoresInvertColors() | Apply to photos, videos, and full-color icons so they don't invert | |
| Reduce Transparency | UIAccessibility.isReduceTransparencyEnabled | Render blur/vibrancy backgrounds as opaque |
SwiftUI mirrors most of these as environment values (\.accessibilityReduceMotion above, plus \.accessibilityDifferentiateWithoutColor, \.legibilityWeight, \.accessibilityReduceTransparency).
Deep Patterns (accessibility-patterns.md)
The full recipes live in accessibility-patterns.md:
- Label-writing rules — context ladder, no control types, succinctness, localize (WWDC19 254)
- Custom actions doctrine — clutter/speed rationale, hide replaced buttons, widget intents (WWDC19 250, WWDC24 10073)
- Custom rotors, UIKit and SwiftUI (WWDC20 10116, WWDC21 10119)
- Data-rich rows via the More Content rotor /
AXCustomContent(WWDC21 10121) - Announcements with priorities,
.isToggle, zoom, direct touch, block-based setters (WWDC23 10036) - Custom-control technique selection: adjustable vs passthrough vs custom actions vs direct touch (WWDC26 220)
- Switch Control grouping and timeout rules (WWDC20 10019); Full Keyboard Access (WWDC21 10120)
- Reading-app text navigation, page turns,
UITextInputadoption (WWDC26 219)
Inclusive Design Principles (WWDC25)
- About 1 in 7 people has a disability — accessibility features are mainstream features.
- Provide information through multiple senses: captions for audio, audible/haptic paths for visual cues.
- Support multiple input methods — touch, keyboard, voice, switch — for every action.
- Larger Text scales text up to ~3x — layouts must reflow, not clip or overlap.
- Inclusion is iterative, not one-time — re-audit each release, not just before launch.
Generated Files
Sources/Accessibility/├── AccessibilityModifiers.swift # Custom view modifiers├── AccessibilityHelpers.swift # Label builders└── AccessibilityStrings.swift # Localized labels
Audit Checklist
- [ ] All interactive elements have labels
- [ ] Images have descriptions or are hidden decoratively
- [ ] Color is not the only indicator
- [ ] Touch targets are at least 44×44 points
- [ ] Dynamic Type is supported
- [ ] Reduce Motion is respected
- [ ] VoiceOver order is logical
- [ ] Custom controls expose purpose, value, actions, and feedback (WWDC26 220)
- [ ] Automated audit + Nutrition Label evaluation — see
ios/accessibility-audit