accessibility-testing
WCAG compliance testing and accessibility quality assurance workflows for iOS apps. Use when validating accessibility labels, testing VoiceOver compatibility,…
Accessibility-first UI automation using IDB. Query accessibility tree (fast, 50 tokens) before screenshots (slow, 170 tokens). Use when automating simulator interactions, tapping UI elements, finding buttons, or testing user flows. Covers idb-ui-describe, idb-ui-tap,
$ npx -y skills add conorluddy/xclaude-plugin --skill ui-automation-workflows --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/ui-automation-workflowsContext preview
The summary Claude sees to decide when to auto-load this skill.
Accessibility-first UI automation using IDB. Query accessibility tree (fast, 50 tokens) before screenshots (slow, 170 tokens). Use when automating simulator interactions, tapping UI elements, finding buttons, or testing user flows. Covers idb-ui-describe, idb-ui-tap,
name: ui-automation-workflows description: Accessibility-first UI automation using IDB. Query accessibility tree (fast, 50 tokens) before screenshots (slow, 170 tokens). Use when automating simulator interactions, tapping UI elements, finding buttons, or testing user flows. Covers idb-ui-describe, idb-ui-tap, idb-ui-find-element patterns.
**Use the `execute_idb_command` MCP tool for all UI automation**
The xclaude-plugin provides the `execute_idb_command` MCP tool which consolidates all IDB UI automation operations into a single, token-efficient dispatcher.
**This is the most important rule:** When automating UI interactions, you MUST use the `execute_idb_command` MCP tool.
**Why?** The MCP tool provides:
If `execute_idb_command` fails, the issue is with parameters or app state - not that you should use bash.
**Always query the accessibility tree first.** Only use screenshots as a fallback.
Use the `execute_idb_command` MCP tool with operation `describe` to access the accessibility tree.
| Approach | Time | Tokens | Reliability | |----------|------|--------|-------------| | Accessibility tree | ~120ms | ~50 | Survives theme changes | | Screenshot | ~2000ms | ~170 | Breaks on visual changes |
**Result: 3-4x faster, 80% cheaper, more reliable**
Before starting automation, check if the app has good accessibility support:
Invoke the `execute_idb_command` MCP tool:
{
"operation": "check-accessibility",
"target": "booted"
}**Interprets:**
**Note:** Most modern iOS apps have good accessibility support. Skip this check if you're confident.
**This is your starting point for all UI automation:**
Invoke the `execute_idb_command` MCP tool:
{
"operation": "describe",
"target": "booted",
"parameters": {
"operation": "all"
}
}**Returns:**
{
"elements": [
{
"label": "Login",
"type": "Button",
"frame": { "x": 100, "y": 400, "width": 175, "height": 50 },
"centerX": 187,
"centerY": 425,
"enabled": true,
"visible": true
},
{
"label": "Email",
"type": "TextField",
"value": "",
"frame": { "x": 50, "y": 300, "width": 275, "height": 44 },
"centerX": 187,
"centerY": 322
}
]
}**Use `centerX` and `centerY` for tap coordinates.**
**Option A: Search by Label/Text (Preferred)**
{
"operation": "find-element",
"target": "booted",
"parameters": {
"query": "Login"
}
}**Option B: Manual Search**
From the accessibility tree response, find the element you want by:
**Tap:**
{
"operation": "tap",
"target": "booted",
"parameters": {
"x": 187,
"y": 425
}
}**Input Text:**
{
"operation": "input",
"target": "booted",
"parameters": {
"text": "user@example.com"
}
}**Keyboard Actions:**
{
"operation": "input",
"target": "booted",
"parameters": {
"key": "return"
}
}Available keys: `return`, `home`, `delete`, `space`, `escape`, `tab`, `up`, `down`, `left`, `right`
After interaction, query accessibility tree again to verify:
{
"operation": "describe",
"target": "booted"
}1. describe → Find "Email" text field 2. tap → Focus email field 3. input → Type email 4. describe → Find "Password" text field 5. tap → Focus password field 6. input → Type password 7. describe → Find "Login" button 8. tap → Submit form 9. describe → Verify next screen
1. describe → Get all buttons 2. find-element → Search for specific button 3. tap → Execute tap 4. describe → Verify navigation
1. describe → Get all text fields 2. For each field: - tap → Focus field - input → Enter text - input key:return → Next field 3. describe → Find submit button 4. tap → Submit
1. describe → Check if element visible 2. If not visible: - gesture (swipe up) → Scroll - describe → Check again 3. find-element → Locate target 4. tap → Interact
{
"operation": "gesture",
"target": "booted",
"parameters": {
"gesture_type": "swipe",
"direction": "up",
"duration": 200
}
}Directions: `up`, `down`, `left`, `right`
{
"operation": "gesture",
"target": "booted",
"parameters": {
"gesture_type": "button",
"button": "HOME"
}
}Buttons: `HOME`, `LOCK`, `SIRI`, `SIDE_BUTTON`, `APPLE_PAY`, `SCREENSHOT`, `APP_SWITCH`
**Only use screenshots if:**
1. **Accessibility quality is "poor"**
{ "operatiModular iOS development automation for Claude Code Build, test, and automate iOS apps through natural conversation with Claude. 8 workflow-specific MCP servers with 24 tools across Xcode, Simulator, and IDB. Enable only what you need.
Repo: conorluddy/xclaude-plugin
WCAG compliance testing and accessibility quality assurance workflows for iOS apps. Use when validating accessibility labels, testing VoiceOver compatibility,…
Crash log analysis, symbolication, and debugging workflows for iOS apps. Use when investigating app crashes, analyzing crash reports, symbolicating stack…
XCTest and XCUITest execution workflows and flaky test detection patterns
Instruments integration and performance analysis workflows for iOS apps. Use when profiling CPU usage, memory allocation, network activity, or energy…
iOS Simulator device and app management with simctl. Use when managing simulator devices (boot, create, delete), installing/launching apps, or troubleshooting…
Cache management, configuration best practices, and progressive disclosure patterns for efficient context window usage. Use when working with large responses,…