ios-accessibility
Procedure for reviewing and verifying iOS accessibility — VoiceOver, Dynamic Type, contrast, hit targets, Switch Control, Reduce Motion — with an explicit…
Skill by apexbymanish
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/apexbymanish-ios-accessibility
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: design
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/ios-accessibility
What's inside
- Skill name
ios-accessibility- Description
- Procedure for reviewing and verifying iOS accessibility — VoiceOver, Dynamic Type, contrast, hit targets, Switch Control, Reduce Motion — with an explicit static-vs-runtime split. Use when asked to "make this accessible", check VoiceOver support, or evaluate accessibility beyond the visual-consistency checks ios-ux-reviewer already does.
- License
- MIT
- Instructions
- 133 lines in SKILL.md · view on GitHub
Files (1)
- SKILL.md
SKILL.md (first lines)
# iOS Accessibility
## Purpose
Check accessibility with the same static-vs-runtime discipline this
repo applies everywhere else. A code read can find real, concrete
problems (a missing label, a fixed font size) — it cannot confirm
"fully accessible," which is a claim only actual assistive-technology
use can support.
## When to Use
Any request to review or improve accessibility beyond
`ios-ux-reviewer`'s visual/HIG checklist — VoiceOver behavior,
Dynamic Type, contrast, tap targets, Switch Control, Reduce Motion, or
accessibility notifications.
## Inputs
- The actual view code — labels, traits, hints, font choices,
frame/padding values, animation code.
- Whether the project's test target uses
`XCUIApplication().performAccessibilityAudit()` (Xcode 15+) — a real
automated audit API, not a manual checklist substitute (see
Verification).
## Core Knowledge
- **STATIC REVIEW** (reading code) can find: a missing
`accessibilityLabel` on an icon-only control, a missing
`accessibilityTraits` on a custom (non-standard) control, a fixed
point-size font instead of a Dynamic-Type-scalable one, a tap target
smaller than 44×44pt, and state conveyed by color alone with no
icon/text backup.
- **RUNTIME ACCESSIBILITY VERIFICATION** (actually running with
VoiceOver/Switch Control/Reduce Motion enabled, or running an
automated audit) is a different, stronger claim — it can catch
things static review cannot, like whether VoiceOver's reading order
actually makes sense, or whether a custom gesture has no alternative
action for Switch Control users.
- **`XCUIApplication().performAccessibilityAudit()`** (Xcode 15+) runs
a real automated audit against categories including contrast,
hit-target size, and missing labels — this is `TEST_VERIFIED`
evidence when it's actually run, not a manual checklist substitute.
- **Reduce Motion** (`UIAccessibility.isReduceMotionEnabled`) — custom
animations/transitions that don't check this setting force motion on
users who've explicitly asked to reduce it, which for some users is
a vestibular-disorder trigger, not just a preference.
- **Accessibility notifications** — dynamic content changes that don't
trigger navigation (an async load finishing, a form field appearing)
need an explicit `UIAccessibility.post(notification:)` (`.screenChanged`
or `.announcement`) or VoiceOver users get no signal anything changed.
## Detection Patterns
| Pattern | Risk | Detect by |
|---|---|---|
| Icon-only button/control with no `accessibilityLabel` | VoiceOver reads the asset filename or just "button" — the control is functionally unusable | grep for image-only buttons/icons; check for a matching label |
| Custom (non-standard) control with no `accessibilityTraits` | VoiceOver doesn't announce it as a button/toggle/etc. — users can't tell what it does or that it's interactive | Any hand-rolled tappable view not using a standard `Button`/`Toggle`/etc. |
| Fixed point-size font (`.font(.system(size: 14))`) instead of a Dynamic-Type-scalable style | Text doesn't grow for users who've increased their text size — a real usability barrier, not a preference | grep fixed-size font modifiers on user-facing text |
| Tap target smaller than 44×44pt | Mis-taps for users with limited dexterity or larger fingers | Check frame/padding values against the 44pt minimum |
| State conveyed by color alone (e.g. a red border for an error, no icon/text) | Inaccessible to colorblind users and to VoiceOver (color has no audible representation) | Look for color-only state changes with no accompanying icon/text |
| Custom animation/transition with no Reduce Motion check | Forces motion on users who've explicitly disabled it | grep for custom animation code with no `isReduceMotionEnabled` check |
| Swipe-only or gesture-only interaction with no alternative action | Unusable via Switch Control, which can't perform complex gestures | Check whether an `accessibilityAction` alternative exists alongside the gesture |
| Compound view (icon + label) exposed as separate VoiceOver elements when they should announce together | VoiceOver users hear two fragments instead of one coherent announcement | Check for `.accessibilityElement(children: .combine)` (or `.ignore` with an explicit combined label) on compound controls |
| Async content change with no accessibility notification | VoiceOver users get no signal that new content appeared without a navigation event | grep for state updates from async work with no `UIAccessibility.post(notification:)` call |
## Procedure
1. Read the actual view code and check the static patterns above.
2. For each finding, state the concrete assistive-technology
consequence (which user, using what technology, hits what problem)
— not "may have accessibility issues."
3. If the project's test target has `performAccessibilityAudit()`
available, recommend running it — and if it's already run, use its
actual output as `TEST_VERIFIED` evidence, not a description of what
it would probably find.
4. Explicitly separate what was found by static review from what would
need VoiceOver/Switch Control/Reduce Motion actually enabled to
confirm.
5. If accessibility identifiers for UI testing (not VoiceOver labels)
are what's actually needed, hand off to `ios-ui-test-engineer` —
related but a different concern (testability, not assistive tech).
## Common Mistakes
- Treating a comprehensive static checklist pass as "fully accessible"
— static review cannot confirm VoiceOver's actual reading order or
Switch Control usability.
- Adding an `accessibilityLabel` that just restates the visible text
redundantly instead of describing function ("Photo of sunset" vs.
"photo" when the surrounding text already says "sunset").
- Confusing `accessibilityIdentifier` (for UI test selectors) with
`accessibilityLabel` (for VoiceOver) — they serve different purposes
and a control usually needs both, not one standing in for the other.
## Verification
- A missing-label/trait/Dynamic-Type/tap-target/color-only finding from
reading code is `STATIC_ANALYSIS`.
- `performAccessibilityAudit()` actually run and its output shown is
`TEST_VERIFIED`.
- VoiceOver/Switch Control/Reduce Motion actually enabled and the
behavior actually observed is `RUNTIME_VERIFIED`.
## Evidence Requirements
Per `ios-evidence-reporting`'s matrix, "fully accessible" is never
claimable from static inspection — state what was checked (which
categories, which screens) and what remains unverified rather than
implying completeness.
## Claim Restrictions
- Never say "fully accessible" or "accessible" as a blanket claim —
report per-category findings (labels, contrast, Dynamic Type, motion,
Switch Control) with their own evidence tier each.
- Never claim VoiceOver reading order is correct without actually
having heard it (`RUNTIME_VERIFIED`) or run an automated auditFrom apexbymanish/claude-ai-agents-ios, MIT.
More from apexbymanish/claude-ai-agents-ios
- 0.524score
swiftui-engineering
apexbymanish
Procedure for reviewing SwiftUI code for state-ownership, view-identity, lifecycle, and rendering correctness — distinct from ios-ux-reviewer's visual/HIG…
SkillBFreshness: BClaude Code +9 - 0.524score
ios-api-availability
apexbymanish
Procedure for determining whether code actually works at a project's stated minimum iOS version — deployment target vs.
SkillBFreshness: BClaude Code +9 - 0.524score
ios-app-store-readiness
apexbymanish
App Store submission readiness checklist covering privacy manifests, export compliance, permission usage descriptions, App Tracking Transparency, Sign in with…
SkillBFreshness: BClaude Code +9 - 0.524score
ios-testing-strategy
apexbymanish
Step-by-step procedure for adding tests to existing Swift/iOS code, whether untested legacy code or new TDD work.
SkillBFreshness: BClaude Code +9 - 0.524score
ios-feature-implementation
apexbymanish
Structured procedure for implementing a new feature or change in an existing iOS codebase — inspect and explain before touching files, then implement, then…
SkillBFreshness: BClaude Code +9 - 0.524score
ios-legacy-mapping
apexbymanish
Step-by-step procedure for mapping an undocumented, unfamiliar, or large legacy iOS codebase (Objective-C, UIKit, SwiftUI, or a mix) before making changes.
SkillBFreshness: BClaude Code +9 - 0.524score
ios-performance-measurement
apexbymanish
Procedure for confirming a performance fix actually worked, with a real number, instead of asserting improvement from reading code.
SkillBFreshness: BClaude Code +9 - 0.524score
ios-security-review
apexbymanish
Comprehensive security audit procedure for iOS/Swift code covering data storage, transport security, authentication, input validation, deep links, third-party…
SkillBFreshness: BClaude Code +9 - 0.524score
swift-concurrency
apexbymanish
Procedure for reviewing real Swift code for concurrency correctness — async/await, actors, Sendable, cancellation, task lifetime — not a Swift Concurrency…
SkillBFreshness: BClaude Code +9 - 0.521score
ios-evidence-reporting
apexbymanish
Standard for reporting task outcomes with verifiable evidence instead of confident prose.
SkillBFreshness: BClaude Code +9
Signals
- Stars
- 0
- Forks
- 0
- Open issues
- 0
- Last commit (this folder)
- Aug 28, 2026 (2 months ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- MIT
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from apexbymanish
- 0.524score
swiftui-engineering
apexbymanish
Procedure for reviewing SwiftUI code for state-ownership, view-identity, lifecycle, and rendering correctness — distinct from ios-ux-reviewer's visual/HIG…
SkillBFreshness: BClaude Code +9 - 0.524score
ios-api-availability
apexbymanish
Procedure for determining whether code actually works at a project's stated minimum iOS version — deployment target vs.
SkillBFreshness: BClaude Code +9 - 0.524score
ios-app-store-readiness
apexbymanish
App Store submission readiness checklist covering privacy manifests, export compliance, permission usage descriptions, App Tracking Transparency, Sign in with…
SkillBFreshness: BClaude Code +9 - 0.524score
ios-testing-strategy
apexbymanish
Step-by-step procedure for adding tests to existing Swift/iOS code, whether untested legacy code or new TDD work.
SkillBFreshness: BClaude Code +9 - 0.524score
ios-feature-implementation
apexbymanish
Structured procedure for implementing a new feature or change in an existing iOS codebase — inspect and explain before touching files, then implement, then…
SkillBFreshness: BClaude Code +9 - 0.524score
ios-legacy-mapping
apexbymanish
Step-by-step procedure for mapping an undocumented, unfamiliar, or large legacy iOS codebase (Objective-C, UIKit, SwiftUI, or a mix) before making changes.
SkillBFreshness: BClaude Code +9
Cite this page
ios-accessibility skill. Agent Mart. https://agentmart.dev/skills/apexbymanish-ios-accessibility (last updated 2026-10-24)