accessorysetupkit
Discover and configure Bluetooth and Wi-Fi accessories using AccessorySetupKit. Use when presenting a privacy-preserving accessory picker, defining discovery…
Manages iOS Simulator devices and app tests with xcrun simctl: lifecycle, install/launch, push and location simulation, privacy permissions, deep links, status-bar overrides, screenshots/video, log streaming, app containers, and targetEnvironment(simulator). Use when scripting
$ npx -y skills add dpearson2699/swift-ios-skills --skill ios-simulator --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/ios-simulatorContext preview
The summary Claude sees to decide when to auto-load this skill.
Manages iOS Simulator devices and app tests with xcrun simctl: lifecycle, install/launch, push and location simulation, privacy permissions, deep links, status-bar overrides, screenshots/video, log streaming, app containers, and targetEnvironment(simulator). Use when scripting
name: ios-simulator description: "Manages iOS Simulator devices and app tests with xcrun simctl: lifecycle, install/launch, push and location simulation, privacy permissions, deep links, status-bar overrides, screenshots/video, log streaming, app containers, and targetEnvironment(simulator). Use when scripting Simulator workflows, debugging CoreSimulator boot failures, or deciding which hardware, performance, networking, memory-pressure, and security behaviors require a physical device."
Load [the simctl command reference](references/simctl-commands.md) when you need complete command tables, JSON parsing, privacy/status-bar values, Logger filter setup, or boot recovery commands.
# List all available simulators grouped by runtime xcrun simctl list devices available # List installed runtimes xcrun simctl list runtimes # List only booted devices xcrun simctl list devices booted # JSON output for scripting xcrun simctl list -j devices available
Parse JSON output to find a specific device programmatically. See [references/simctl-commands.md](references/simctl-commands.md) for `jq` parsing examples.
# Find available device types and runtimes xcrun simctl list devicetypes xcrun simctl list runtimes # Create a device — returns the new UDID xcrun simctl create "My Test Phone" "iPhone 16 Pro" "com.apple.CoreSimulator.SimRuntime.iOS-18-4"
Device types and runtime identifiers in examples throughout this skill are illustrative. Run `simctl list devicetypes` and `simctl list runtimes` to find the identifiers available on your system.
Use the returned UDID for subsequent commands.
# Boot a specific device xcrun simctl boot <UDID> # Boot if needed and wait until the device is ready xcrun simctl bootstatus <UDID> -b # Shutdown a running device xcrun simctl shutdown <UDID> # Factory reset — wipes all data, keeps the device xcrun simctl erase <UDID> # Delete a specific device xcrun simctl delete <UDID> # Delete all devices not available in the current Xcode xcrun simctl delete unavailable # Shutdown everything xcrun simctl shutdown all
Use `booted` as a UDID shorthand when exactly one simulator is running:
xcrun simctl shutdown booted
If multiple simulators are booted, `booted` picks one of them non-deterministically. Prefer explicit UDIDs when running parallel simulators.
In scripts and CI, `xcrun simctl bootstatus <UDID> -b` is the canonical boot-and-readiness gate before install, launch, push, or location commands.
# Build for simulator first
xcodebuild build \
-scheme MyApp \
-destination 'platform=iOS Simulator,name=iPhone 16 Pro' \
-derivedDataPath build/
# Boot and wait for SpringBoard/services before install
xcrun simctl bootstatus <UDID> -b
# Install the .app bundle
xcrun simctl install <UDID> build/Build/Products/Debug-iphonesimulator/MyApp.appThe path must point to a `.app` directory built for the simulator architecture, not a `.ipa` file.
# Launch by bundle ID xcrun simctl launch booted com.example.MyApp # Launch and stream stdout/stderr to the terminal xcrun simctl launch --console booted com.example.MyApp # Pass launch arguments xcrun simctl launch booted com.example.MyApp --reset-onboarding -AppleLanguages "(fr)" # Terminate a running app xcrun simctl terminate booted com.example.MyApp
`--console` is useful for debugging — it shows `print()` and `os_log` output directly in the terminal.
# App bundle location xcrun simctl get_app_container booted com.example.MyApp app # Data container (Documents, Library, tmp) xcrun simctl get_app_container booted com.example.MyApp data # Shared app group container xcrun simctl get_app_container booted com.example.MyApp group.com.example.shared
Create a JSON payload file:
{
"aps": {
"alert": {
"title": "New Message",
"body": "You have a new message from Alice"
},
"badge": 3,
"sound": "default"
},
"customKey": "customValue"
}Send it to the Simulator:
# Send push payload from file
xcrun simctl push booted com.example.MyApp payload.json
# Pipe payload from stdin
echo '{"aps":{"alert":"Quick test"}}' | xcrun simctl push booted com.example.MyApp -This tests local payload handling and notification UI, not APNs delivery.
# Set a fixed coordinate (latitude, longitude)
xcrun simctl location booted set 37.3349,-122.0090
# List available predefined scenarios
xcrun simctl location booted list
# Run a predefined scenario
xcrun simctl location booted run "City Run"
# Follow custom command-line waypoints
xcrun simctl location booted start --speed=15 --interval=1 \
37.3349,-122.0090 37.3317,-122.0307
# Read waypoints from stdin, one "lat,lon" pair per line
printf "37.3349,-122.0090\n37.3317,-122.0307\n" | \
xcrun simctl location booted start --distance=100 -
# Clear the simulated location
xcrun simctl location booted clearUse `set` for one coordinate, `run` for predefined scenario names, and `start` for custom waypoint routes. The command boundary matters: `simctl location run` accepts built-in scenario names (e.g., "City Run", "Freew
86 agent skills optimized for iOS 26+ development with Swift 6.3 and modern Apple frameworks.
Repo: dpearson2699/swift-ios-skills
Discover and configure Bluetooth and Wi-Fi accessories using AccessorySetupKit. Use when presenting a privacy-preserving accessory picker, defining discovery…
Implement, review, or improve Live Activities and Dynamic Island experiences in iOS apps using ActivityKit. Use when building real-time updating widgets for…
Measure ad effectiveness with privacy-preserving attribution using AdAttributionKit. Use when registering ad impressions, handling attribution postbacks,…
Implement AlarmKit alarms and countdown timers for iOS and iPadOS with Lock Screen, Dynamic Island, StandBy, and paired Apple Watch system UI. Covers…
Build iOS App Clips with invocation URLs, App Clip Codes, NFC, QR codes, Safari banners, Maps, Messages, target setup, App Store Connect experiences,…
Implement App Intents for Siri, Shortcuts, Spotlight, widgets, Control Center, and Apple Intelligence on iOS. Covers AppIntent actions, AppEntity and…