iOS Simulator Skill Pack
Provides 27 scripts for Claude Code to build, test, and automate iOS apps, saving tokens with progressive disclosure and accessibility-first navigation.
- Source repo
- conorluddy/ios-simulator-skill
- Stars
- ★ 1.3k
- Last updated
- today
- License
- MIT
- Primary language
- Python
- FA score
- 62/100 · Some gaps
At a glance
- How it runs
- Works with
- Platform-specificClaude Code
- Cost
- Free, no paid service needed
- Setup effort
- Medium · a few setup steps
- You'll need
- Typical use
- iOS developers wanting Claude Code to automatically build and test Xcode projects without consuming large token amounts on build logs.
- Not a fit if
- Teams testing Android or web apps
- Developers without macOS 15+ and Xcode 26+
- Users unwilling to install extra idb dependencies
- Source review
- 62/100 · Some gaps
What does this agent do, and when should you use it?
This repository is the official skill pack for Claude Code, containing 27 Python/shell scripts covering Xcode builds (via xcodebuild) and simulator interactions (via xcrun simctl and idb). It is optimized for AI agents, with default output of only 3-5 lines, reducing token usage by 96% compared to raw tool output. The core innovation is progressive disclosure: build and test results return only summary lines and xcresult IDs, with errors, warnings, and logs extractable on demand. Navigation is based on iOS accessibility APIs rather than pixel coordinates, making UI interactions more robust when UI changes. All scripts support --help and --json, can be installed via ~/.claude/skills/, and are automatically loaded by Claude Code.
This skill provides 27 scripts, each encapsulating an iOS development task. build_and_test.py runs xcodebuild to compile tests and returns a summary (e.g., 'Build: SUCCESS (0 errors, 3 warnings) [xcresult-20251018-143052]'), with details extractable later via --get-errors, --get-warnings, --get-log. Simulator interaction scripts use the accessibility tree: navigator.py finds and taps elements semantically via --find-text and --tap, screen_mapper.py analyzes the current screen and lists interactive elements. Other scripts handle device state (appearance.py toggles dark mode/language, location.py simulates GPS), lifecycle (simctl_boot.py, simctl_shutdown.py, etc.), permissions (privacy_manager.py supports 13 services), push notifications (push_notification.py), and testing (accessibility_audit.py checks WCAG, visual_diff.py compares screenshots). Scripts interact with the simulator via xcrun simctl and idb, with output optimized for concise summaries; large outputs are stored via ProgressiveCache and referenced by short IDs. Environment variables (IOS_SIM_*) allow adjusting timeouts, output caps, and token budgets.
- iOS developers wanting Claude Code to automatically build and test Xcode projects without consuming large token amounts on build logs.
- QA engineers needing robust UI automation by tapping buttons via accessibility labels rather than fixed coordinates, e.g., --find-text 'Login' --tap.
- Investigating crashes and hangs using hang_watcher.py and log_monitor.py, with os_log output filtered progressively.
- Teams needing automated accessibility audits (WCAG) and sandbox checks to generate pre-deployment reports.
- CI pipelines wanting to simulate GPS, push notifications, and permission states for comprehensive testing.
How do you install or deploy this agent?
In Claude Code, run:
/plugin marketplace add conorluddy/ios-simulator-skill
/plugin install ios-simulator-skill@conorluddyOr install via git clone:
git clone https://github.com/conorluddy/ios-simulator-skill.git ~/.claude/skills/ios-simulator-skillThen restart Claude Code. Requires macOS 12+, Xcode Command Line Tools (xcode-select --install), Python 3. Optional: IDB (brew install idb-companion) for interactive features, Pillow (pip3 install pillow) for visual diffs.
How do you use this agent?
After installation, the skill loads automatically. Use its scripts, for example:
Build project:
python scripts/build_and_test.py --project MyApp.xcodeproj --scheme MyAppGet errors:
python scripts/build_and_test.py --get-errors xcresult-20251018-143052Tap button:
python scripts/navigator.py --find-text 'Login' --tapList tappable elements:
python scripts/navigator.py --list-tappableAll scripts support --help. Environment variables adjust behavior, e.g.:
export IOS_SIM_BOOT_TIMEOUT=600 # extend boot timeoutTypical usage example:
python scripts/simctl_boot.py --wait-ready
python scripts/simctl_create.py --device 'iPhone 15' --runtime '17.0'What are this agent's strengths and limitations?
- Progressive disclosure reduces token consumption by up to 99% (e.g., login flow from 400+ lines of output to 15 lines).
- Accessibility-based navigation is more robust than coordinate tapping and adapts to UI changes.
- 27 scripts provide comprehensive coverage: build, test, device state, navigation, permissions, push, logs.
- All scripts support --json and --help for easy CI integration.
- Highly configurable: IOS_SIM_* environment variables adjust timeouts, output caps, and token budgets.
- Platform-specific: only works on macOS 12+, requires Xcode and iOS Simulator; not for Android or Web.
- Deep integration with Claude Code (installed as a Claude Skill); not an SDK or standalone tool.
- Optional features (IDB, Pillow) require extra installation.
- Tuned for local Apple Silicon development; may need increased timeouts and caps on slower CI runners.
- Documentation assumes familiarity with Xcode projects and simulator concepts.
How does this agent compare with similar options?
Key facts side by side with the most closely related agents.
| Agent | Source review | Form / cost | Stars | Updated | Language | Full support on |
|---|---|---|---|---|---|---|
| iOS Simulator Skill Pack This agent | 62 · Some gaps | Agent plugin / skillFree | ★ 1.3k | today | Python | Claude Code |
| Agent Device Verification CLI | 50 · Major gaps | CLIFree | ★ 5.1k | today | TypeScript | Codex · Claude Code |
| bdg Browser Debugger | 68 · Some gaps | CLIFree | ★ 177 | today | TypeScript | Codex · Claude Code |
| Tura | 65 · Some gaps | CLIFree + model costs | ★ 661 | 12d ago | Rust | — |
How does FollowAgents rate this agent?
Why each dimension lost points
Evidence shows: scripts configured via env vars, default output limits, simulator deletion requires confirmation, cache path explicit, dependencies are common tools. Deductions: dependency security only declares versions, no lockfile or vulnerability scan; rollback relies only on simulator delete/erase, no dedicated rollback mechanism.
Evidence shows: scripts provide --help and --json, error handling documented, env var parse failures warn. Deductions: no test results provided, dependency availability unverified.
Evidence shows: targets developers and AI agents, scenarios cover build, test, navigation, triggers precise via CLI args, environment requirements clear. Deductions: no detailed adaptation notes for different environments.
Evidence shows: README structure clear, install notes detailed, naming consistent, examples abundant, known limitations mentioned, MIT license explicit. Deductions: no CHANGELOG, version only in pyproject.
Evidence shows: output optimized, token savings, comparison data provided. Deductions: cost-benefit data not independently verified.
Evidence shows: README claims consistent with code structure, evaluation data provided. Deductions: evaluation data lacks raw logs, cannot independently verify.
- Dependency security not fully verified, recommend checking dependency versions and vulnerabilities.
- Rollback mechanism limited, simulator deletion operations require caution.
- Evaluation data lacks raw logs, treat pass rate claims with caution.
Recent releases
Latest entries from the project's GitHub Releases. Notes are quoted from upstream as written, not rewritten or tested by FollowAgents.
-
v1.7.0 v1.7.0 — idb 1.7 support and safer simulator automation
Release notes excerpt
The skill now uses idb 1.7 accessibility actions to reach controls under overlays, replace field values without the keyboard, and inspect web content. It also adds media management and requires explicit confirmation for destructive operations. Migration: destructive commands require --yes Update automation that intentionally erases or deletes simulators, uninstalls apps, or clears photos: - simctl_erase.py: add --yes, including batch modes. - simctl_delete.py: add --yes; interactive prompts have been removed. - app_launcher.py --uninstall: add --yes. …View on GitHub ↗ -
v1.6.0 v1.6.0 — Codex support and interaction fixes
Release notes excerpt
The skill now runs in Codex as well as Claude Code, and the gesture, keyboard and navigator scripts actually do what they say. Several of them failed silently: they reported success while doing nothing. Codex support ```bash codex plugin marketplace add conorluddy/ios-simulator-skill codex plugin add ios-simulator-skill@conorluddy ``` You can also install it from /plugins inside Codex. For a manual install, copy the skill folder to ~/.agents/skills/ios-simulator-skill/. The README has a table of user-level and project-level paths for both agents. …View on GitHub ↗ -
v1.5.0 v1.5.0 — Xcode 27 support via idb-companion 1.5.1+
Release notes excerpt
If taps, swipes or typing silently stopped working on Xcode 27, upgrade idb: ```bash brew tap facebook/fb brew install facebook/fb/idb-companion facebook/fb/idb-cli ``` Then check your setup with bash scripts/sim_health_check.sh. Xcode 27 support Xcode 27 moved SimulatorKit.framework, and idb-companion builds older than 1.5.1 can't find it. The companion still starts and the accessibility tree still reads correctly, so idb reports success — while every tap, swipe and keystroke is silently dropped. …View on GitHub ↗