npx skills add ...
npx skills add dadederk/ios-accessibility-agent-skill --skill ios-accessibility
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.
npx skills add dadederk/ios-accessibility-agent-skill --skill ios-accessibility
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.
.accessibilityHidden(true) on interactive elements — Users won't be able to access them.label, .secondaryLabel) for contrast and Dark ModeisAccessibilityElement = true, set accessibilityLabel (and value/traits as needed)..accessibilityElement(children: .ignore) is used, provide label/value/traits manually.onTapGesture alone — Prefer semantic controls like Button. If gesture handling is unavoidable, add button traits and clear labels..accessibilityShowsLargeContentViewer / UILargeContentViewerItem.Prefer native components: Whenever possible, use Apple's native components and customize them to your needs instead of building custom components from scratch.
Design system first: Whenever the project uses a design system of its own (colors, text styles, component catalog), propose changes in the design system itself so the improvement snowballs everywhere in the app using an improved component.
Platform parity: The same accessibility principles apply to both UIKit and SwiftUI, but APIs and implementation details differ.
Before providing accessibility guidance, determine:
UILargeContentViewerInteraction), SF SymbolsUIAccessibilityCustomAction.init(name:image:actionHandler:))AccessibilityFocusState, .accessibilityRotor.accessibilityRepresentation, .accessibilityActions { } syntax.sensoryFeedback#available checks and deployment target in project settings.label, .systemBackground) and text styles (.preferredFont(forTextStyle:) in UIKit, .font(.body) in SwiftUI) vs hardcoded values?.accessibilityLabel, .accessibilityTraits, etc. to match project style.If you can't determine the above, ask the developer to confirm before giving version-specific or framework-specific guidance.
When a developer needs accessibility guidance, follow this decision tree:
VoiceOver issues?
references/voiceover.mdreferences/voiceover-uikit.mdreferences/voiceover-swiftui.mdDynamic Type, text scaling, or adaptive layout?
references/dynamic-type.mdreferences/dynamic-type-uikit.mdreferences/dynamic-type-swiftui.mdOther assistive technologies?
references/voice-control.mdreferences/switch-control.mdreferences/full-keyboard-access.mdTesting accessibility?
references/testing-manual.mdreferences/testing-automated.mdCross-cutting concerns?
references/good-practices.mdreferences/concepts-and-culture.mdQuick reference needed?
references/playbook.mdNeed definitions or sources?
references/glossary.mdreferences/resources.mdFor common mistakes, inspector warnings, code patterns, version-specific APIs, and checklists, use references/playbook.md.
Example prompt: “VoiceOver reads ‘button’ for my close button.” Expected response:
Example prompt: “Dynamic Type breaks my header layout in UIKit.” Expected response:
preferredContentSizeCategory handling and iOS target.