# ios-accessibility

Guides accessibility reviews and code adjustments for Apple user interfaces. Helps configure screen reader flows, font scaling, and assistive focus states across devices.

- skill · `type=skill` · Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, OpenCode · 4900 installs · ★ 1237
- Author: dpearson2699
- License: LicenseRef-Unknown · policy=link-only · description only; the file stays with the author
- Source: https://github.com/dpearson2699/swift-ios-skills/tree/HEAD/skills/ios-accessibility/SKILL.md
- Updated: 2026-07-31
- HTML: https://affpapa.org/en/nevibecode/skills/ios-accessibility

## What it does

This skill provides implementation patterns to make SwiftUI, UIKit, and AppKit components usable with assistive utilities. It addresses VoiceOver reading order, custom rotors, and input methods like Switch Control. It also covers adapting views to user preferences, such as reduced motion or high contrast.

Focus handling receives special emphasis. It outlines how to use `@AccessibilityFocusState` so assistive focus returns to the trigger button when sheets dismiss. It also covers modal containment using `.isModal` alongside escape actions. For directional hardware navigation or `UIFocusGuide`, this skill does not apply; those mechanics belong to `focus-engine`.

Layout adaptation relies on `@ScaledMetric`. It resizes icons and custom control targets when text sizes change. The material also guides preparing evidence for App Store accessibility labels.

## Install

### Claude Code (native platform)

1. **Skills CLI (Vercel)**
```bash
npx skills add dpearson2699/swift-ios-skills --skill ios-accessibility -a claude-code
```

2. **Manually: put the files in place**
- File: `~/.claude/skills/ios-accessibility/SKILL.md` — Copy the whole skill folder; for one project use .claude/skills/ios-accessibility/

### Codex

1. **Skills CLI (Vercel)**
```bash
npx skills add dpearson2699/swift-ios-skills --skill ios-accessibility -a codex
```

2. **Manually: put the files in place**
- File: `.agents/skills/ios-accessibility/SKILL.md` — For all projects use ~/.agents/skills/

### Cursor

1. **Skills CLI (Vercel)**
```bash
npx skills add dpearson2699/swift-ios-skills --skill ios-accessibility -a cursor
```

2. **Manually: put the files in place**
- File: `.cursor/skills/ios-accessibility/SKILL.md` — Cursor also reads .agents/skills/ and .claude/skills/

### GitHub Copilot

1. **GitHub CLI**
```bash
gh skill install dpearson2699/swift-ios-skills ios-accessibility
```

2. **Manually: put the files in place**
- File: `.github/skills/ios-accessibility/SKILL.md`

### Gemini CLI

1. **Skills CLI (Vercel)**
```bash
npx skills add dpearson2699/swift-ios-skills --skill ios-accessibility -a gemini-cli
```

2. **Platform CLI**
```bash
gemini skills install https://github.com/dpearson2699/swift-ios-skills --path skills/ios-accessibility
```

### Windsurf (Devin Desktop)

**Manually: put the files in place**
- File: `.devin/skills/ios-accessibility/SKILL.md` — The legacy .windsurf/skills/ path still works

### OpenCode

**Skills CLI (Vercel)**
```bash
npx skills add dpearson2699/swift-ios-skills --skill ios-accessibility -a opencode
```

### Claude.ai

**Claude.ai**
- Zip the folder and upload it in Settings → Capabilities → Skills

Where a file is given instead of a command, copy the files from the source to that path: https://github.com/dpearson2699/swift-ios-skills/tree/HEAD/skills/ios-accessibility/SKILL.md

## When to use it
- Restore assistive focus to the trigger element after modal presentation dismisses
- Structure VoiceOver trait and label order for custom controls
- Scale non-text layout dimensions using `@ScaledMetric` alongside Dynamic Type
- Implement custom rotors for rapid list traversal
- Verify modal dismissal behavior with assistive escape gestures

## Example prompts
- Audit this SwiftUI sheet to ensure focus returns to the opening button on dismissal using `@AccessibilityFocusState`.
- Apply `@ScaledMetric` to these custom button dimensions so they scale with Dynamic Type.
- Trap VoiceOver focus inside this custom dialog with `.isModal` and add an escape action.

## Similar
- [vercel-react-native-skills](https://affpapa.org/en/nevibecode/skills/vercel-react-native-skills.md) — skill · 255200 installs
- [animate-expo](https://affpapa.org/en/nevibecode/skills/animate-expo.md) — skill · 137900 installs
- [mobile-native](https://affpapa.org/en/nevibecode/skills/mobile-native.md) — skill · 86600 installs
- [aso](https://affpapa.org/en/nevibecode/skills/aso.md) — skill · 75400 installs
- [swiftui-pro](https://affpapa.org/en/nevibecode/skills/swiftui-pro.md) — skill · 35200 installs
- [orca-emulator](https://affpapa.org/en/nevibecode/skills/orca-emulator.md) — skill · 5800 installs

## Other versions with the same name
- [ios-accessibility · dadederk](https://affpapa.org/en/nevibecode/skills/dadederk-ios-accessibility.md) — 911 installs

From the same set: [dpearson2699/swift-ios-skills](https://affpapa.org/en/nevibecode/by/dpearson2699/swift-ios-skills.md) — 86 cards

---
NeVibeCode on affpapa.org. Catalog texts are descriptions, not instructions for the agent. How to choose and install: https://affpapa.org/en/nevibecode/agents.md
