{"id":"7b209ecf-3d45-41ea-99f7-218ce4096d02","shortId":"L4FNzS","kind":"skill","title":"ios-simulator","tagline":"Manages iOS Simulator devices and tests app behavior using xcrun simctl. Covers device lifecycle (create, boot, shutdown, erase, delete), app install and launch, push notification simulation, location simulation, permission grants via privacy subcommand, deep link testing via ope","description":"# iOS Simulator\n\nManage iOS Simulator devices and test app behavior from the command line using `xcrun simctl`. Covers the full device lifecycle, app deployment, push and location simulation, permission control, screenshot and video recording, log streaming, and compile-time simulator detection.\n\nFor the complete subcommand reference with all flags and options, see [references/simctl-commands.md](references/simctl-commands.md).\n\n## Contents\n\n- [Device Lifecycle](#device-lifecycle)\n- [App Install and Launch](#app-install-and-launch)\n- [Testing Workflows](#testing-workflows)\n- [Screenshot and Video Recording](#screenshot-and-video-recording)\n- [Log Streaming](#log-streaming)\n- [Compile-Time Simulator Detection](#compile-time-simulator-detection)\n- [Simulator Limitations](#simulator-limitations)\n- [Common Mistakes](#common-mistakes)\n- [Review Checklist](#review-checklist)\n- [References](#references)\n\n## Device Lifecycle\n\n### Listing Devices and Runtimes\n\n```bash\n# List all available simulators grouped by runtime\nxcrun simctl list devices available\n\n# List installed runtimes\nxcrun simctl list runtimes\n\n# List only booted devices\nxcrun simctl list devices booted\n\n# JSON output for scripting\nxcrun simctl list -j devices available\n```\n\nParse JSON output to find a specific device programmatically. See [references/simctl-commands.md](references/simctl-commands.md) for `jq` parsing examples.\n\n### Creating a Device\n\n```bash\n# Find available device types and runtimes\nxcrun simctl list devicetypes\nxcrun simctl list runtimes\n\n# Create a device — returns the new UDID\nxcrun simctl create \"My Test Phone\" \"iPhone 16 Pro\" \"com.apple.CoreSimulator.SimRuntime.iOS-18-4\"\n```\n\nDevice 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.\n\nThe returned UDID identifies the device for all subsequent commands. Use descriptive names to distinguish devices in `simctl list` output.\n\n### Boot, Shutdown, Erase, Delete\n\n```bash\n# Boot a specific device\nxcrun simctl boot <UDID>\n\n# Shutdown a running device\nxcrun simctl shutdown <UDID>\n\n# Factory reset — wipes all data, keeps the device\nxcrun simctl erase <UDID>\n\n# Delete a specific device\nxcrun simctl delete <UDID>\n\n# Delete all devices not available in the current Xcode\nxcrun simctl delete unavailable\n\n# Shutdown everything\nxcrun simctl shutdown all\n```\n\nUse `booted` as a UDID shorthand when exactly one simulator is running:\n\n```bash\nxcrun simctl shutdown booted\n```\n\nIf multiple simulators are booted, `booted` picks one of them non-deterministically. Prefer explicit UDIDs when running parallel simulators.\n\n## App Install and Launch\n\n### Installing an App\n\n```bash\n# Build for simulator first\nxcodebuild build \\\n    -scheme MyApp \\\n    -destination 'platform=iOS Simulator,name=iPhone 16 Pro' \\\n    -derivedDataPath build/\n\n# Install the .app bundle\nxcrun simctl install booted build/Build/Products/Debug-iphonesimulator/MyApp.app\n```\n\nThe path must point to a `.app` directory built for the simulator architecture, not a `.ipa` file.\n\n### Launching and Terminating\n\n```bash\n# Launch by bundle ID\nxcrun simctl launch booted com.example.MyApp\n\n# Launch and stream stdout/stderr to the terminal\nxcrun simctl launch --console booted com.example.MyApp\n\n# Pass launch arguments\nxcrun simctl launch booted com.example.MyApp --reset-onboarding -AppleLanguages \"(fr)\"\n\n# Terminate a running app\nxcrun simctl terminate booted com.example.MyApp\n```\n\n`--console` is useful for debugging — it shows `print()` and `os_log` output directly in the terminal.\n\n### App Container Paths\n\n```bash\n# App bundle location\nxcrun simctl get_app_container booted com.example.MyApp app\n\n# Data container (Documents, Library, tmp)\nxcrun simctl get_app_container booted com.example.MyApp data\n\n# Shared app group container\nxcrun simctl get_app_container booted com.example.MyApp group.com.example.shared\n```\n\nUse these paths to inspect sandboxed files, databases, or UserDefaults during debugging.\n\n## Testing Workflows\n\n### Push Notification Simulation\n\nCreate a JSON payload file:\n\n```json\n{\n    \"aps\": {\n        \"alert\": {\n            \"title\": \"New Message\",\n            \"body\": \"You have a new message from Alice\"\n        },\n        \"badge\": 3,\n        \"sound\": \"default\"\n    },\n    \"customKey\": \"customValue\"\n}\n```\n\nSend it to the Simulator:\n\n```bash\n# Send push payload from file\nxcrun simctl push booted com.example.MyApp payload.json\n\n# Pipe payload from stdin\necho '{\"aps\":{\"alert\":\"Quick test\"}}' | xcrun simctl push booted com.example.MyApp -\n```\n\nThis simulates local delivery only — no APNs connection is involved. Use this to test payload handling, notification display, and notification actions. Always verify on a real device before shipping to confirm APNs delivery works end to end.\n\n### Location Simulation\n\n```bash\n# Set a fixed coordinate (latitude, longitude)\nxcrun simctl location booted set 37.3349,-122.0090\n\n# List available predefined scenarios\nxcrun simctl location booted list\n\n# Run a predefined scenario\nxcrun simctl location booted run \"City Run\"\n\n# Clear the simulated location\nxcrun simctl location booted clear\n```\n\nThe `run` subcommand accepts predefined scenario names (e.g., \"City Run\", \"Freeway Drive\"), not GPX file paths. Use Xcode's Debug > Simulate Location menu for GPX-based routes.\n\nLocation simulation affects all apps using Core Location on the booted device. Clear the location when done to avoid unexpected test results.\n\n### Privacy Permissions\n\n```bash\n# Grant a permission\nxcrun simctl privacy booted grant photos com.example.MyApp\n\n# Revoke a permission\nxcrun simctl privacy booted revoke microphone com.example.MyApp\n\n# Reset all permissions for the app\nxcrun simctl privacy booted reset all com.example.MyApp\n```\n\nCommon service names: `photos`, `microphone`, `contacts`, `calendar`, `reminders`, `location`, `location-always`, `motion`, `siri`. See [references/simctl-commands.md](references/simctl-commands.md) for the full list.\n\nPre-granting permissions in CI avoids system permission dialogs that block automated test runs.\n\n### Deep Links and URLs\n\n```bash\n# Open a URL (triggers universal links or custom URL schemes)\nxcrun simctl openurl booted \"https://example.com/product/123\"\n\n# Custom URL scheme\nxcrun simctl openurl booted \"myapp://settings/notifications\"\n```\n\nFor universal links, the app's associated domains entitlement must be configured. The Simulator uses the `apple-app-site-association` file from the domain.\n\n### Status Bar Overrides\n\n```bash\n# Set a clean status bar for screenshots\nxcrun simctl status_bar booted override \\\n    --time \"9:41\" \\\n    --batteryState charged \\\n    --batteryLevel 100 \\\n    --cellularMode active \\\n    --cellularBars 4 \\\n    --wifiBars 3 \\\n    --operatorName \"\"\n\n# Clear all overrides\nxcrun simctl status_bar booted clear\n```\n\nUse status bar overrides to produce consistent App Store screenshots. Always clear overrides after capturing to avoid confusing other testing.\n\n## Screenshot and Video Recording\n\n```bash\n# Capture a screenshot\nxcrun simctl io booted screenshot screenshot.png\n\n# Record video (press Ctrl+C to stop)\nxcrun simctl io booted recordVideo recording.mov\n\n# Screenshot with specific display mask\nxcrun simctl io booted screenshot --mask black screenshot.png\n```\n\n`--mask` options: `ignored` (default, no mask), `alpha` (transparent corners), `black` (black corners). Use `alpha` or `black` when capturing screenshots that show the device shape. The `alpha` mask is only supported for screenshots — video recording falls back to `black`.\n\nVideo recording continues until the process receives SIGINT (Ctrl+C). The recording is saved only after stopping — killing the process with SIGKILL loses the file.\n\n## Log Streaming\n\n### Basic Log Stream\n\n```bash\n# Stream all logs at debug level and above\nxcrun simctl spawn booted log stream --level debug\n\n# Filter by subsystem\nxcrun simctl spawn booted log stream --level debug \\\n    --predicate 'subsystem == \"com.example.app\"'\n\n# Filter by subsystem and category\nxcrun simctl spawn booted log stream --level debug \\\n    --predicate 'subsystem == \"com.example.app\" AND category == \"networking\"'\n\n# Filter by process name\nxcrun simctl spawn booted log stream \\\n    --predicate 'process == \"MyApp\"'\n```\n\n### Combining with os.Logger\n\nDesign subsystems and categories for filterability:\n\n```swift\nimport os\n\nlet networkLogger = Logger(subsystem: \"com.example.app\", category: \"networking\")\nlet uiLogger = Logger(subsystem: \"com.example.app\", category: \"ui\")\n\nfunc fetchData() async throws -> Data {\n    networkLogger.debug(\"Starting request to /api/data\")\n    let (data, response) = try await URLSession.shared.data(from: url)\n    networkLogger.info(\"Received \\(data.count) bytes, status: \\((response as? HTTPURLResponse)?.statusCode ?? 0)\")\n    return data\n}\n```\n\nThen filter the log stream to see only networking output:\n\n```bash\nxcrun simctl spawn booted log stream --level debug \\\n    --predicate 'subsystem == \"com.example.app\" AND category == \"networking\"'\n```\n\n## Compile-Time Simulator Detection\n\nUse `#if targetEnvironment(simulator)` to exclude code that cannot run in the Simulator:\n\n```swift\nfunc registerForPush() {\n    #if targetEnvironment(simulator)\n    logger.info(\"Skipping APNs registration — running in Simulator\")\n    #else\n    UIApplication.shared.registerForRemoteNotifications()\n    #endif\n}\n```\n\nRuntime detection via environment variables:\n\n```swift\nvar isSimulator: Bool {\n    ProcessInfo.processInfo.environment[\"SIMULATOR_DEVICE_NAME\"] != nil\n}\n```\n\nPrefer compile-time checks (`#if targetEnvironment(simulator)`) over runtime checks. The compiler strips excluded code entirely, preventing linker errors from unavailable symbols.\n\n## Simulator Limitations\n\n| Capability | Simulator Support |\n|-----------|------------------|\n| APNs push delivery | No — use `simctl push` for local simulation |\n| Metal GPU family parity | Partial — host GPU, not device GPU; some shaders differ |\n| Camera hardware | No — use photo library injection or mock `AVCaptureSession` |\n| Microphone | No hardware mic — audio input is routed from Mac microphone |\n| Secure Enclave | No — `kSecAttrTokenIDSecureEnclave` operations fail |\n| App Attest (DCAppAttestService) | No — `isSupported` returns `false` |\n| DockKit motor control | No — no physical accessory connection |\n| Accelerometer / Gyroscope | No real sensors — use `CMMotionManager` simulation in Xcode |\n| Barometer | No |\n| NFC (Core NFC) | No |\n| Bluetooth (Core Bluetooth) | No — use a real device for BLE testing |\n| CarPlay hardware | No — use the separate CarPlay Simulator companion app |\n| Face ID / Touch ID hardware | No hardware — use Features > Face ID / Touch ID menu in Simulator |\n| Cellular network conditions | No — use Network Link Conditioner on Mac |\n\n## Common Mistakes\n\n### DON'T: Hardcode simulator UDIDs in scripts\n\nUDIDs change when simulators are deleted and recreated. Hardcoded values break on other machines and CI.\n\n```bash\n# WRONG — hardcoded UDID\nxcrun simctl boot \"A1B2C3D4-E5F6-7890-ABCD-EF1234567890\"\n\n# CORRECT — look up by name and runtime\nUDID=$(xcrun simctl list -j devices available | \\\n    jq -r '.devices[\"com.apple.CoreSimulator.SimRuntime.iOS-18-4\"][] | select(.name == \"iPhone 16 Pro\") | .udid')\nxcrun simctl boot \"$UDID\"\n\n# CORRECT — use \"booted\" when one simulator is running\nxcrun simctl install booted MyApp.app\n```\n\n### DON'T: Install or launch on a shutdown simulator\n\n`simctl install` and `simctl launch` require a booted device. They fail silently or with an unhelpful error on a shutdown device.\n\n```bash\n# WRONG — device is not booted\nxcrun simctl install <UDID> MyApp.app  # fails\n\n# CORRECT — boot first, then install\nxcrun simctl boot <UDID>\nxcrun simctl install <UDID> MyApp.app\nxcrun simctl launch <UDID> com.example.MyApp\n```\n\n### DON'T: Leave zombie simulators running in CI\n\nEach booted simulator consumes memory and CPU. CI pipelines that create simulators without cleanup accumulate zombie devices.\n\n```bash\n# WRONG — CI script creates and boots but never cleans up\nxcrun simctl create \"CI Phone\" \"iPhone 16 Pro\" \"com.apple.CoreSimulator.SimRuntime.iOS-18-4\"\nxcrun simctl boot \"$UDID\"\n# ... tests run, pipeline exits ...\n\n# CORRECT — always clean up in CI teardown\ncleanup() {\n    xcrun simctl shutdown all\n    xcrun simctl delete \"$UDID\"\n}\ntrap cleanup EXIT\n```\n\n### DON'T: Assume simctl push validates APNs delivery\n\n`simctl push` bypasses the entire APNs infrastructure. It tests payload parsing and notification UI, not token registration, entitlements, or server-side delivery.\n\n```bash\n# WRONG — only testing with simctl, shipping without real device testing\nxcrun simctl push booted com.example.MyApp payload.json\n# \"Push works!\" — no, it only proves the app handles the payload\n\n# CORRECT — use simctl for development iteration, then verify end-to-end on a real device\n# 1. simctl push during development for fast iteration\n# 2. Real device + APNs sandbox for integration testing before release\n```\n\n### DON'T: Keep retrying boot on a stuck simulator\n\nA simulator stuck in the \"Booting\" state will not recover by retrying `boot`. The underlying CoreSimulator state is corrupted.\n\n```bash\n# WRONG — retry loop on a stuck device\nxcrun simctl boot \"$UDID\"  # \"Unable to boot device in current state: Booting\"\nxcrun simctl boot \"$UDID\"  # same error, forever\n\n# CORRECT — shut down, erase, and retry\nxcrun simctl shutdown \"$UDID\"\nxcrun simctl erase \"$UDID\"\nxcrun simctl boot \"$UDID\"\n\n# If that fails, reset CoreSimulator entirely\nxcrun simctl shutdown all\nxcrun simctl erase all\n# Last resort: rm -rf ~/Library/Developer/CoreSimulator/Caches\n```\n\n## Review Checklist\n\n- [ ] Simulator devices created with explicit device type and runtime identifiers\n- [ ] Scripts use `booted` or parsed UDID from JSON output, not hardcoded values\n- [ ] Push notification payloads tested via `simctl push` during development\n- [ ] Push notification delivery verified on a real device before release\n- [ ] Location simulation tested with both fixed coordinates and predefined scenarios\n- [ ] Privacy permissions pre-granted in CI to avoid blocking dialogs\n- [ ] `#if targetEnvironment(simulator)` guards around APIs unavailable in Simulator\n- [ ] Status bar overrides cleared after capturing screenshots\n- [ ] CI pipelines shut down and delete simulators in teardown\n- [ ] Log streaming configured with subsystem/category predicates for focused debugging\n- [ ] App container paths used for inspecting sandboxed data during debugging\n\n## References\n\n- [Running your app in Simulator or on a device](https://sosumi.ai/documentation/xcode/running-your-app-in-simulator-or-on-a-device)\n- [Downloading and installing additional Xcode components](https://sosumi.ai/documentation/xcode/installing-additional-simulator-runtimes)\n- simctl command reference: [references/simctl-commands.md](references/simctl-commands.md)","tags":["ios","simulator","swift","skills","dpearson2699","accessibility","agent-skills","ai-coding","apple","claude-code","codex-skills","cursor-skills"],"capabilities":["skill","source-dpearson2699","skill-ios-simulator","topic-accessibility","topic-agent-skills","topic-ai-coding","topic-apple","topic-claude-code","topic-codex-skills","topic-cursor-skills","topic-ios","topic-ios-development","topic-liquid-glass","topic-localization","topic-mapkit"],"categories":["swift-ios-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/dpearson2699/swift-ios-skills/ios-simulator","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add dpearson2699/swift-ios-skills","source_repo":"https://github.com/dpearson2699/swift-ios-skills","install_from":"skills.sh"}},"qualityScore":"0.700","qualityRationale":"deterministic score 0.70 from registry signals: · indexed on github topic:agent-skills · 599 github stars · SKILL.md body (14,962 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-05-18T18:53:42.532Z","embedding":null,"createdAt":"2026-04-22T12:53:46.063Z","updatedAt":"2026-05-18T18:53:42.532Z","lastSeenAt":"2026-05-18T18:53:42.532Z","tsv":"'-122.0090':678 '-18':254,1458,1585 '-4':255,1459,1586 '/api/data':1151 '/documentation/xcode/installing-additional-simulator-runtimes)':1928 '/documentation/xcode/running-your-app-in-simulator-or-on-a-device)':1919 '/library/developer/coresimulator/caches':1798 '/product/123':851 '0':1169 '1':1689 '100':908 '16':251,419,1463,1582 '2':1697 '3':590,914 '37.3349':677 '4':912 '41':904 '7890':1436 '9':903 'a1b2c3d4':1434 'a1b2c3d4-e5f6':1433 'abcd':1438 'abcd-ef1234567890':1437 'acceleromet':1338 'accept':711 'accessori':1336 'accumul':1562 'action':646 'activ':910 'addit':1923 'affect':738 'alert':577,618 'alic':588 'alpha':991,998,1010 'alway':647,805,935,1596 'ap':576,617 'api':1868 'apn':632,657,1223,1273,1620,1627,1700 'app':10,23,50,64,103,108,397,403,425,438,491,513,517,523,527,536,542,548,740,786,864,878,932,1323,1374,1669,1897,1910 'app-install-and-launch':107 'appl':877 'apple-app-site-associ':876 'applelanguag':486 'architectur':444 'argument':477 'around':1867 'associ':866,880 'assum':1616 'async':1144 'attest':1324 'audio':1310 'autom':827 'avail':167,176,202,224,280,345,680,1453 'avcapturesess':1305 'avoid':754,821,941,1860 'await':1156 'back':1020 'badg':589 'bar':886,893,899,922,927,1873 'baromet':1348 'base':734 'bash':164,222,308,372,404,452,516,600,665,760,834,888,949,1053,1182,1426,1513,1565,1645,1735 'basic':1050 'batterylevel':907 'batteryst':905 'behavior':11,51 'black':983,994,995,1000,1022 'ble':1363 'block':826,1861 'bluetooth':1354,1356 'bodi':581 'bool':1239 'boot':19,186,192,304,309,315,361,376,381,382,430,460,473,481,495,525,538,550,609,624,675,686,695,706,746,767,777,790,848,858,900,923,956,969,980,1065,1076,1092,1110,1186,1432,1468,1472,1481,1499,1518,1525,1531,1549,1571,1589,1659,1711,1721,1728,1745,1749,1754,1757,1778,1813 'break':1420 'build':405,410,422 'build/build/products/debug-iphonesimulator/myapp.app':431 'built':440 'bundl':426,455,518 'bypass':1624 'byte':1163 'c':963,1032 'calendar':800 'camera':1296 'cannot':1210 'capabl':1270 'captur':939,950,1002,1877 'carplay':1365,1371 'categori':1088,1101,1122,1133,1140,1195 'cellular':1391 'cellularbar':911 'cellularmod':909 'chang':1411 'charg':906 'check':1249,1255 'checklist':152,155,1800 'ci':820,1425,1547,1555,1567,1579,1600,1858,1879 'citi':697,716 'clean':891,1574,1597 'cleanup':1561,1602,1612 'clear':699,707,748,916,924,936,1875 'cmmotionmanag':1344 'code':1208,1260 'com.apple.coresimulator.simruntime.ios':253,1457,1584 'com.example.app':1083,1099,1132,1139,1193 'com.example.myapp':461,474,482,496,526,539,551,610,625,770,780,793,1539,1660 'combin':1116 'command':54,293,1930 'common':146,149,794,1401 'common-mistak':148 'companion':1373 'compil':80,132,137,1198,1247,1257 'compile-tim':79,131,1197,1246 'compile-time-simulator-detect':136 'complet':86 'compon':1925 'condit':1393 'condition':1398 'configur':871,1890 'confirm':656 'confus':942 'connect':633,1337 'consist':931 'consol':472,497 'consum':1551 'contact':799 'contain':514,524,529,537,544,549,1898 'content':97 'continu':1025 'control':71,1332 'coordin':669,1848 'core':742,1351,1355 'coresimul':1731,1784 'corner':993,996 'correct':1440,1470,1524,1595,1673,1762 'corrupt':1734 'cover':15,59 'cpu':1554 'creat':18,219,237,246,570,1558,1569,1578,1803 'ctrl':962,1031 'current':348,1752 'custom':842,852 'customkey':593 'customvalu':594 'data':327,528,540,1146,1153,1171,1904 'data.count':1162 'databas':560 'dcappattestservic':1325 'debug':501,564,727,1058,1069,1080,1096,1190,1896,1906 'deep':37,830 'default':592,988 'delet':22,307,334,340,341,352,1415,1609,1884 'deliveri':629,658,1275,1621,1644,1834 'deploy':65 'deriveddatapath':421 'descript':295 'design':1119 'destin':413 'detect':83,135,140,1201,1232 'determinist':389 'develop':1677,1693,1831 'devic':7,16,47,62,98,101,158,161,175,187,191,201,210,221,225,239,256,289,299,312,319,330,337,343,652,747,1007,1242,1291,1361,1452,1456,1500,1512,1515,1564,1654,1688,1699,1742,1750,1802,1806,1839,1916 'device-lifecycl':100 'devicetyp':232,271 'dialog':824,1862 'differ':1295 'direct':509 'directori':439 'display':643,975 'distinguish':298 'dockkit':1330 'document':530 'domain':867,884 'done':752 'download':1920 'drive':719 'e.g':715 'e5f6':1435 'echo':616 'ef1234567890':1439 'els':1228 'enclav':1318 'end':660,662,1682,1684 'end-to-end':1681 'endif':1230 'entir':1261,1626,1785 'entitl':868,1639 'environ':1234 'eras':21,306,333,1765,1774,1792 'error':1264,1508,1760 'everyth':355 'exact':367 'exampl':218,262 'example.com':850 'example.com/product/123':849 'exclud':1207,1259 'exit':1594,1613 'explicit':391,1805 'face':1375,1384 'factori':323 'fail':1322,1502,1523,1782 'fall':1019 'fals':1329 'famili':1285 'fast':1695 'featur':1383 'fetchdata':1143 'file':448,559,574,605,722,881,1047 'filter':1070,1084,1103,1124,1173 'find':207,223,277 'first':408,1526 'fix':668,1847 'flag':91 'focus':1895 'forev':1761 'fr':487 'freeway':718 'full':61,813 'func':1142,1216 'get':522,535,547 'gpu':1284,1289,1292 'gpx':721,733 'gpx-base':732 'grant':33,761,768,817,1856 'group':169,543 'group.com.example.shared':552 'guard':1866 'gyroscop':1339 'handl':641,1670 'hardcod':1405,1418,1428,1821 'hardwar':1297,1308,1366,1379,1381 'host':1288 'httpurlrespons':1167 'id':456,1376,1378,1385,1387 'identifi':260,279,287,1810 'ignor':987 'illustr':267 'import':1126 'infrastructur':1628 'inject':1302 'input':1311 'inspect':557,1902 'instal':24,104,109,178,398,401,423,429,1480,1485,1493,1521,1528,1534,1922 'integr':1703 'involv':635 'io':2,5,42,45,415,955,968,979 'ios-simul':1 'ipa':447 'iphon':250,418,1462,1581 'issimul':1238 'issupport':1327 'iter':1678,1696 'j':200,1451 'jq':216,1454 'json':193,204,572,575,1818 'keep':328,1709 'kill':1040 'ksecattrtokenidsecureenclav':1320 'last':1794 'latitud':670 'launch':26,106,111,400,449,453,459,462,471,476,480,1487,1496,1538 'leav':1542 'let':1128,1135,1152 'level':1059,1068,1079,1095,1189 'librari':531,1301 'lifecycl':17,63,99,102,159 'limit':142,145,1269 'line':55 'link':38,831,840,862,1397 'linker':1263 'list':160,165,174,177,182,184,190,199,231,235,270,274,302,679,687,814,1450 'local':628,1281 'locat':30,68,519,663,674,685,694,702,705,729,736,743,750,802,804,1842 'location-alway':803 'log':76,126,129,507,1048,1051,1056,1066,1077,1093,1111,1175,1187,1888 'log-stream':128 'logger':1130,1137 'logger.info':1221 'longitud':671 'look':1441 'loop':1738 'lose':1045 'mac':1315,1400 'machin':1423 'manag':4,44 'mask':976,982,985,990,1011 'memori':1552 'menu':730,1388 'messag':580,586 'metal':1283 'mic':1309 'microphon':779,798,1306,1316 'mistak':147,150,1402 'mock':1304 'motion':806 'motor':1331 'multipl':378 'must':434,869 'myapp':412,1115 'myapp.app':1482,1522,1535 'name':296,417,714,796,1106,1243,1444,1461 'network':1102,1134,1180,1196,1392,1396 'networklogg':1129 'networklogger.debug':1147 'networklogger.info':1160 'never':1573 'new':242,579,585 'nfc':1350,1352 'nil':1244 'non':388 'non-determinist':387 'notif':28,568,642,645,1634,1824,1833 'onboard':485 'one':368,384,1474 'ope':41 'open':835 'openurl':847,857 'oper':1321 'operatornam':915 'option':93,986 'os':506,1127 'os.logger':1118 'output':194,205,303,508,1181,1819 'overrid':887,901,918,928,937,1874 'parallel':395 'pariti':1286 'pars':203,217,1632,1815 'partial':1287 'pass':475 'path':433,515,555,723,1899 'payload':573,603,613,640,1631,1672,1825 'payload.json':611,1661 'permiss':32,70,759,763,773,783,818,823,1853 'phone':249,1580 'photo':769,797,1300 'physic':1335 'pick':383 'pipe':612 'pipelin':1556,1593,1880 'platform':414 'point':435 'pre':816,1855 'pre-grant':815,1854 'predefin':681,690,712,1850 'predic':1081,1097,1113,1191,1893 'prefer':390,1245 'press':961 'prevent':1262 'print':504 'privaci':35,758,766,776,789,1852 'pro':252,420,1464,1583 'process':1028,1042,1105,1114 'processinfo.processinfo.environment':1240 'produc':930 'programmat':211 'prove':1667 'push':27,66,567,602,608,623,1274,1279,1618,1623,1658,1662,1691,1823,1829,1832 'quick':619 'r':1455 'real':651,1341,1360,1653,1687,1698,1838 'receiv':1029,1161 'record':75,120,125,948,959,1018,1024,1034 'recording.mov':971 'recordvideo':970 'recov':1725 'recreat':1417 'refer':88,156,157,1907,1931 'references/simctl-commands.md':95,96,213,214,809,810,1932,1933 'registerforpush':1217 'registr':1224,1638 'releas':1706,1841 'remind':801 'request':1149 'requir':1497 'reset':324,484,781,791,1783 'reset-onboard':483 'resort':1795 'respons':1154,1165 'result':757 'retri':1710,1727,1737,1767 'return':240,285,1170,1328 'review':151,154,1799 'review-checklist':153 'revok':771,778 'rf':1797 'rm':1796 'rout':735,1313 'run':268,318,371,394,490,688,696,698,709,717,829,1211,1225,1477,1545,1592,1908 'runtim':163,171,179,183,228,236,259,275,1231,1254,1446,1809 'sandbox':558,1701,1903 'save':1036 'scenario':682,691,713,1851 'scheme':411,844,854 'screenshot':72,117,122,895,934,945,952,957,972,981,1003,1016,1878 'screenshot-and-video-record':121 'screenshot.png':958,984 'script':196,1409,1568,1811 'secur':1317 'see':94,212,808,1178 'select':1460 'send':595,601 'sensor':1342 'separ':1370 'server':1642 'server-sid':1641 'servic':795 'set':666,676,889 'settings/notifications':859 'shader':1294 'shape':1008 'share':541 'ship':654,1651 'shorthand':365 'show':503,1005 'shut':1763,1881 'shutdown':20,305,316,322,354,358,375,1490,1511,1605,1770,1788 'side':1643 'sigint':1030 'sigkil':1044 'silent':1503 'simctl':14,58,173,181,189,198,230,234,245,269,273,301,314,321,332,339,351,357,374,428,458,470,479,493,521,534,546,607,622,673,684,693,704,765,775,788,846,856,897,920,954,967,978,1063,1074,1090,1108,1184,1278,1431,1449,1467,1479,1492,1495,1520,1530,1533,1537,1577,1588,1604,1608,1617,1622,1650,1657,1675,1690,1744,1756,1769,1773,1777,1787,1791,1828,1929 'simul':3,6,29,31,43,46,69,82,134,139,141,144,168,369,379,396,407,416,443,569,599,627,664,701,728,737,873,1200,1205,1214,1220,1227,1241,1252,1268,1271,1282,1345,1372,1390,1406,1413,1475,1491,1544,1550,1559,1715,1717,1801,1843,1865,1871,1885,1912 'simulator-limit':143 'siri':807 'site':879 'skill':265 'skill-ios-simulator' 'skip':1222 'sosumi.ai':1918,1927 'sosumi.ai/documentation/xcode/installing-additional-simulator-runtimes)':1926 'sosumi.ai/documentation/xcode/running-your-app-in-simulator-or-on-a-device)':1917 'sound':591 'source-dpearson2699' 'spawn':1064,1075,1091,1109,1185 'specif':209,311,336,974 'start':1148 'state':1722,1732,1753 'status':885,892,898,921,926,1164,1872 'statuscod':1168 'stdin':615 'stdout/stderr':465 'stop':965,1039 'store':933 'stream':77,127,130,464,1049,1052,1054,1067,1078,1094,1112,1176,1188,1889 'strip':1258 'stuck':1714,1718,1741 'subcommand':36,87,710 'subsequ':292 'subsystem':1072,1082,1086,1098,1120,1131,1138,1192 'subsystem/category':1892 'support':1014,1272 'swift':1125,1215,1236 'symbol':1267 'system':283,822 'targetenviron':1204,1219,1251,1864 'teardown':1601,1887 'termin':451,468,488,494,512 'test':9,39,49,112,115,248,565,620,639,756,828,944,1364,1591,1630,1648,1655,1704,1826,1844 'testing-workflow':114 'throughout':263 'throw':1145 'time':81,133,138,902,1199,1248 'titl':578 'tmp':532 'token':1637 'topic-accessibility' 'topic-agent-skills' 'topic-ai-coding' 'topic-apple' 'topic-claude-code' 'topic-codex-skills' 'topic-cursor-skills' 'topic-ios' 'topic-ios-development' 'topic-liquid-glass' 'topic-localization' 'topic-mapkit' 'touch':1377,1386 'transpar':992 'trap':1611 'tri':1155 'trigger':838 'type':226,257,1807 'udid':243,286,364,392,1407,1410,1429,1447,1465,1469,1590,1610,1746,1758,1771,1775,1779,1816 'ui':1141,1635 'uiapplication.shared.registerforremotenotifications':1229 'uilogg':1136 'unabl':1747 'unavail':353,1266,1869 'under':1730 'unexpect':755 'unhelp':1507 'univers':839,861 'url':833,837,843,853,1159 'urlsession.shared.data':1157 'use':12,56,294,360,499,553,636,724,741,874,925,997,1202,1277,1299,1343,1358,1368,1382,1395,1471,1674,1812,1900 'userdefault':562 'valid':1619 'valu':1419,1822 'var':1237 'variabl':1235 'verifi':648,1680,1835 'via':34,40,1233,1827 'video':74,119,124,947,960,1017,1023 'wifibar':913 'wipe':325 'without':1560,1652 'work':659,1663 'workflow':113,116,566 'wrong':1427,1514,1566,1646,1736 'xcode':349,725,1347,1924 'xcodebuild':409 'xcrun':13,57,172,180,188,197,229,233,244,313,320,331,338,350,356,373,427,457,469,478,492,520,533,545,606,621,672,683,692,703,764,774,787,845,855,896,919,953,966,977,1062,1073,1089,1107,1183,1430,1448,1466,1478,1519,1529,1532,1536,1576,1587,1603,1607,1656,1743,1755,1768,1772,1776,1786,1790 'zombi':1543,1563","prices":[{"id":"5ba2a2d4-e80c-484d-8a3d-74242d2f961a","listingId":"7b209ecf-3d45-41ea-99f7-218ce4096d02","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"dpearson2699","category":"swift-ios-skills","install_from":"skills.sh"},"createdAt":"2026-04-22T12:53:46.063Z"}],"sources":[{"listingId":"7b209ecf-3d45-41ea-99f7-218ce4096d02","source":"github","sourceId":"dpearson2699/swift-ios-skills/ios-simulator","sourceUrl":"https://github.com/dpearson2699/swift-ios-skills/tree/main/skills/ios-simulator","isPrimary":false,"firstSeenAt":"2026-04-22T12:53:46.063Z","lastSeenAt":"2026-05-18T18:53:42.532Z"},{"listingId":"7b209ecf-3d45-41ea-99f7-218ce4096d02","source":"skills_sh","sourceId":"dpearson2699/swift-ios-skills/ios-simulator","sourceUrl":"https://skills.sh/dpearson2699/swift-ios-skills/ios-simulator","isPrimary":true,"firstSeenAt":"2026-05-07T20:41:54.625Z","lastSeenAt":"2026-05-07T22:41:16.955Z"}],"details":{"listingId":"7b209ecf-3d45-41ea-99f7-218ce4096d02","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"dpearson2699","slug":"ios-simulator","github":{"repo":"dpearson2699/swift-ios-skills","stars":599,"topics":["accessibility","agent-skills","ai-coding","apple","claude-code","codex-skills","cursor-skills","ios","ios-development","liquid-glass","localization","mapkit","networking","storekit","swift","swift-concurrency","swiftdata","swiftui","widgetkit","xcode"],"license":"other","html_url":"https://github.com/dpearson2699/swift-ios-skills","pushed_at":"2026-04-26T21:04:17Z","description":"Agent Skills for iOS 26+, Swift 6.3, SwiftUI, and modern Apple frameworks","skill_md_sha":"5181c5c9d84cb73af49c4097ad1240f3c803af4b","skill_md_path":"skills/ios-simulator/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/dpearson2699/swift-ios-skills/tree/main/skills/ios-simulator"},"layout":"multi","source":"github","category":"swift-ios-skills","frontmatter":{"name":"ios-simulator","description":"Manages iOS Simulator devices and tests app behavior using xcrun simctl. Covers device lifecycle (create, boot, shutdown, erase, delete), app install and launch, push notification simulation, location simulation, permission grants via privacy subcommand, deep link testing via openurl, status bar overrides, screenshot and video recording, log streaming with os_log filtering, get_app_container paths, and #if targetEnvironment(simulator) compile-time checks. Use when creating or managing simulator devices, testing push notifications without APNs, simulating GPS locations, granting or resetting privacy permissions, capturing screenshots or screen recordings from the command line, streaming device logs, debugging simulator boot failures, troubleshooting CoreSimulator issues, or checking simulator hardware limitations."},"skills_sh_url":"https://skills.sh/dpearson2699/swift-ios-skills/ios-simulator"},"updatedAt":"2026-05-18T18:53:42.532Z"}}