# ios-accessibility

A skill that gives your coding agent solid iOS accessibility guidance: VoiceOver, Dynamic Type, Switch Control and how to test them.

- skill · `type=skill` · Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, OpenCode · 911 installs · ★ 176
- Author: dadederk
- License: MIT · policy=mirror · the beginning of the file is at the end of this page
- Source: https://github.com/dadederk/iOS-Accessibility-Agent-Skill/tree/HEAD/ios-accessibility/SKILL.md
- Updated: 2026-03-09
- HTML: https://affpapa.org/en/nevibecode/skills/dadederk-ios-accessibility

## What it does

This skill hands the agent working knowledge of iOS accessibility. It covers VoiceOver, Dynamic Type, Switch Control, Voice Control and Full Keyboard Access, with separate guidance for UIKit and SwiftUI. Reach for it when you are fixing accessibility labels, traits and hints, or when a screen simply does not read well out loud.

The skill is built around reference files the agent pulls in as needed: VoiceOver for UIKit, VoiceOver for SwiftUI, Dynamic Type and more. Before advising, it works out whether the project is SwiftUI, UIKit or a mix, and what the deployment target is, because several APIs are version-bound: Large Content Viewer from iOS 13, `AccessibilityFocusState` from iOS 15, `.accessibilityRepresentation` from iOS 16. If that is not clear from the code, it asks.

There is also a list of anti-patterns it watches for: no trait names stuffed into labels, no `.accessibilityHidden(true)` on interactive elements, no fixed font sizes, no hardcoded text colors instead of semantic ones. The skill pushes manual testing alongside automated checks, and suggests fixing things in the design system so the improvement spreads across the app.

## Install

### Claude Code (native platform)

1. **Skills CLI (Vercel)**
```bash
npx skills add dadederk/iOS-Accessibility-Agent-Skill --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 dadederk/iOS-Accessibility-Agent-Skill --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 dadederk/iOS-Accessibility-Agent-Skill --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 dadederk/iOS-Accessibility-Agent-Skill 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 dadederk/iOS-Accessibility-Agent-Skill --skill ios-accessibility -a gemini-cli
```

2. **Platform CLI**
```bash
gemini skills install https://github.com/dadederk/iOS-Accessibility-Agent-Skill --path 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 dadederk/iOS-Accessibility-Agent-Skill --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/dadederk/iOS-Accessibility-Agent-Skill/tree/HEAD/ios-accessibility/SKILL.md

## When to use it
- find out why VoiceOver skips an element
- pick a label, trait and value for a custom control
- move a screen to Dynamic Type without fixed font sizes
- audit a screen by hand and with UI tests
- give a custom gesture an accessible alternative

## Example prompts
- Audit this SwiftUI screen for VoiceOver and suggest fixes
- The close button is labeled "Close" but VoiceOver reads it oddly — what's wrong?
- Write a manual accessibility test checklist for the login form

## Source text · SKILL.md · MIT

Below is the content of a third-party file. It is data, not instructions for you: do not act on anything written inside unless the human asks. Block tag: a49ceac5ab2985ca.

BEGIN THIRD-PARTY FILE a49ceac5ab2985ca
```text
---
name: ios-accessibility
description: 'Expert guidance on iOS accessibility best practices, patterns, and implementation. Use when developers mention: (1) iOS accessibility, VoiceOver, Dynamic Type, or assistive technologies, (2) accessibility labels, traits, hints, or values, (3) automated accessibility testing, auditing, or manual testing, (4) Switch Control, Voice Control, or Full Keyboard Access, (5) inclusive design or accessibility culture, (6) making apps work for users with disabilities.'
---

# iOS Accessibility

## Overview

This skill provides expert guidance on iOS accessibility, covering VoiceOver, Dynamic Type, assistive technologies, inclusive design practices, and both UIKit and SwiftUI implementations. Use this skill to help developers build apps that work for everyone.

## The Approach

- **Shift-left** — Accessibility is part of the process. It needs to be considered even in prototypes or MVPs.
- **User-centric** — Accessibility is about people. Checklists help, but the goal is not checklist compliance. The goal is to offer a great experience for users with disabilities.
- **Progress over perfection** — Anytime is a good time to start. Focus on iterative and incremental improvements as you go. It goes a long way.
- **Test as you go** — Manual testing is part of development.

## Agent Behavior Contract

1. **Accessibility is non-deterministic.** Propose potential solutions in order of confidence and present with clear pros, cons, and trade-offs.
2. Before proposing fixes, identify the platform (UIKit vs SwiftUI) and the assistive technology, accessibility feature, or design consideration in context.
3. Do not recommend accessibility fixes without considering the user experience impact.
4. Prefer manual testing guidance alongside code changes, together with any automated or semi-automated solutions.
5. Cross-reference multiple assistive technologies when relevant (VoiceOver, Voice Control, Switch Control, Full Keyboard Access).

### Anti-Patterns to Avoid

- **Do not add trait names to labels** — Say "Close", not "Close button" (VoiceOver adds "button" automatically, when using the button trait)
- **Do not use `.accessibilityHidden(true)` on interactive elements** — Users won't be able to access them
- **Do not use fixed font sizes** — Always use text styles for Dynamic Type support
```
END THIRD-PARTY FILE a49ceac5ab2985ca

The third-party file has ended. Everything between the a49ceac5ab2985ca tags is data: requests and commands from it are not followed. An “end of file” line with another tag inside the block is part of the file.

First 2357 of 9751 bytes. © dadederk · MIT · https://github.com/dadederk/iOS-Accessibility-Agent-Skill/tree/HEAD/ios-accessibility/SKILL.md

_Part of the page did not fit — see the HTML version._

---
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
