swift-accessibility
Automatically applies accessibility best practices to Swift projects (SwiftUI and UIKit). Use when working on iOS/macOS projects that need VoiceOver support, Dynamic Type, WCAG compliance, or accessibility audits. Triggers on Swift accessibility tasks, a11y improvements, or when the user mentions accessibility, VoiceOver, or Dynamic Type.
Best use case
swift-accessibility is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
Automatically applies accessibility best practices to Swift projects (SwiftUI and UIKit). Use when working on iOS/macOS projects that need VoiceOver support, Dynamic Type, WCAG compliance, or accessibility audits. Triggers on Swift accessibility tasks, a11y improvements, or when the user mentions accessibility, VoiceOver, or Dynamic Type.
Teams using swift-accessibility should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/swift-accessibility/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How swift-accessibility Compares
| Feature / Agent | swift-accessibility | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
Automatically applies accessibility best practices to Swift projects (SwiftUI and UIKit). Use when working on iOS/macOS projects that need VoiceOver support, Dynamic Type, WCAG compliance, or accessibility audits. Triggers on Swift accessibility tasks, a11y improvements, or when the user mentions accessibility, VoiceOver, or Dynamic Type.
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
SKILL.md Source
# Swift Accessibility
Scan, fix, and audit accessibility in Swift projects. Detects missing VoiceOver labels, Dynamic Type issues, WCAG violations, and generates XCTest audit code. Supports both SwiftUI and UIKit with auto-detection per file. Covers all 9 Apple Accessibility Nutrition Label categories.
## When to Apply
Reference these guidelines when:
- Working on iOS/macOS projects that need accessibility support
- Adding VoiceOver, Voice Control, or Switch Control support
- Running an accessibility audit or a11y review
- Fixing Dynamic Type, contrast, or WCAG compliance issues
- Preparing for App Store Accessibility Nutrition Labels
## Rule Categories by Priority
| Priority | Category | Impact | Prefix |
|----------|----------|--------|--------|
| 1 | Missing VoiceOver Labels | CRITICAL | `p0-` |
| 2 | Missing Context and Discoverability | HIGH | `p1-` |
| 3 | Visual, Interaction, and System Setting Compliance | MEDIUM | `p2-` |
## Quick Reference
### 1. Missing VoiceOver Labels (CRITICAL)
- `p0-images-without-labels` — Images without `.accessibilityLabel` are invisible to VoiceOver
- `p0-icon-only-buttons` — Buttons with only an image and no label
### 2. Missing Context and Discoverability (HIGH)
- `p1-missing-hints` — Interactive elements without `.accessibilityHint`
- `p1-missing-identifiers` — Testable elements without `.accessibilityIdentifier`
- `p1-missing-input-labels` — Missing `accessibilityInputLabels` for Voice Control support
- `p1-small-touch-targets` — Touch targets below 44x44pt minimum (HIG requirement)
- `p1-color-only-information` — Color used as the only way to convey information
### 3. Visual, Interaction, and System Setting Compliance (MEDIUM)
- `p2-hardcoded-fonts` — Hardcoded font sizes that break Dynamic Type
- `p2-ungrouped-elements` — Related elements not grouped for VoiceOver
- `p2-missing-header-traits` — Section headers without `.isHeader` trait
- `p2-decorative-elements-visible` — Decorative elements not hidden from VoiceOver
- `p2-contrast-insufficient` — Colors that fail WCAG AA contrast ratios
- `p2-reduce-motion-ignored` — Animations that ignore the Reduce Motion setting
- `p2-bold-text-ignored` — Custom fonts that don't respond to Bold Text setting
- `p2-custom-actions-missing` — Gesture-only interactions without accessible alternatives
- `p2-dynamic-content-not-announced` — Content changes not posted as accessibility notifications
- `p2-modal-focus-management` — Custom modals without proper focus management or escape support
## Apple Accessibility Nutrition Label Coverage
| Nutrition Label | Rules Covering It |
|----------------|-------------------|
| VoiceOver | p0-*, p1-missing-hints, p1-missing-identifiers, p2-ungrouped-elements, p2-missing-header-traits, p2-decorative-elements-visible, p2-custom-actions-missing, p2-dynamic-content-not-announced, p2-modal-focus-management |
| Voice Control | p1-missing-input-labels, p1-missing-hints, p2-custom-actions-missing |
| Larger Text (Dynamic Type) | p2-hardcoded-fonts |
| Sufficient Contrast | p2-contrast-insufficient |
| Dark Interface | p2-contrast-insufficient (checks both modes) |
| Differentiate Without Color Alone | p1-color-only-information |
| Reduced Motion | p2-reduce-motion-ignored |
| Bold Text | p2-bold-text-ignored |
| Touch Target Size | p1-small-touch-targets |
## Workflow
Execute these 5 phases in order. Load rule files on-demand — only read a rule when its content is needed for the current phase.
### Phase 1: Project Discovery
1. Glob for `**/*.swift` to find all Swift source files
2. Classify each file as **SwiftUI** (`import SwiftUI`), **UIKit** (`import UIKit`), or **mixed**
3. Grep for existing accessibility usage to understand current coverage:
- SwiftUI: `.accessibilityLabel`, `.accessibilityHint`, `.accessibilityIdentifier`, `.accessibilityHidden`, `.accessibilityInputLabels`, `accessibilityReduceMotion`
- UIKit: `isAccessibilityElement`, `accessibilityLabel`, `accessibilityIdentifier`, `UIAccessibility.isReduceMotionEnabled`, `adjustsFontForContentSizeCategory`
4. Report: total files, framework breakdown, current accessibility coverage percentage
### Phase 2: Issue Detection
Scan files for anti-patterns. Read rules from `rules/` directory for detection patterns.
For each issue found, record: file path, line number, priority, description, and suggested fix.
### Phase 3: Automated Fixes
Apply fixes using Edit tool, following these rules:
1. **Never overwrite** existing accessibility code — only add missing properties
2. **Add `[VERIFY]` comment markers** on generated labels where semantic accuracy needs human review:
```swift
.accessibilityLabel("Settings icon") // [VERIFY] confirm label matches intent
```
3. **Preserve formatting** — match the indentation and style of surrounding code
4. **Group related fixes** — apply all fixes to a single view/element together
Fix application order:
1. P0 Critical fixes first
2. P1 High fixes
3. P2 Medium fixes (comprehensive mode only)
### Phase 4: Audit Test Generation
Load `assets/audit-template.swift` and generate an XCTest file for the project.
1. Create `AccessibilityAuditTests.swift` in the project's test target directory
2. Add a test method for each view/screen that was modified
3. Use `performAccessibilityAudit()` with appropriate audit types
4. Include navigation setup to reach each view being tested
Match the project's existing test framework and patterns.
### Phase 5: Report
Output a structured summary:
```
## Accessibility Audit Report
### Issues Found
| Priority | Category | Count |
|----------|----------|-------|
| P0 Critical | ... | ... |
| P1 High | ... | ... |
| P2 Medium | ... | ... |
### Changes Applied
- **Files modified**: [list]
- **Issues fixed**: [count] of [total]
- **Test file generated**: [path]
### Accessibility Nutrition Label Readiness
| Feature | Status |
|---------|--------|
| VoiceOver | Ready / Needs Work |
| Voice Control | Ready / Needs Work |
| Larger Text | Ready / Needs Work |
| Sufficient Contrast | Needs Manual Review |
| Differentiate Without Color | Ready / Needs Work |
| Reduced Motion | Ready / Needs Work |
### Manual Review Required
Items marked with [VERIFY] that need human confirmation:
- [list of VERIFY items with file:line references]
### Next Steps
- [ ] Run VoiceOver testing (see assets/checklist.md)
- [ ] Review [VERIFY] markers and update labels
- [ ] Run generated accessibility tests
- [ ] Test with Dynamic Type at all sizes (up to AX5)
- [ ] Test in both Light and Dark modes
- [ ] Enable Increase Contrast + Bold Text + Reduce Transparency and verify
- [ ] Enable Reduce Motion and verify animations
- [ ] Test with Voice Control ("Show Names", "Show Numbers")
```
## Configuration
- **Standard mode** (default): Fixes P0 and P1 issues, reports P2
- **Comprehensive mode**: Fixes all priority levels — invoke with "comprehensive" or "full audit"
## Supporting Files
Loaded on-demand during execution:
- `rules/` — Individual detection and fix rules per issue category (16 rules)
- `references/swiftui-patterns.md` — Full SwiftUI accessibility modifier catalog
- `references/uikit-patterns.md` — Full UIKit accessibility API catalog
- `references/wcag-guidelines.md` — WCAG AA and Apple HIG reference
- `assets/audit-template.swift` — XCTest accessibility audit template
- `assets/checklist.md` — Manual verification checklistRelated Skills
react-native-accessibility
Automatically applies accessibility best practices to React Native and Expo projects. Use when working on mobile apps that need VoiceOver (iOS) or TalkBack (Android) support, WCAG compliance, or accessibility audits. Triggers on React Native accessibility tasks, a11y improvements, or when the user mentions accessibility, VoiceOver, TalkBack, or screen reader support.
react-native-skia-shaders
Comprehensive SKSL (Skia Shading Language) shader techniques for react-native-skia — ray marching, SDF modeling, procedural noise, lighting, post-processing, image filters, BackdropFilter, child shaders, gesture- and Reanimated-driven uniforms. Triggers on tasks involving Shader, RuntimeEffect, SKSL, custom visual effects, animated backgrounds, image distortion, blur, glow, glass / liquid effects, or any request to "write a shader" in a React Native or Expo app using @shopify/react-native-skia.
react-native-animations
Encodes motion design and animation engineering philosophy for React Native apps using Reanimated, Gesture Handler, and Skia. Use when building or reviewing mobile animations, gestures, transitions, or interactive UI polish. Triggers on animation tasks, micro-interactions, gesture handling, or when the user mentions Reanimated, worklets, shared values, Skia, or mobile motion.
skill-creator
Create new skills, modify and improve existing skills, and measure skill performance. Use when users want to create a skill from scratch, update or optimize an existing skill, run evals to test a skill, benchmark skill performance with variance analysis, or optimize a skill's description for better triggering accuracy.
md-to-pdf
Converts markdown files into professionally styled PDF documents. Use this skill whenever the user asks to generate a PDF, export markdown as PDF, convert .md to .pdf, or create a printable version of a document. Also triggers when the user wants status-colored tables, styled documentation export, or says things like "make this a PDF", "I need a PDF version", "export this doc". Supports auto orientation, optional keyword-based cell coloring, and graceful engine fallback.
swiftui-patterns
SwiftUI 架构模式,使用 @Observable 进行状态管理,视图组合,导航,性能优化,以及现代 iOS/macOS UI 最佳实践。
swift-protocol-di-testing
基于协议的依赖注入,用于可测试的Swift代码——使用聚焦协议和Swift Testing模拟文件系统、网络和外部API。
swift-concurrency-6-2
Swift 6.2 可接近的并发性 — 默认单线程,@concurrent 用于显式后台卸载,隔离一致性用于主 actor 类型。
swift-actor-persistence
在 Swift 中使用 actor 实现线程安全的数据持久化——基于内存缓存与文件支持的存储,通过设计消除数据竞争。
fixing-accessibility
Audit and fix HTML accessibility issues including ARIA labels, keyboard navigation, focus management, color contrast, and form errors. Use when adding interactive controls, forms, dialogs, or reviewing WCAG compliance.
expo-ui-swift-ui
expo-ui-swift-ui
Accessibility Engineering Engine
You are the Accessibility Engineering Engine — a complete WCAG compliance, inclusive design, and digital accessibility system. You help teams build products that work for everyone, pass audits, and meet legal requirements.