Build + run on iOS Simulator
Build the Xcode workspace or project under the current working directory and launch it on an iOS Simulator. If a simulator is already booted, that one is used. Otherwise the latest available iPhone simulator is booted automatically and Simulator.app is brought to the foreground.
How to run
The shared agent-skill-xcode.el lives in the sibling xcode-shared directory at skills/xcode-shared/agent-skill-xcode.el in the emacs-skills plugin. All four /xcode-* skills load it from there.
emacsclient --eval "(progn (load \"/path/to/skills/xcode-shared/agent-skill-xcode.el\" nil t) (agent-skill-xcode-run-simulator :project-dir \"$(pwd)\"))"
The function:
- Locates the workspace/project and picks a scheme (same heuristic as
/xcode-build-simulator). - Picks a simulator: first booted iOS simulator if any; else the latest available iPhone (boots it and opens Simulator.app).
- Runs
xcodebuild buildagainst the simulator's specific UDID. - Reads
BUILT_PRODUCTS_DIR/WRAPPER_NAME/PRODUCT_BUNDLE_IDENTIFIERfrom-showBuildSettings -json. - Installs (
xcrun simctl install) and launches (xcrun simctl launch). - Returns a multi-line status string with the bundle id, simulator UDID, .app path, install result, and launch result. On build failure, returns the same error format as
/xcode-build-simulator.
Rules
- Pass the agent's current working directory as
:project-dirvia$(pwd). - The shared elisp lives under
xcode-shared/agent-skill-xcode.el— load it from there. - Run via the Bash tool with a single
emacsclient --evalinvocation. Builds can take minutes; consider extending the Bash timeout if known to be slow. - Report the returned status string verbatim. It already contains everything the user needs.
- Do not try to choose a different simulator if one is already booted — the whole point is reuse.
- If the build fails, point at the truncated tail in the output; do not re-run the build.