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.
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.
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.
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 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'