Web Analytics

ios-simulator-skill

⭐ 171 stars English by conorluddy

iOS Simulator Skill for Claude Code

Production-ready automation for iOS app testing and building. 21 scripts optimized for both human developers and AI agents.

This is basically a Skill version of my XCode MCP: https://github.com/conorluddy/xc-mcp

MCPs load a lot of tokens into the context window when they're active, but also seem to work really well. Skills don't load in any context. I'll make a plugin next and try to find the balance...

Updated: The Plugin version lets you easily disable MCPs for different tool groups. Optimise your context window by only enabling the tools you're actively using, such as xcodebuild: https://github.com/conorluddy/xclaude-plugin

What It Does

Instead of pixel-based navigation that breaks when UI changes:

# Fragile - breaks if UI changes
idb ui tap 320 400

Robust - finds by meaning

python scripts/navigator.py --find-text "Login" --tap
Uses semantic navigation on accessibility APIs to interact with elements by their meaning, not coordinates. Works across different screen sizes and survives UI redesigns.

Features

Installation

As Claude Code Skill

# Personal installation
git clone https://github.com/conorluddy/ios-simulator-skill.git ~/.claude/skills/ios-simulator-skill

Project installation

git clone https://github.com/conorluddy/ios-simulator-skill.git .claude/skills/ios-simulator-skill

Restart Claude Code. The skill loads automatically.

From Release

# Download latest release
curl -L https://github.com/conorluddy/ios-simulator-skill/releases/download/vX.X.X/ios-simulator-skill-vX.X.X.zip -o skill.zip

Extract

unzip skill.zip -d ~/.claude/skills/ios-simulator-skill

Prerequisites

Quick Start

# 1. Check environment
bash ~/.claude/skills/ios-simulator-skill/scripts/sim_health_check.sh

2. Launch your app

python ~/.claude/skills/ios-simulator-skill/scripts/app_launcher.py --launch com.example.app

3. See what's on screen

python ~/.claude/skills/ios-simulator-skill/scripts/screen_mapper.py

Output:

Screen: LoginViewController (45 elements, 7 interactive)

Buttons: "Login", "Cancel", "Forgot Password"

TextFields: 2 (0 filled)

4. Tap login button

python ~/.claude/skills/ios-simulator-skill/scripts/navigator.py --find-text "Login" --tap

5. Enter text

python ~/.claude/skills/ios-simulator-skill/scripts/navigator.py --find-type TextField --enter-text "user@test.com"

6. Check accessibility

python ~/.claude/skills/ios-simulator-skill/scripts/accessibility_audit.py

21 Scripts Organized by Category

Build & Development

Navigation & Interaction

Testing & Analysis

Advanced Testing & Permissions

Device Lifecycle

See SKILL.md for complete reference.

How It Works with Claude Code

Claude Code automatically detects when to use this skill based on your request. You don't need to manually invoke it.

Example conversation:

You: "Set up my iOS app for testing"
Claude: [Uses simctl_boot.py and app_launcher.py automatically]

You: "Tap the login button" Claude: [Uses navigator.py to find and tap]

You: "Check if the form is accessible" Claude: [Uses accessibility_audit.py]

You can also run scripts manually when needed.

Usage Examples

Example 1: Login Flow

# Launch app
python scripts/app_launcher.py --launch com.example.app

Map screen to find fields

python scripts/screen_mapper.py

Enter credentials

python scripts/navigator.py --find-type TextField --index 0 --enter-text "user@test.com" python scripts/navigator.py --find-type SecureTextField --enter-text "password"

Tap login

python scripts/navigator.py --find-text "Login" --tap

Verify accessibility

python scripts/accessibility_audit.py

Example 2: Test Documentation

# Record test execution
python scripts/test_recorder.py --test-name "Login Flow" --output test-reports/

Generates:

- Screenshots per step

- Accessibility trees

- Markdown report with timing

Example 3: Visual Testing

# Capture baseline
python scripts/app_state_capture.py --output baseline/

Make changes...

Compare

python scripts/visual_diff.py baseline/screenshot.png current/screenshot.png

Example 4: Permission Testing

# Grant permissions
python scripts/privacy_manager.py --bundle-id com.example.app --grant camera,location

Test app behavior with permissions...

Revoke permissions

python scripts/privacy_manager.py --bundle-id com.example.app --revoke camera,location

Example 5: Device Lifecycle in CI/CD

# Create test device
DEVICE_ID=$(python scripts/simctl_create.py --device "iPhone 16 Pro" --json | jq -r '.new_udid')

Run tests

python scripts/build_and_test.py --project MyApp.xcodeproj

Clean up

python scripts/simctl_delete.py --udid $DEVICE_ID --yes

Design Principles

Semantic Navigation: Find elements by meaning (text, type, ID) not pixel coordinates. Survives UI changes and works across device sizes.

Token Efficiency: Default output is 3-5 lines. Use --verbose for details or --json for machine parsing. 96% reduction vs raw tools.

Accessibility-First: Built on iOS accessibility APIs for reliability. Better for users with accessibility needs and more robust for automation.

Zero Configuration: Works immediately on any macOS with Xcode. No complex setup, no configuration files.

Structured Data: Scripts output JSON or formatted text, not raw logs. Easy to parse, integrate, and understand.

Auto-Learning: Build system learns your device preference and remembers it for next time.

Requirements

System:

Optional:

Documentation

Output Efficiency

All scripts minimize output by default:

| Task | Raw Tools | This Skill | Savings | |------|-----------|-----------|---------| | Screen analysis | 200+ lines | 5 lines | 97.5% | | Find & tap button | 100+ lines | 1 line | 99% | | Enter text | 50+ lines | 1 line | 98% | | Login flow | 400+ lines | 15 lines | 96% |

This efficiency keeps AI agent conversations focused and cost-effective.

Troubleshooting

Environment Issues

# Run health check
bash ~/.claude/skills/ios-simulator-skill/scripts/sim_health_check.sh

Checks: macOS, Xcode, simctl, IDB, Python, simulators, packages

Script Help

# All scripts support --help
python scripts/navigator.py --help
python scripts/accessibility_audit.py --help

Not Finding Elements

# Use verbose mode to see all elements
python scripts/screen_mapper.py --verbose

Check for exact text match

python scripts/navigator.py --find-text "Exact Button Text" --tap

Contributing

Contributions should:

License

MIT License - Allows commercial use and distribution.

Support

---

Built for AI agents. Optimized for developers.

--- Tranlated By Open Ai Tx | Last indexed: 2025-12-18 ---