Build, install, launch, and screenshot an iOS app in the Simulator to verify a change visually. Use when the user wants to run the app, see a change live, screenshot the running app, or confirm a UI fix actually works (not just that it compiles).
npx skills add https://github.com/rshankras/claude-code-apple-skills --skill run-simulator
Launches the actual app in the iOS Simulator and drives it far enough to see
what a user would see. Building proves the code compiles; this skill proves it
*runs*. The payoff is a screenshot of the live app that you read back to confirm
the change — a blank or crashed frame is a failure, not a pass.
This skill is generic. Nothing about a specific app is hardcoded — the scheme,
simulator, product path, and bundle id are all discovered at runtime.
Use this skill when the user:
Do not use it for unit/UI test runs (xcodebuild test) — that's a different
goal. This is about meeting the app as a user would.
Run the steps in order. Each step's output feeds the next, so don't hardcode
values a previous step can discover.
Prefer a workspace over a bare project when both exist (CocoaPods/SPM setups
often require the workspace):
# Find the container
ls *.xcworkspace 2>/dev/null || ls *.xcodeproj 2>/dev/null
# List schemes (use -workspace X.xcworkspace OR -project X.xcodeproj)
xcodebuild -list -project <App>.xcodeproj 2>/dev/null
Pick the app scheme (usually matches the app name). If several schemes look
plausible and none clearly matches, ask the user which to run rather than
guessing.
Never hardcode a device name — the named device may not exist on this Mac
(e.g. assuming "iPhone 16" when only "iPhone 17 Pro" is installed fails with
*"Unable to find a device matching the provided destination specifier"*). List
what's actually available and prefer one already booted:
# Already-booted sim, if any (fastest — skip the boot wait)
xcrun simctl list devices booted
# Otherwise, available iPhones to choose from
xcrun simctl list devices available | grep -i iphone
Choose a booted device if present; otherwise pick a recent iPhone from the
available list and remember its name for the destination string.
xcodebuild build \
-project <App>.xcodeproj \
-scheme <Scheme> \
-destination 'platform=iOS Simulator,name=<SimName>' \
2>&1 | tail -5
BUILD SUCCEEDED . Note that -quiet *suppresses*that success line, so either drop -quiet for the confirming run or grep for
error: explicitly.
error: lines — don't proceed to install a stale ornonexistent build.
.app and its bundle idDon't guess the DerivedData path — ask the build system for it:
# Product directory + name from the resolved build settings
eval $(xcodebuild -project <App>.xcodeproj -scheme <Scheme> \
-destination 'platform=iOS Simulator,name=<SimName>' \
-showBuildSettings 2>/dev/null \
| awk -F' = ' '/ TARGET_BUILD_DIR =/{print "DIR=\""$2"\""} / FULL_PRODUCT_NAME =/{print "NAME=\""$2"\""}')
APP="$DIR/$NAME"
echo "APP: $APP"
# Bundle id straight from the built Info.plist
BID=$(/usr/libexec/PlistBuddy -c "Print :CFBundleIdentifier" "$APP/Info.plist")
echo "Bundle id: $BID"
SIM="<SimName>"
xcrun simctl boot "$SIM" 2>/dev/null # no-op if already booted
open -a Simulator # bring the window forward
xcrun simctl bootstatus "$SIM" -b # block until fully booted
xcrun simctl install "$SIM" "$APP"
xcrun simctl launch "$SIM" "$BID"
simctl launch prints <bundleid>: <pid> on success. A non-zero exit or an
error string here means the app failed to start — investigate before
screenshotting.
xcrun simctl io "$SIM" screenshot /tmp/sim-shot.png
Then Read /tmp/sim-shot.png and actually look at it:
If the change lives behind navigation, drive there before judging. Tap by point
or describe to the user what to navigate to:
# Tap a point (x y in points) — useful for hitting a known tab/button
xcrun simctl io "$SIM" tap <x> <y> # (where supported)
# Re-screenshot after each interaction
xcrun simctl io "$SIM" screenshot /tmp/sim-shot-2.png
For deep links, xcrun simctl openurl "$SIM" "<scheme>://<path>". If precise
tapping isn't available, take the screenshot at the landing screen and tell the
user the exact taps to reach the target view.
Report, concisely:
the change. Embed/Read the screenshot so the user sees it too.
Always list available sims (step 2) instead of assuming a model number.
"$SIM" "$BID" then reinstall; or xcrun simctl shutdown "$SIM" && xcrun
simctl erase "$SIM"` for a clean slate (destroys sim data — confirm first).
re-run with -workspace <App>.xcworkspace instead of -project.
simctl bootstatus -b blocks correctly; a fixedsleep does not and races the install.
re-screenshot after a short wait before declaring failure.
xcrun simctl help — full simulator control surface (boot, install, launch,io, openurl, spawn).
man xcodebuild — build, -list, -showBuildSettings, -destination.https://developer.apple.com/documentation/xcode/running-your-app-in-the-simulator-or-on-a-device
Integration with protocols.io API for managing scientific protocols. This skill should be used when working with protocols.io to search, create, update, or publish protocols; manage protocol steps and materials; handle discussions and comments; organize workspaces; upload and manage files; or integrate protocols.io functionality into workflows. Applicable for protocol discovery, collaborative protocol development, experiment tracking, lab protocol management, and scientific documentation.
Analyzes job descriptions and generates tailored resumes that highlight relevant experience, skills, and achievements to maximize interview chances
Generate Excalidraw diagrams from natural language descriptions. Use when asked to "create a diagram", "make a flowchart", "visualize a process", "draw a system architecture", "create a mind map", or "generate an Excalidraw file". Supports flowcharts, relationship diagrams, mind maps, and system architecture diagrams. Outputs .excalidraw JSON files that can be opened directly in Excalidraw.
Build and distribute Expo development clients locally or via TestFlight
Use when you have a written implementation plan to execute in a separate session with review checkpoints
Data structure for annotated matrices in single-cell analysis. Use when working with .h5ad files or integrating with the scverse ecosystem. This is the data format skill—for analysis workflows use scanpy; for probabilistic models use scvi-tools; for population-scale queries use cellxgene-census.
Benchling R&D platform integration. Access registry (DNA, proteins), inventory, ELN entries, workflows via API, build Benchling Apps, query Data Warehouse, for lab data management automation.
Comprehensive molecular biology toolkit. Use for sequence manipulation, file parsing (FASTA/GenBank/PDB), phylogenetics, and programmatic NCBI/PubMed access (Bio.Entrez). Best for batch processing, custom bioinformatics pipelines, BLAST automation. For quick lookups use gget; for multi-service integration use bioservices.
Take rshankras/run-simulator from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.