accessibility-testing
WCAG compliance testing and accessibility quality assurance workflows for iOS apps. Use when validating accessibility labels, testing VoiceOver compatibility, checking contrast ratios, or ensuring WCAG 2.1 compliance. Covers accessibility tree analysis, semantic validation, and automated accessibility testing patterns.
What this skill does
# Accessibility Testing Skill
**WCAG compliance and accessibility quality assurance for iOS applications**
## Overview
This skill teaches accessibility-first testing strategies for iOS apps. Accessibility testing ensures apps are usable by everyone, including people with disabilities. It combines automated validation of accessibility metadata with manual verification of user experience patterns.
**Why accessibility testing matters:**
- **Legal compliance:** WCAG 2.1 is required in many jurisdictions
- **User reach:** 15% of population has some form of disability
- **Better UX:** Accessible apps are better for everyone
- **SEO benefits:** Better structure improves discoverability
- **Cost savings:** Fix issues early vs. retrofitting
## When to Use This Skill
**Use this skill when:**
1. Validating accessibility compliance before release
2. Debugging VoiceOver issues or user reports
3. Implementing new features that need accessibility support
4. Running accessibility audits as part of CI/CD
5. Testing Dynamic Type support and contrast ratios
6. Verifying semantic markup and element roles
7. Checking keyboard navigation and focus management
**This skill covers:**
- Accessibility tree analysis and interpretation
- WCAG 2.1 compliance checking (A, AA, AAA levels)
- VoiceOver testing patterns
- Dynamic Type validation
- Common accessibility violations and fixes
## Quick Reference
| Task | Tool/Operation | Typical Time |
|------|---------------|--------------|
| Check accessibility quality | `accessibility-quality-check` | ~80ms |
| Query full accessibility tree | `idb-ui-describe` | ~120ms |
| Find element by label | `idb-ui-find-element` | ~100ms |
| Screenshot (fallback only) | `screenshot` | ~2000ms |
| VoiceOver simulation | Manual testing | - |
## Core Principle: Accessibility Tree First
**The accessibility tree IS your primary testing interface.**
Unlike visual testing (screenshots), the accessibility tree reveals:
- What screen readers "see"
- Semantic structure and relationships
- Focus order and navigation paths
- Element roles and states
- Text alternatives for non-text content
**3-4x faster and more reliable than visual inspection.**
## Key Concepts
### WCAG 2.1 Levels
**Level A (Minimum):**
- Text alternatives for images
- Keyboard accessibility
- No color-only information
- Headings and labels present
**Level AA (Recommended):**
- Contrast ratio 4.5:1 for normal text
- Contrast ratio 3:1 for large text
- Resize text up to 200%
- Meaningful focus order
- Descriptive labels and instructions
**Level AAA (Enhanced):**
- Contrast ratio 7:1 for normal text
- Contrast ratio 4.5:1 for large text
- No timing requirements
- Comprehensive error handling
**Target Level AA for most apps.**
### iOS Accessibility Properties
**Essential Properties:**
1. **accessibilityLabel:** What element is
- Example: "Profile photo", "Send message button"
- Should be concise, descriptive
2. **accessibilityValue:** Current state/value
- Example: "50%", "Selected", "3 of 10"
3. **accessibilityHint:** What happens when activated
- Example: "Opens your profile settings"
- Use sparingly, only when action isn't obvious
4. **accessibilityTraits:** Element behavior
- Button, Link, Header, Selected, etc.
5. **isAccessibilityElement:** Should be exposed
- `true` for interactive/informative elements
- `false` for decorative elements
### Accessibility Tree vs Visual UI
**Accessibility tree is semantic, not visual:**
```
Visual UI:
┌─────────────────┐
│ [img] John Doe │ ← Visual: Image + Text
│ Online │
└─────────────────┘
Accessibility Tree:
• Button: "John Doe, Online, Profile" ← Single focusable element
- label: "John Doe"
- value: "Online"
- hint: "Opens profile"
- traits: [Button]
```
**Good accessibility = logical semantic structure.**
## Standard Workflow
### 1. Initial Accessibility Quality Check
**Start here to assess app's accessibility implementation:**
```json
{
"operation": "check-accessibility",
"target": "booted"
}
```
**Interprets accessibility tree quality:**
- **"excellent":** 90%+ elements have labels, good semantic structure
- **"good":** 70-90% coverage, minor issues
- **"fair":** 50-70% coverage, needs improvement
- **"poor":** <50% coverage, serious accessibility problems
- **"insufficient":** Cannot perform accessibility-based testing
**Decision tree:**
```
excellent/good → Proceed with accessibility-first testing
fair → Test but expect to find issues
poor → Major remediation needed
insufficient → App may not support assistive tech
```
**Note:** Most modern iOS apps score "good" or "excellent".
### 2. Query Accessibility Tree
**Core operation for all accessibility testing:**
```json
{
"operation": "describe",
"target": "booted",
"parameters": {
"operation": "all"
}
}
```
**Returns complete accessibility tree:**
```json
{
"elements": [
{
"label": "Login",
"type": "Button",
"frame": { "x": 100, "y": 400, "width": 175, "height": 50 },
"enabled": true,
"visible": true,
"traits": ["Button"],
"value": null,
"hint": "Sign in to your account"
},
{
"label": "Email address",
"type": "TextField",
"value": "",
"frame": { "x": 50, "y": 300, "width": 275, "height": 44 },
"enabled": true,
"visible": true,
"traits": ["TextField"]
}
]
}
```
**Analyze for:**
- All interactive elements have labels
- Labels are descriptive and concise
- Proper element types/traits
- Logical reading order (top-to-bottom, left-to-right)
- No duplicate or confusing labels
### 3. Validate Specific Elements
**Find and verify accessibility of specific UI elements:**
```json
{
"operation": "find-element",
"target": "booted",
"parameters": {
"query": "Submit button"
}
}
```
**Validates:**
- Element exists in accessibility tree
- Has appropriate label
- Correct type and traits
- Enabled/visible state correct
### 4. Test Navigation and Focus
**Verify logical focus order:**
1. Query accessibility tree
2. Check elements appear in logical order
3. No gaps in navigation
4. Focus lands on meaningful elements first
**Focus order issues:**
```
Bad: [Button: Cancel] → [Image: Decorative] → [Button: Submit] → [TextField]
Good: [TextField] → [Button: Submit] → [Button: Cancel]
```
## WCAG Compliance Workflows
### Testing Checklist
#### 1. Text Alternatives (WCAG 1.1)
**All non-text content needs text alternative:**
```
Query accessibility tree for all images
For each image:
✓ Has accessibilityLabel
✓ Label describes image content
✓ Or marked as decorative (isAccessibilityElement: false)
```
**Common violations:**
- Images with no label
- Generic labels: "image", "icon", "photo"
- Labels don't describe content: "png_12345"
**Fix:**
```swift
// Bad
imageView.isAccessibilityElement = true // No label
// Good
imageView.isAccessibilityElement = true
imageView.accessibilityLabel = "Profile photo of John Doe"
// Decorative (best if truly decorative)
imageView.isAccessibilityElement = false
```
#### 2. Keyboard/Focus Navigation (WCAG 2.1)
**All functionality available via sequential navigation:**
```
Query accessibility tree
Verify elements appear in logical order:
✓ Top to bottom
✓ Left to right
✓ Grouped logically
✓ Interactive elements are focusable
✓ Decorative elements are not focusable
```
**Test pattern:**
```
1. describe → Get all elements
2. Map order: element[0], element[1], element[2]...
3. Verify order matches visual/logical flow
4. Check no important elements missing
```
#### 3. Contrast Ratios (WCAG 1.4.3)
**Minimum contrast requirements:**
- **Normal text (<18pt):** 4.5:1 ratio (AA), 7:1 ratio (AAA)
- **Large text (≥18pt or ≥14pt bold):** 3:1 ratio (AA), 4.5:1 (AAA)
- **UI components:** 3:1 ratio (AA)
**Testing approach:**
```
1. screenshot → Capture current screen
2. Use color picker to sample text/background
3. Calculate conRelated in General
modeling-omnistudio-epc-catalog
IncludedSalesforce Industries CME EPC product-modeling skill for Product2-based catalog creation. Use when creating EPC products, configuring product attributes, building offer bundles with Product Child Items, or reviewing EPC DataPack JSON metadata for product catalog changes. TRIGGER when: user creates or updates Product2 EPC records, AttributeAssignment payloads, AttributeMetadata/AttributeDefaultValues, Offer bundles, or ProductChildItem relationships. DO NOT TRIGGER when: designing OmniScripts/FlexCards/Integration Procedures (use building-omnistudio-omniscript, building-omnistudio-flexcard, or building-omnistudio-integration-procedure), implementing Apex business logic (use generating-apex), or troubleshooting deployment pipelines (use deploying-metadata).
relationship-science-coach
IncludedUse this skill for direct, practical adult relationship coaching: couples conflict, repair, trust, marriage, dating, flirting, attachment patterns, emotional connection, sex, desire differences, eroticism, kink negotiation, affection, love languages, breakups, and long-term passion. Draw on Gottman, EFT and Hold Me Tight, attachment science, modern sex research, Perel, Nagoski, Kerner, Schnarch, Love and Stosny, and flexible love-language tools. Be concrete and low-hedge. Redirect only for imminent danger, abuse, coercive control, minors, non-consent, self-harm, stalking, or medical/legal/psychiatric decisions.
building-sf-integrations
IncludedSalesforce integration architecture and runtime plumbing with 120-point scoring. Use this skill to set up Named Credentials, External Credentials, External Services, REST/SOAP callout patterns, Platform Events, and Change Data Capture. TRIGGER when: user sets up Named Credentials, External Services, REST/SOAP callouts, Platform Events, CDC, or touches .namedCredential-meta.xml files. DO NOT TRIGGER when: Connected App/OAuth config (use configuring-connected-apps), Apex-only logic (use generating-apex), or data import/export (use handling-sf-data).
venue-templates
IncludedAccess comprehensive LaTeX templates, formatting requirements, and submission guidelines for major scientific publication venues (Nature, Science, PLOS, IEEE, ACM), academic conferences (NeurIPS, ICML, CVPR, CHI), research posters, and grant proposals (NSF, NIH, DOE, DARPA). This skill should be used when preparing manuscripts for journal submission, conference papers, research posters, or grant proposals and need venue-specific formatting requirements and templates.
let-fate-decide
IncludedDraws the 12 Houses of the Zodiac Tarot spread to inject entropy into planning when prompts are vague, ambiguous, or casually delegated. Interprets the spread to guide next steps. Use when the user says 'let fate decide', 'YOLO', 'whatever', 'idk', or other nonchalant phrases, makes Yu-Gi-Oh references, or when you are about to arbitrarily pick between multiple reasonable approaches. Prefer over ask-questions-if-underspecified when the user's tone is casual or playful rather than precision-seeking.
net-ops
IncludedCross-platform network troubleshooting (Windows, macOS, Linux) via local or remote shell. Use for: DNS broken, can't resolve hostnames, nslookup/dig works but apps fail, NRPT, WFP, scutil, /etc/resolver, systemd-resolved, /etc/resolv.conf, NetworkManager, VPN DNS leak residue (ProtonVPN/Mullvad/WireGuard/AnyConnect), AV/firewall blocking DNS or DoH, Tailscale DNS interaction, intermittent connectivity, remote diagnostics over SSH.