Sign In
Share:

iOS Simulator skill by Conor Luddy: Python scripts for Xcode builds, accessibility-based simulator navigation and device management.

Security Reviewed

Local-only Python scripts that wrap xcodebuild, simctl and idb, with no network code found, but some can delete or erase simulators (gated by --yes).

Install iOS Simulator in Google Antigravity

Antigravity loads skills from .agents/skills/ in your project or ~/.gemini/config/skills/ for all projects (official docs). Full guide

EasiestOption 1: paste this to your Antigravity agent
Install the "iOS Simulator" skill for Google Antigravity.
Follow the steps at https://www.antigravityskills.org/install/ios-simulator.md (source: https://github.com/conorluddy/ios-simulator-skill/tree/main/ios-simulator-skill/skills/ios-simulator-skill).
Before running anything, show me what you will download and whether it includes scripts, and wait for my OK.
Install it into this project (.agents/skills/) unless I say global. When done, check that Antigravity lists it as an installed skill.

The agent reads the install file, shows you what it will download and waits for your OK.

Option 2: install it yourself
  1. 1. Clone the repository
    git clone --depth 1 https://github.com/conorluddy/ios-simulator-skill.git /tmp/ios-simulator-skill-src

    Download the official repository to a temporary folder.

  2. 2. Copy into your workspace
    mkdir -p .agents/skills && cp -R /tmp/ios-simulator-skill-src/ios-simulator-skill/skills/ios-simulator-skill .agents/skills/ios-simulator-skill

    Run this from your project root. Antigravity reads workspace skills from <project>/.agents/skills/<folder>/. The README's own manual-install table lists .agents/skills/ for another agent; it is the same folder layout, with SKILL.md at the top of the skill folder.

  3. 3. Or install globally
    mkdir -p ~/.gemini/config/skills && cp -R /tmp/ios-simulator-skill-src/ios-simulator-skill/skills/ios-simulator-skill ~/.gemini/config/skills/ios-simulator-skill

    Use this instead of the previous step to make the skill available in every project.

  4. 4. Install the prerequisites
    brew install facebook/fb/idb

    From the README: installs idb-cli and idb-companion. You also need Xcode 26+ selected with xcode-select and Python 3.12+. Then run bash .agents/skills/ios-simulator-skill/scripts/sim_health_check.sh to check everything at once.

  5. 5. Check that Antigravity sees it

    Ask "What skills do you have?" (Antigravity 2.0 app has no /skills command). Antigravity CLI: run /skills; in a session that was already open, run /skills reload first. The skill should be listed by name.

The README does not mention Antigravity (it documents Claude Code and Codex), so this is a manual copy. The skill folder is nested three levels deep in the repo; copy ios-simulator-skill/skills/ios-simulator-skill, not the repo root, or SKILL.md ends up too deep and will not load. We did not run it.

Using Claude Code, Cursor or Codex? See other assistants below.

What is iOS Simulator?

ios-simulator-skill is a skill for building, testing and automating iOS apps from an AI agent, aimed at iOS developers who want the agent to run their app in the Simulator. Its SKILL.md describes 30 scripts (29 Python, 1 shell) that wrap `xcodebuild`, `xcrun simctl` and Meta's `idb`. Navigation uses the iOS accessibility tree to find elements by text, type or id instead of tapping pixel coordinates.

How to use iOS Simulator?

Install the prerequisites (macOS, Xcode, Python 3.12+, idb), add the skill, then ask your agent to build the app, launch it in the simulator and tap through a flow. The agent runs scripts such as `bash scripts/sim_health_check.sh`, `python scripts/screen_mapper.py` and `python scripts/navigator.py --find-text "Login" --tap`.

Key features of iOS Simulator

  • ✓We counted at e38b3ad (repo HEAD, v1.7.0, 2026-10-19): the scripts/ folder has 29 top-level Python files plus sim_health_check.sh (30 scripts, matching the README), and 43 Python files in all with the common/ and xcode/ helper packages. The skill folder is 46 files and about 708 KB; SKILL.md is 469 lines (28,784 bytes).
  • ✓We counted: 27 of the Python files import subprocess to call xcodebuild, xcrun simctl or idb. A grep for requests, urllib, http, socket, os.system, eval( and exec( found no network client or shell-string execution; shell=True appears only in a comment in appearance.py saying it is never used.
  • ✓We counted: README says "Every script supports --help and --json" and SKILL.md says "most support --json"; only 19 of the 29 Python scripts mention --json. Expect plain-text output from the rest.
  • ✓We counted: the README's configuration section names 32 IOS_SIM_* environment variables (we grepped 35 distinct names in the scripts), for example IOS_SIM_BOOT_TIMEOUT=600 for slow CI runners.
  • ✓We counted: it keeps local state under ~/.ios-simulator-skill/ (cache, sessions, xcresults) and a temporary screenshot at /tmp/ios_simulator_screenshot.png; hang_watcher.py can start a detached background worker (start_new_session=True) that records hangs, and sessions expire after 24 hours by default.
  • ✓README says screenshots cost 1,600-6,300 tokens while the accessibility tree costs about 10 tokens by default, so the agent should map the screen first and screenshot only to verify; README also says that on Xcode 27 an idb-companion older than 1.5.1 silently drops taps (idb reports success, nothing happens).
  • ✓README says Xcode 27 has no Simulator.app (it is DeviceHub.app), that the Homebrew idb build needs an Apple silicon Mac, and that Intel Macs are not supported.

When to use iOS Simulator

  1. 1Letting an AI coding agent build and test an iOS app in the simulator
  2. 2Automating UI flows like login by finding elements through accessibility labels
  3. 3Running accessibility audits on an app screen
  4. 4Managing simulator devices from the command line

Installation & Setup Guide

Agent Rules / Prompt Setup

Follow these steps (taken from the project's own docs) to configure iOS Simulator in your development environment.

Step 1: Plugin marketplace (recommended)claude
/plugin marketplace add conorluddy/ios-simulator-skill

Run in Claude Code, then `/plugin install ios-simulator-skill@conorluddy` (README).

Step 2: Manual install from a releaseclaude
curl -L https://github.com/conorluddy/ios-simulator-skill/releases/latest/download/ios-simulator-skill.zip -o skill.zip && unzip skill.zip -d ~/.claude/skills/ios-simulator-skill

Restart Claude Code afterwards and check with `ls ~/.claude/skills/ios-simulator-skill/SKILL.md` (README).

Step 3: Manual install from a cloneclaude
git clone https://github.com/conorluddy/ios-simulator-skill.git ~/src/ios-simulator-skill && cp -R ~/src/ios-simulator-skill/ios-simulator-skill/skills/ios-simulator-skill ~/.claude/skills/ios-simulator-skill

Tracks main. For a project-local install use .claude/skills/ios-simulator-skill as the destination (README).

Step 4: Install idball
brew install facebook/fb/idb

Required for tapping, swiping and typing (README). The project does not document Cursor.

Usage Example & Verification

Prompt / Request Example
1) SKILL.md quick start: python3 scripts/app_launcher.py --launch com.example.app, then python3 scripts/screen_mapper.py to list what is on screen.
-> Launches the app in the booted simulator and prints the tappable elements.

2) SKILL.md quick start: python3 scripts/navigator.py --find-text "Login" --tap, then python3 scripts/navigator.py --find-type TextField --enter-text "user@example.com".
-> Finds the element by its accessibility label, taps it, then types into the first text field.

3) Our example: "Build the app for the iPhone simulator, launch it, and tell me whether the login screen has any accessibility problems."
-> The agent runs build_and_test.py, launches the app, maps the screen and runs accessibility_audit.py, then reports findings from the scripts' output (macOS, Xcode and idb must be installed first).

Security Review

Static review
Reviewed Date
2026-10-21
Audited Ref / Commit
e38b3ad5cc2585140c91b9c0f974124c3add31dc
Reviewer
antigravityskills.org (static code review)

Local-only Python scripts that wrap xcodebuild, simctl and idb, with no network code found, but some can delete or erase simulators (gated by --yes).

Full review: scope, findings, risks
Audit Scope:conorluddy/ios-simulator-skill at e38b3ad (HEAD, v1.7.0, 2026-10-19): ios-simulator-skill/skills/ios-simulator-skill/SKILL.md, the scripts/ tree (file counts; grep for network, shell, eval and file-write patterns; simctl_delete.py, simctl_erase.py, container.py, hang_watcher.py, cache and session helpers), README.md install, prerequisites, configuration and evaluation sections, .claude-plugin/marketplace.json and LICENSE.md. Our earlier review was at c535422; the repo has had many commits since (v1.6.0 and v1.7.0, idb 1.7 support, Xcode 27 notes), so every number on this page was recounted at e38b3ad. Static review only; we did not run the scripts (they need macOS and Xcode).
Key Findings:Script-based skill. 27 Python files import subprocess to call xcodebuild, xcrun simctl and idb. A grep of scripts/ for requests, urllib, http, socket, os.system, eval( and exec( found nothing; shell=True appears only in a comment. simctl_delete.py and simctl_erase.py refuse to run without --yes. Local state is written under ~/.ios-simulator-skill/ and /tmp; hang_watcher.py can start a detached background worker. Optional Pillow for visual diffs.
Identified Operational Risks & Permissions:Destructive simulator operations (delete, erase all, gated by --yes); reads and can export an app's data container including UserDefaults (container.py; keychain is out of scope); writes screenshots, logs, caches and xcresult data locally; drives the simulator UI with taps and typed text; permission changes via privacy_manager.py; pulls idb from Meta's Homebrew tap.

The skill folder ios-simulator-skill/skills/ios-simulator-skill contains SKILL.md, an agents/openai.yaml interface file and a scripts/ directory of Python and shell files. They run local tools (xcodebuild, xcrun simctl, idb) via subprocess; a grep of scripts/ for requests, urllib, http imports, socket, os.system, eval( and exec( found nothing, and scripts/appearance.py documents that commands are never run with shell=True. scripts/simctl_delete.py and scripts/simctl_erase.py permanently remove or wipe simulators and refuse to run without --yes (there is no interactive prompt). scripts/privacy_manager.py grants or revokes app permissions, and push_notification.py and location.py change simulator state. scripts/container.py reads and can export an app's data container (UserDefaults, Core Data paths); its docstring says Keychain is out of scope. Scripts write caches, hang sessions and xcresult copies under ~/.ios-simulator-skill/ and a temporary screenshot to /tmp. hang_watcher.py starts a detached background worker with start_new_session=True for its session mode. The only environment access is the IOS_SIM_* settings plus SIMCTL_CHILD_* variables passed to the launched app. No API keys are required. Installing idb pulls packages from Meta's facebook/fb Homebrew tap. This is a static review; we did not run any script.

Operational Notes & Known Limitations

Known Limitations

  • •macOS only (README: macOS 15 Sequoia or newer); the Homebrew idb build needs an Apple silicon Mac and Intel Macs are not supported.
  • •Needs the full Xcode app, version 26 or newer (Command Line Tools alone are not enough), and Python 3.12 or newer.
  • •Interactive scripts (tap, swipe, type) need idb CLI and companion 1.5.1 or newer (1.6.3 or newer recommended) from the facebook/fb Homebrew tap; visual diffs need Pillow.
  • •On Xcode 27, older idb-companion versions silently drop taps (README).
  • •Not every script has --json output (19 of 29 Python scripts mention it in our grep).

Frequently Asked Questions

Is the iOS Simulator skill safe?

In our static review of commit e38b3ad the scripts call local Apple and Meta tools (xcodebuild, xcrun simctl, idb) through subprocess, and a grep found no network client code, eval/exec or shell=True. Some scripts change state: simctl_delete.py and simctl_erase.py remove or wipe simulators (both refuse to run without --yes), privacy_manager.py changes app permissions, and container.py can read and export an app's data container.

How do I install iOS Simulator in Antigravity?

The README does not mention Antigravity. Clone conorluddy/ios-simulator-skill and copy ios-simulator-skill/skills/ios-simulator-skill into .agents/skills/ios-simulator-skill in your project (or ~/.gemini/config/skills/ios-simulator-skill globally). Install Xcode 26+, Python 3.12+ and idb (brew install facebook/fb/idb), then ask "What skills do you have?" (Antigravity CLI: /skills).

Does it work on Windows or Linux?

No. It needs macOS 15 or newer with Xcode because it drives the iOS Simulator.

Is there an MCP version?

The README points to XC-MCP (github.com/conorluddy/xc-mcp) for an MCP server, and to xclaude-plugin for Xcode build tooling only.

What license is it under?

MIT (LICENSE.md, Copyright 2025 Conor Luddy).

Supported Platforms

antigravityclaude