@mmerterden/multi-agent-pipeline 20.7.0 → 20.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (284) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/LICENSE +0 -10
  3. package/docs/facts.json +1 -1
  4. package/manifest.json +285 -285
  5. package/package.json +3 -3
  6. package/pipeline/lib/redact.mjs +3 -2
  7. package/pipeline/scripts/_notices.mjs +1 -1
  8. package/pipeline/scripts/gen-skills-index.mjs +13 -1
  9. package/pipeline/scripts/pre-commit-check.sh +4 -0
  10. package/pipeline/skills/.skill-manifest.json +69 -69
  11. package/pipeline/skills/shared/README.md +70 -70
  12. package/pipeline/skills/shared/external/alarmkit/SKILL.md +373 -381
  13. package/pipeline/skills/shared/external/alarmkit/evals/evals.json +23 -18
  14. package/pipeline/skills/shared/external/alarmkit/references/alarmkit-patterns.md +328 -378
  15. package/pipeline/skills/shared/external/app-clips/SKILL.md +260 -160
  16. package/pipeline/skills/shared/external/app-clips/evals/evals.json +27 -27
  17. package/pipeline/skills/shared/external/app-clips/references/data-handoff-notifications-location.md +150 -83
  18. package/pipeline/skills/shared/external/app-clips/references/routing-and-experiences.md +135 -83
  19. package/pipeline/skills/shared/external/app-clips/references/size-capabilities-and-promotion.md +143 -85
  20. package/pipeline/skills/shared/external/app-intents/SKILL.md +302 -304
  21. package/pipeline/skills/shared/external/app-intents/evals/evals.json +21 -21
  22. package/pipeline/skills/shared/external/app-intents/references/appintents-advanced.md +594 -894
  23. package/pipeline/skills/shared/external/app-store-optimization/SKILL.md +345 -277
  24. package/pipeline/skills/shared/external/app-store-optimization/evals/evals.json +27 -23
  25. package/pipeline/skills/shared/external/app-store-optimization/references/keyword-research-methodology.md +107 -121
  26. package/pipeline/skills/shared/external/app-store-optimization/references/product-page-variants.md +145 -165
  27. package/pipeline/skills/shared/external/app-store-review/SKILL.md +306 -326
  28. package/pipeline/skills/shared/external/app-store-review/evals/evals.json +21 -21
  29. package/pipeline/skills/shared/external/app-store-review/references/privacy-manifest.md +105 -67
  30. package/pipeline/skills/shared/external/app-store-review/references/review-checklists.md +114 -101
  31. package/pipeline/skills/shared/external/apple-on-device-ai/SKILL.md +335 -360
  32. package/pipeline/skills/shared/external/apple-on-device-ai/evals/evals.json +24 -27
  33. package/pipeline/skills/shared/external/apple-on-device-ai/references/coreml-conversion.md +215 -322
  34. package/pipeline/skills/shared/external/apple-on-device-ai/references/coreml-optimization.md +161 -256
  35. package/pipeline/skills/shared/external/apple-on-device-ai/references/foundation-models.md +277 -387
  36. package/pipeline/skills/shared/external/apple-on-device-ai/references/mlx-swift.md +196 -210
  37. package/pipeline/skills/shared/external/authentication/SKILL.md +277 -381
  38. package/pipeline/skills/shared/external/authentication/evals/evals.json +25 -25
  39. package/pipeline/skills/shared/external/authentication/references/keychain-biometric.md +135 -178
  40. package/pipeline/skills/shared/external/authentication/references/passkeys.md +111 -147
  41. package/pipeline/skills/shared/external/avkit/SKILL.md +267 -364
  42. package/pipeline/skills/shared/external/avkit/evals/evals.json +26 -26
  43. package/pipeline/skills/shared/external/avkit/references/avkit-patterns.md +375 -493
  44. package/pipeline/skills/shared/external/background-processing/SKILL.md +274 -384
  45. package/pipeline/skills/shared/external/background-processing/evals/evals.json +22 -22
  46. package/pipeline/skills/shared/external/background-processing/references/background-task-patterns.md +173 -321
  47. package/pipeline/skills/shared/external/callkit-voip/SKILL.md +290 -371
  48. package/pipeline/skills/shared/external/callkit-voip/evals/evals.json +24 -24
  49. package/pipeline/skills/shared/external/callkit-voip/references/callkit-patterns.md +175 -343
  50. package/pipeline/skills/shared/external/cloudkit-sync/SKILL.md +292 -381
  51. package/pipeline/skills/shared/external/cloudkit-sync/evals/evals.json +33 -30
  52. package/pipeline/skills/shared/external/cloudkit-sync/references/cloudkit-patterns.md +227 -355
  53. package/pipeline/skills/shared/external/contacts-framework/SKILL.md +197 -346
  54. package/pipeline/skills/shared/external/contacts-framework/evals/evals.json +19 -21
  55. package/pipeline/skills/shared/external/contacts-framework/references/contacts-patterns.md +169 -308
  56. package/pipeline/skills/shared/external/core-bluetooth/SKILL.md +228 -376
  57. package/pipeline/skills/shared/external/core-bluetooth/evals/evals.json +25 -22
  58. package/pipeline/skills/shared/external/core-bluetooth/references/ble-patterns.md +257 -337
  59. package/pipeline/skills/shared/external/core-data/SKILL.md +302 -368
  60. package/pipeline/skills/shared/external/core-data/evals/evals.json +30 -27
  61. package/pipeline/skills/shared/external/core-motion/SKILL.md +235 -324
  62. package/pipeline/skills/shared/external/core-motion/evals/evals.json +31 -27
  63. package/pipeline/skills/shared/external/core-motion/references/motion-patterns.md +210 -310
  64. package/pipeline/skills/shared/external/core-nfc/SKILL.md +292 -366
  65. package/pipeline/skills/shared/external/core-nfc/evals/evals.json +22 -24
  66. package/pipeline/skills/shared/external/core-nfc/references/nfc-patterns.md +233 -329
  67. package/pipeline/skills/shared/external/coreml/SKILL.md +323 -367
  68. package/pipeline/skills/shared/external/coreml/evals/evals.json +24 -21
  69. package/pipeline/skills/shared/external/coreml/references/coreml-swift-integration.md +562 -565
  70. package/pipeline/skills/shared/external/cryptokit/SKILL.md +253 -394
  71. package/pipeline/skills/shared/external/cryptokit/evals/evals.json +20 -18
  72. package/pipeline/skills/shared/external/cryptokit/references/cryptokit-patterns.md +299 -488
  73. package/pipeline/skills/shared/external/debugging-instruments/SKILL.md +270 -323
  74. package/pipeline/skills/shared/external/debugging-instruments/evals/evals.json +27 -30
  75. package/pipeline/skills/shared/external/debugging-instruments/references/instruments-guide.md +167 -315
  76. package/pipeline/skills/shared/external/debugging-instruments/references/lldb-patterns.md +140 -193
  77. package/pipeline/skills/shared/external/device-integrity/SKILL.md +236 -353
  78. package/pipeline/skills/shared/external/device-integrity/evals/evals.json +25 -21
  79. package/pipeline/skills/shared/external/device-integrity/references/device-integrity-patterns.md +159 -197
  80. package/pipeline/skills/shared/external/energykit/SKILL.md +225 -392
  81. package/pipeline/skills/shared/external/energykit/evals/evals.json +29 -28
  82. package/pipeline/skills/shared/external/energykit/references/energykit-patterns.md +174 -470
  83. package/pipeline/skills/shared/external/eventkit-calendar/SKILL.md +261 -383
  84. package/pipeline/skills/shared/external/eventkit-calendar/evals/evals.json +25 -22
  85. package/pipeline/skills/shared/external/eventkit-calendar/references/eventkit-patterns.md +165 -268
  86. package/pipeline/skills/shared/external/healthkit/SKILL.md +252 -303
  87. package/pipeline/skills/shared/external/healthkit/evals/evals.json +24 -23
  88. package/pipeline/skills/shared/external/healthkit/references/healthkit-patterns.md +369 -523
  89. package/pipeline/skills/shared/external/homekit-matter/SKILL.md +233 -348
  90. package/pipeline/skills/shared/external/homekit-matter/evals/evals.json +27 -22
  91. package/pipeline/skills/shared/external/homekit-matter/references/matter-commissioning.md +199 -305
  92. package/pipeline/skills/shared/external/ios-accessibility/SKILL.md +368 -340
  93. package/pipeline/skills/shared/external/ios-accessibility/evals/evals.json +28 -27
  94. package/pipeline/skills/shared/external/ios-accessibility/references/a11y-patterns.md +314 -260
  95. package/pipeline/skills/shared/external/ios-accessibility/references/media-accessibility.md +97 -67
  96. package/pipeline/skills/shared/external/ios-accessibility/references/nutrition-labels.md +165 -101
  97. package/pipeline/skills/shared/external/ios-localization/SKILL.md +258 -371
  98. package/pipeline/skills/shared/external/ios-localization/evals/evals.json +23 -23
  99. package/pipeline/skills/shared/external/ios-localization/references/formatstyle-locale.md +283 -491
  100. package/pipeline/skills/shared/external/ios-localization/references/string-catalogs.md +313 -440
  101. package/pipeline/skills/shared/external/ios-networking/SKILL.md +265 -341
  102. package/pipeline/skills/shared/external/ios-networking/evals/evals.json +24 -24
  103. package/pipeline/skills/shared/external/ios-networking/references/background-websocket.md +425 -652
  104. package/pipeline/skills/shared/external/ios-networking/references/file-storage-patterns.md +143 -285
  105. package/pipeline/skills/shared/external/ios-networking/references/lightweight-clients.md +93 -53
  106. package/pipeline/skills/shared/external/ios-networking/references/network-framework.md +231 -456
  107. package/pipeline/skills/shared/external/ios-networking/references/urlsession-patterns.md +517 -784
  108. package/pipeline/skills/shared/external/ios-simulator/SKILL.md +265 -393
  109. package/pipeline/skills/shared/external/ios-simulator/evals/evals.json +21 -21
  110. package/pipeline/skills/shared/external/ios-simulator/references/simctl-commands.md +177 -270
  111. package/pipeline/skills/shared/external/live-activities/SKILL.md +318 -360
  112. package/pipeline/skills/shared/external/live-activities/evals/evals.json +21 -21
  113. package/pipeline/skills/shared/external/live-activities/references/activitykit-patterns.md +478 -710
  114. package/pipeline/skills/shared/external/localization-reuse-map/SKILL.md +3 -3
  115. package/pipeline/skills/shared/external/localization-reuse-map/example-mapping.json +1 -1
  116. package/pipeline/skills/shared/external/localization-reuse-map/reference/format-and-output.md +8 -7
  117. package/pipeline/skills/shared/external/localization-reuse-map/reference/publish-and-snapshot.md +2 -2
  118. package/pipeline/skills/shared/external/localization-reuse-map/reference/sources-and-recipes.md +5 -2
  119. package/pipeline/skills/shared/external/localization-reuse-map/scripts/_shared.py +100 -0
  120. package/pipeline/skills/shared/external/localization-reuse-map/scripts/build-artifact.py +45 -26
  121. package/pipeline/skills/shared/external/localization-reuse-map/scripts/build-spreadsheet.py +14 -16
  122. package/pipeline/skills/shared/external/localization-reuse-map/scripts/fetch-annotations.py +12 -5
  123. package/pipeline/skills/shared/external/localization-reuse-map/scripts/fetch-legacy-labels.py +2 -1
  124. package/pipeline/skills/shared/external/localization-reuse-map/scripts/publish-confluence.py +6 -5
  125. package/pipeline/skills/shared/external/localization-reuse-map/scripts/render-overlay.py +44 -18
  126. package/pipeline/skills/shared/external/localization-reuse-map/scripts/resolve-legacy-values.py +5 -2
  127. package/pipeline/skills/shared/external/localization-reuse-map/scripts/resolve-new-values.py +10 -11
  128. package/pipeline/skills/shared/external/localization-reuse-map/scripts/scan-screen-keys.py +4 -33
  129. package/pipeline/skills/shared/external/localization-reuse-map/scripts/verify-map.py +12 -59
  130. package/pipeline/skills/shared/external/mapkit-location/SKILL.md +297 -267
  131. package/pipeline/skills/shared/external/mapkit-location/evals/evals.json +28 -24
  132. package/pipeline/skills/shared/external/mapkit-location/references/mapkit-corelocation-patterns.md +378 -532
  133. package/pipeline/skills/shared/external/mapkit-location/references/mapkit-patterns.md +397 -499
  134. package/pipeline/skills/shared/external/metrickit-diagnostics/SKILL.md +165 -348
  135. package/pipeline/skills/shared/external/metrickit-diagnostics/evals/evals.json +26 -23
  136. package/pipeline/skills/shared/external/metrickit-diagnostics/references/metrickit-patterns.md +123 -130
  137. package/pipeline/skills/shared/external/musickit-audio/SKILL.md +189 -315
  138. package/pipeline/skills/shared/external/musickit-audio/evals/evals.json +22 -21
  139. package/pipeline/skills/shared/external/musickit-audio/references/musickit-patterns.md +181 -270
  140. package/pipeline/skills/shared/external/natural-language/SKILL.md +188 -340
  141. package/pipeline/skills/shared/external/natural-language/evals/evals.json +21 -21
  142. package/pipeline/skills/shared/external/natural-language/references/translation-patterns.md +171 -225
  143. package/pipeline/skills/shared/external/passkit-wallet/SKILL.md +258 -392
  144. package/pipeline/skills/shared/external/passkit-wallet/evals/evals.json +30 -29
  145. package/pipeline/skills/shared/external/passkit-wallet/references/wallet-passes.md +164 -231
  146. package/pipeline/skills/shared/external/pdfkit/SKILL.md +312 -344
  147. package/pipeline/skills/shared/external/pdfkit/evals/evals.json +19 -19
  148. package/pipeline/skills/shared/external/pdfkit/references/pdfkit-patterns.md +413 -624
  149. package/pipeline/skills/shared/external/pencilkit-drawing/SKILL.md +242 -358
  150. package/pipeline/skills/shared/external/pencilkit-drawing/evals/evals.json +25 -21
  151. package/pipeline/skills/shared/external/pencilkit-drawing/references/pencilkit-patterns.md +161 -226
  152. package/pipeline/skills/shared/external/permissionkit/SKILL.md +282 -400
  153. package/pipeline/skills/shared/external/permissionkit/evals/evals.json +27 -30
  154. package/pipeline/skills/shared/external/permissionkit/references/permissionkit-patterns.md +237 -350
  155. package/pipeline/skills/shared/external/photos-camera-media/SKILL.md +276 -325
  156. package/pipeline/skills/shared/external/photos-camera-media/references/av-playback.md +299 -545
  157. package/pipeline/skills/shared/external/photos-camera-media/references/camera-capture.md +344 -588
  158. package/pipeline/skills/shared/external/photos-camera-media/references/image-loading-caching.md +316 -660
  159. package/pipeline/skills/shared/external/photos-camera-media/references/photokit-patterns.md +270 -416
  160. package/pipeline/skills/shared/external/push-notifications/SKILL.md +312 -340
  161. package/pipeline/skills/shared/external/push-notifications/evals/evals.json +27 -26
  162. package/pipeline/skills/shared/external/push-notifications/references/notification-patterns.md +328 -485
  163. package/pipeline/skills/shared/external/push-notifications/references/rich-notifications.md +327 -560
  164. package/pipeline/skills/shared/external/realitykit-ar/SKILL.md +218 -410
  165. package/pipeline/skills/shared/external/realitykit-ar/evals/evals.json +24 -27
  166. package/pipeline/skills/shared/external/realitykit-ar/references/realitykit-patterns.md +221 -348
  167. package/pipeline/skills/shared/external/shareplay-activities/SKILL.md +222 -393
  168. package/pipeline/skills/shared/external/shareplay-activities/evals/evals.json +23 -24
  169. package/pipeline/skills/shared/external/shareplay-activities/references/shareplay-patterns.md +280 -420
  170. package/pipeline/skills/shared/external/skill-creator/template.md +7 -1
  171. package/pipeline/skills/shared/external/speech-recognition/SKILL.md +217 -421
  172. package/pipeline/skills/shared/external/speech-recognition/evals/evals.json +23 -26
  173. package/pipeline/skills/shared/external/speech-recognition/references/speechanalyzer-patterns.md +133 -125
  174. package/pipeline/skills/shared/external/storekit/SKILL.md +228 -204
  175. package/pipeline/skills/shared/external/storekit/evals/evals.json +27 -24
  176. package/pipeline/skills/shared/external/storekit/references/app-review-guidelines.md +98 -109
  177. package/pipeline/skills/shared/external/storekit/references/core-patterns.md +302 -241
  178. package/pipeline/skills/shared/external/storekit/references/storekit-advanced.md +356 -649
  179. package/pipeline/skills/shared/external/swift-api-design-guidelines/SKILL.md +274 -399
  180. package/pipeline/skills/shared/external/swift-api-design-guidelines/evals/evals.json +22 -24
  181. package/pipeline/skills/shared/external/swift-api-design-guidelines/references/argument-labels-and-parameters.md +107 -108
  182. package/pipeline/skills/shared/external/swift-api-design-guidelines/references/conventions-and-special-rules.md +93 -165
  183. package/pipeline/skills/shared/external/swift-api-design-guidelines/references/naming-and-clarity.md +99 -137
  184. package/pipeline/skills/shared/external/swift-api-design-guidelines/references/side-effects-and-mutating-pairs.md +77 -120
  185. package/pipeline/skills/shared/external/swift-architecture/SKILL.md +334 -350
  186. package/pipeline/skills/shared/external/swift-architecture/evals/evals.json +22 -22
  187. package/pipeline/skills/shared/external/swift-charts/SKILL.md +208 -394
  188. package/pipeline/skills/shared/external/swift-charts/evals/evals.json +27 -30
  189. package/pipeline/skills/shared/external/swift-charts/references/charts-patterns.md +351 -762
  190. package/pipeline/skills/shared/external/swift-codable/SKILL.md +339 -343
  191. package/pipeline/skills/shared/external/swift-codable/evals/evals.json +20 -20
  192. package/pipeline/skills/shared/external/swift-concurrency/SKILL.md +304 -351
  193. package/pipeline/skills/shared/external/swift-concurrency/evals/evals.json +27 -24
  194. package/pipeline/skills/shared/external/swift-concurrency/references/approachable-concurrency.md +65 -80
  195. package/pipeline/skills/shared/external/swift-concurrency/references/async-algorithms.md +48 -84
  196. package/pipeline/skills/shared/external/swift-concurrency/references/bridging-interop.md +134 -79
  197. package/pipeline/skills/shared/external/swift-concurrency/references/concurrency-patterns.md +145 -167
  198. package/pipeline/skills/shared/external/swift-concurrency/references/diagnostics.md +62 -50
  199. package/pipeline/skills/shared/external/swift-concurrency/references/swiftui-concurrency.md +92 -121
  200. package/pipeline/skills/shared/external/swift-concurrency/references/synchronization-primitives.md +177 -241
  201. package/pipeline/skills/shared/external/swift-formatstyle/SKILL.md +258 -234
  202. package/pipeline/skills/shared/external/swift-language/SKILL.md +342 -382
  203. package/pipeline/skills/shared/external/swift-language/evals/evals.json +24 -27
  204. package/pipeline/skills/shared/external/swift-language/references/swift-attributes-interop.md +79 -56
  205. package/pipeline/skills/shared/external/swift-language/references/swift-patterns-extended.md +297 -340
  206. package/pipeline/skills/shared/external/swift-security/SKILL.md +183 -162
  207. package/pipeline/skills/shared/external/swift-security/evals/evals.json +25 -25
  208. package/pipeline/skills/shared/external/swift-security/references/biometric-authentication.md +314 -469
  209. package/pipeline/skills/shared/external/swift-security/references/certificate-trust.md +411 -476
  210. package/pipeline/skills/shared/external/swift-security/references/common-anti-patterns.md +260 -530
  211. package/pipeline/skills/shared/external/swift-security/references/compliance-owasp-mapping.md +270 -477
  212. package/pipeline/skills/shared/external/swift-security/references/credential-storage-patterns.md +573 -571
  213. package/pipeline/skills/shared/external/swift-security/references/cryptokit-public-key.md +370 -441
  214. package/pipeline/skills/shared/external/swift-security/references/cryptokit-symmetric.md +332 -433
  215. package/pipeline/skills/shared/external/swift-security/references/keychain-access-control.md +346 -468
  216. package/pipeline/skills/shared/external/swift-security/references/keychain-fundamentals.md +375 -491
  217. package/pipeline/skills/shared/external/swift-security/references/keychain-item-classes.md +431 -432
  218. package/pipeline/skills/shared/external/swift-security/references/keychain-sharing.md +328 -425
  219. package/pipeline/skills/shared/external/swift-security/references/migration-legacy-stores.md +341 -579
  220. package/pipeline/skills/shared/external/swift-security/references/secure-enclave.md +397 -457
  221. package/pipeline/skills/shared/external/swift-security/references/testing-security-code.md +354 -614
  222. package/pipeline/skills/shared/external/swift-testing/SKILL.md +191 -175
  223. package/pipeline/skills/shared/external/swift-testing/evals/evals.json +26 -24
  224. package/pipeline/skills/shared/external/swift-testing/references/testing-advanced.md +81 -84
  225. package/pipeline/skills/shared/external/swift-testing/references/testing-patterns.md +317 -433
  226. package/pipeline/skills/shared/external/swiftdata/SKILL.md +394 -256
  227. package/pipeline/skills/shared/external/swiftdata/evals/evals.json +24 -24
  228. package/pipeline/skills/shared/external/swiftdata/references/core-data-coexistence.md +206 -402
  229. package/pipeline/skills/shared/external/swiftdata/references/indexing.md +59 -52
  230. package/pipeline/skills/shared/external/swiftdata/references/predicate-pitfalls.md +57 -33
  231. package/pipeline/skills/shared/external/swiftdata/references/swiftdata-advanced.md +354 -747
  232. package/pipeline/skills/shared/external/swiftdata/references/swiftdata-queries.md +300 -508
  233. package/pipeline/skills/shared/external/swiftlint/SKILL.md +175 -226
  234. package/pipeline/skills/shared/external/swiftlint/references/adoption-and-configuration.md +141 -208
  235. package/pipeline/skills/shared/external/swiftlint/references/custom-rules-and-analyze.md +100 -109
  236. package/pipeline/skills/shared/external/swiftlint/references/plugins-run-scripts-and-integrations.md +159 -179
  237. package/pipeline/skills/shared/external/swiftlint/references/rule-reference.md +383 -18
  238. package/pipeline/skills/shared/external/swiftlint/references/rules-suppressions-and-baselines.md +143 -229
  239. package/pipeline/skills/shared/external/swiftui-animation/SKILL.md +283 -366
  240. package/pipeline/skills/shared/external/swiftui-animation/references/animation-advanced.md +396 -608
  241. package/pipeline/skills/shared/external/swiftui-animation/references/core-animation-bridge.md +336 -385
  242. package/pipeline/skills/shared/external/swiftui-gestures/SKILL.md +239 -349
  243. package/pipeline/skills/shared/external/swiftui-gestures/references/gesture-patterns.md +228 -310
  244. package/pipeline/skills/shared/external/swiftui-layout-components/SKILL.md +260 -249
  245. package/pipeline/skills/shared/external/swiftui-layout-components/references/form.md +92 -74
  246. package/pipeline/skills/shared/external/swiftui-layout-components/references/grids.md +112 -177
  247. package/pipeline/skills/shared/external/swiftui-layout-components/references/list.md +61 -64
  248. package/pipeline/skills/shared/external/swiftui-layout-components/references/scrollview.md +94 -134
  249. package/pipeline/skills/shared/external/swiftui-liquid-glass/SKILL.md +193 -225
  250. package/pipeline/skills/shared/external/swiftui-liquid-glass/references/liquid-glass.md +173 -327
  251. package/pipeline/skills/shared/external/swiftui-navigation/SKILL.md +201 -168
  252. package/pipeline/skills/shared/external/swiftui-navigation/references/deeplinks.md +127 -150
  253. package/pipeline/skills/shared/external/swiftui-navigation/references/navigationstack.md +134 -133
  254. package/pipeline/skills/shared/external/swiftui-navigation/references/sheets.md +152 -117
  255. package/pipeline/skills/shared/external/swiftui-navigation/references/tabview.md +111 -138
  256. package/pipeline/skills/shared/external/swiftui-patterns/SKILL.md +316 -252
  257. package/pipeline/skills/shared/external/swiftui-patterns/references/architecture-patterns.md +341 -332
  258. package/pipeline/skills/shared/external/swiftui-patterns/references/deprecated-migration.md +547 -854
  259. package/pipeline/skills/shared/external/swiftui-patterns/references/design-polish.md +485 -537
  260. package/pipeline/skills/shared/external/swiftui-patterns/references/platform-and-sharing.md +417 -499
  261. package/pipeline/skills/shared/external/swiftui-performance/SKILL.md +213 -376
  262. package/pipeline/skills/shared/external/swiftui-performance/references/demystify-swiftui-performance-wwdc23.md +86 -175
  263. package/pipeline/skills/shared/external/swiftui-performance/references/optimizing-swiftui-performance-instruments.md +89 -195
  264. package/pipeline/skills/shared/external/swiftui-performance/references/understanding-hangs-in-your-app.md +95 -182
  265. package/pipeline/skills/shared/external/swiftui-performance/references/understanding-improving-swiftui-performance.md +71 -149
  266. package/pipeline/skills/shared/external/swiftui-performance/references/wwdc-session-sources.md +21 -27
  267. package/pipeline/skills/shared/external/swiftui-uikit-interop/SKILL.md +303 -295
  268. package/pipeline/skills/shared/external/swiftui-uikit-interop/references/hosting-migration.md +204 -387
  269. package/pipeline/skills/shared/external/swiftui-uikit-interop/references/representable-recipes.md +469 -683
  270. package/pipeline/skills/shared/external/swiftui-webkit/SKILL.md +140 -186
  271. package/pipeline/skills/shared/external/swiftui-webkit/references/loading-and-observation.md +75 -86
  272. package/pipeline/skills/shared/external/swiftui-webkit/references/local-content-and-custom-schemes.md +63 -60
  273. package/pipeline/skills/shared/external/swiftui-webkit/references/migration-and-fallbacks.md +69 -137
  274. package/pipeline/skills/shared/external/swiftui-webkit/references/navigation-and-javascript.md +95 -67
  275. package/pipeline/skills/shared/external/tipkit/SKILL.md +220 -335
  276. package/pipeline/skills/shared/external/tipkit/references/tipkit-patterns.md +356 -494
  277. package/pipeline/skills/shared/external/vision-framework/SKILL.md +260 -375
  278. package/pipeline/skills/shared/external/vision-framework/references/vision-requests.md +393 -515
  279. package/pipeline/skills/shared/external/vision-framework/references/visionkit-scanner.md +363 -539
  280. package/pipeline/skills/shared/external/weatherkit/SKILL.md +160 -315
  281. package/pipeline/skills/shared/external/weatherkit/references/weatherkit-patterns.md +288 -407
  282. package/pipeline/skills/shared/external/widgetkit/SKILL.md +224 -288
  283. package/pipeline/skills/shared/external/widgetkit/references/widgetkit-advanced.md +416 -719
  284. package/pipeline/skills/shared/external/NOTICE-swift-ios-skills.md +0 -39
@@ -3,41 +3,41 @@
3
3
  "evals": [
4
4
  {
5
5
  "id": 1,
6
- "prompt": "I need a command-line iOS Simulator test script for a maps feature. It should create or pick a simulator, boot it, install a simulator-built app, drive a custom route between two coordinates without using a GPX file, and clean up afterward. What simctl commands and caveats should I use?",
7
- "expected_output": "A simctl-focused workflow that uses available device/runtime lookup, boots a simulator, installs a .app built for the simulator, uses simctl location start for custom command-line waypoints, clears location state, and shuts down or deletes test devices during cleanup.",
6
+ "prompt": "Write a shell script for CI that builds our map app, runs it on a fresh simulator, and drives it along a custom walking route I define as coordinates (I don't have a GPX file). Tidy up afterwards.",
7
+ "expected_output": "Creates or looks up a device without hard-coding a UDID, boots and waits before installing the simulator .app, uses location start with waypoints, and clears location and removes the device in cleanup.",
8
8
  "files": [],
9
9
  "assertions": [
10
- "Uses `xcrun simctl location <device> start` for custom command-line waypoint routes instead of claiming only predefined scenarios are possible.",
11
- "Explains that `location run` accepts predefined scenario names and does not take GPX file paths.",
12
- "Boots before install or launch and installs a simulator-built `.app` rather than an `.ipa`.",
13
- "Uses explicit UDID lookup or `booted` appropriately instead of hardcoding a simulator UDID.",
14
- "Clears simulated location and shuts down or deletes simulator devices during cleanup."
10
+ "Drives the route with `xcrun simctl location <device> start` and lat,lon waypoints (or stdin), not with run",
11
+ "Points out that `location run` only takes the names of scenarios that ship with the simulator, so a GPX path will not work there",
12
+ "Boots and waits (bootstatus -b) before install and launch, and installs the .app produced for the simulator, not an .ipa",
13
+ "Obtains the UDID from create output, a JSON lookup, or uses booted with a single simulator, instead of a literal UDID",
14
+ "Clears the simulated location and shuts down and deletes the simulator in a cleanup step, for example a trap on EXIT"
15
15
  ]
16
16
  },
17
17
  {
18
18
  "id": 2,
19
- "prompt": "Review this Simulator launch plan: pass FEATURE_FLAG=1 by running `xcrun simctl spawn booted env FEATURE_FLAG=1 /path/MyApp.app/MyApp`, use `simctl push` to prove APNs works for all notification types, and grant every privacy service in CI so we can remove usage description keys.",
20
- "expected_output": "A correction-focused review that uses SIMCTL_CHILD_ environment variables with simctl launch, limits simctl push to local application remote notification simulation, preserves real-device APNs testing, and warns that simctl privacy can mask missing Info.plist usage descriptions.",
19
+ "prompt": "Please review this test script. It starts our app via `xcrun simctl spawn booted env FEATURE_FLAG=1 /path/to/App`, treats a successful `xcrun simctl push` as proof that APNs works, and calls `privacy grant all` so that NSCameraUsageDescription and NSPhotoLibraryUsageDescription can be deleted from Info.plist. What would you change?",
20
+ "expected_output": "Replaces spawn with launch plus SIMCTL_CHILD_ variables, explains that simctl push is local and limited, lists payload rules, and keeps usage-description keys and real prompt testing.",
21
21
  "files": [],
22
22
  "assertions": [
23
- "Replaces the `spawn env` app launch pattern with `SIMCTL_CHILD_FEATURE_FLAG=1 xcrun simctl launch ...` or equivalent `SIMCTL_CHILD_` guidance.",
24
- "Clarifies that `simctl spawn` is for arbitrary simulator processes, not the preferred path for launching an installed app with environment variables.",
25
- "States that `simctl push` simulates local application remote push delivery only and does not prove APNs token registration, entitlements, server delivery, or unsupported push types.",
26
- "Includes the `simctl push` payload constraints: top-level object, valid `aps`, and 4096-byte size limit.",
27
- "Warns that `simctl privacy` does not remove the need for valid Info.plist usage description keys and normal prompt-flow testing."
23
+ "Recommends `SIMCTL_CHILD_FEATURE_FLAG=1 xcrun simctl launch <device> <bundle-id>` to pass the variable to the app",
24
+ "Explains that spawn exists for running arbitrary executables (log stream, for example) and is the wrong tool for starting an installed app",
25
+ "States that simctl push delivers locally and proves nothing about device token registration, entitlements or server delivery, and supports only application remote pushes (not VoIP, complication or File Provider)",
26
+ "Gives the payload constraints: the root must be a JSON object, it must include a well-formed aps dictionary, and it may not exceed 4096 bytes",
27
+ "Keeps the usage-description keys, because granting permissions from the command line does not replace them, and keeps testing the real system prompt"
28
28
  ]
29
29
  },
30
30
  {
31
31
  "id": 3,
32
- "prompt": "We are deciding which tests can stay in iOS Simulator for a release candidate: camera capture, BLE pairing, barometer elevation, accelerometer controls, Face ID fallback, memory warnings, iCloud sync, push notifications, and Metal performance. Give the boundary and what must move to hardware.",
33
- "expected_output": "A Simulator-versus-device boundary review grounded in Apple docs: hardware-only features move to real devices, simulated scenarios stay in Simulator where supported, and performance or APNs conclusions are verified on hardware.",
32
+ "prompt": "Release-candidate test plan: which of these belong on the Simulator and which need a physical device? Capturing photos with the camera, pairing our BLE scale, altitude from the barometer, step counting from the accelerometer, the passcode fallback after Face ID fails, reacting to memory warnings, iCloud syncing, push notification delivery, and how fast our Metal renderer runs.",
33
+ "expected_output": "Assigns hardware-only checks to devices, keeps triggerable behaviors in the simulator, treats iCloud and push as split items, and states that simulator performance is not representative across processing, graphics, memory and networking.",
34
34
  "files": [],
35
35
  "assertions": [
36
- "Routes camera, Bluetooth/BLE, barometer, and accelerometer/gyroscope-dependent behavior to real hardware testing.",
37
- "Treats Face ID/Touch ID fallback, memory warnings, and manual iCloud sync trigger as Simulator-supported scenarios.",
38
- "States that Simulator is not an accurate performance proxy for processing, graphics, memory, networking, or Metal GPU behavior.",
39
- "States that real APNs delivery must be verified on a device and `simctl push` is only local payload/display handling.",
40
- "Keeps the answer focused on iOS Simulator boundaries instead of turning it into an Instruments, Core Motion, Core Bluetooth, or push server implementation guide."
36
+ "Puts camera capture, BLE pairing, barometer and accelerometer/gyroscope checks on physical devices",
37
+ "Keeps the passcode fallback after a biometric failure, memory-warning handling and a hand-triggered iCloud sync on the simulator, and sends automatic iCloud propagation and conflicts to devices",
38
+ "Says simulator numbers do not stand in for device processing, graphics, memory, networking or Metal GPU performance, and schedules those measurements on hardware",
39
+ "Assigns APNs delivery to a physical device and describes simctl push as local-only",
40
+ "Keeps to where the simulator ends and hardware begins, without drifting into guides for Instruments, Core Motion, Core Bluetooth or a push server"
41
41
  ]
42
42
  }
43
43
  ]
@@ -1,316 +1,223 @@
1
- # simctl Command Reference
2
-
3
- Common `xcrun simctl` subcommands with syntax, flags, and examples. For workflows and patterns, see the main [SKILL.md](../SKILL.md).
4
-
5
- ## Contents
6
-
7
- - [Device Management Commands](#device-management-commands)
8
- - [App Lifecycle Commands](#app-lifecycle-commands)
9
- - [Testing and Simulation Commands](#testing-and-simulation-commands)
10
- - [Media and IO Commands](#media-and-io-commands)
11
- - [JSON Output Parsing](#json-output-parsing)
12
- - [Privacy Service Names](#privacy-service-names)
13
- - [Status Bar Override Flags](#status-bar-override-flags)
14
- - [Troubleshooting](#troubleshooting)
15
-
16
- ## Device Management Commands
17
-
18
- | Command | Synopsis | Notes |
19
- |---------|----------|-------|
20
- | `list` | `simctl list [devices\|devicetypes\|runtimes\|pairs] [search-term]` | Add `-j` for JSON. Add `available` to filter to usable devices. |
21
- | `create` | `simctl create <name> <device-type-id> [<runtime-id>]` | Returns the new UDID. Omitting runtime selects the newest compatible one. |
22
- | `clone` | `simctl clone <UDID> <new-name>` | Copies device state including installed apps. |
23
- | `delete` | `simctl delete <UDID\|unavailable\|all>` | `unavailable` removes devices whose runtime is missing. |
24
- | `rename` | `simctl rename <UDID> <new-name>` | |
25
- | `erase` | `simctl erase <UDID\|all>` | Factory reset - wipes apps and data, keeps the device. |
26
- | `boot` | `simctl boot <UDID>` | Starts the device runtime. |
27
- | `bootstatus` | `simctl bootstatus <UDID> [-b]` | Waits until the device finishes booting. Use `-b` in scripts to boot if needed and block until ready. |
28
- | `shutdown` | `simctl shutdown <UDID\|all>` | Stops the device runtime. |
29
- | `upgrade` | `simctl upgrade <UDID> <runtime-id>` | Upgrades device to a newer runtime. |
30
- | `pair` | `simctl pair <watch-UDID> <phone-UDID>` | Pairs a watchOS simulator with an iOS simulator. |
31
- | `unpair` | `simctl unpair <pair-UDID>` | Removes a watch/phone pairing. |
32
-
33
- ### Device Type and Runtime IDs
1
+ # simctl command reference
2
+
3
+ Lookup tables for `xcrun simctl`. Workflows and the simulator-versus-hardware
4
+ boundary are in [the main skill](../SKILL.md). `<dev>` below means a UDID, or
5
+ `booted` when exactly one simulator is running. `xcrun simctl help <command>`
6
+ prints the authoritative usage for the installed Xcode.
7
+
8
+ ## Devices
9
+
10
+ | Command | What it does |
11
+ |---|---|
12
+ | `list [devices\|devicetypes\|runtimes\|pairs] [term\|available]` | Lists items; `-j` or `--json` for JSON; the `available` term hides unusable ones |
13
+ | `create <name> <device-type-id> [<runtime-id>]` | Makes a device and prints its UDID; without a runtime, the newest compatible one is used |
14
+ | `clone <dev> <new-name>` | Copies a device, installed apps and all |
15
+ | `delete <dev>\|unavailable\|all` | Removes devices; `unavailable` means devices the current Xcode SDK cannot run (for example, a missing runtime) |
16
+ | `rename <dev> <new-name>` | Renames |
17
+ | `erase <dev>\|all` | Wipes content and settings, keeps the device |
18
+ | `boot <dev>` | Starts the device's runtime |
19
+ | `bootstatus <dev> [-b]` | Waits until boot completes; `-b` starts the boot first if needed |
20
+ | `shutdown <dev>\|all` | Stops devices |
21
+ | `upgrade <dev> <runtime-id>` | Moves a device to a newer runtime |
22
+ | `pair <watch-dev> <phone-dev>` / `unpair <pair-id>` | Links a watchOS simulator to an iOS one, or removes the link |
23
+
24
+ Identifiers look like `com.apple.CoreSimulator.SimDeviceType.iPhone-17-Pro`
25
+ for device types and `com.apple.CoreSimulator.SimRuntime.iOS-26-0` for
26
+ runtimes. `create` and `upgrade` take these identifier strings; read the
27
+ exact values from `list devicetypes` and `list runtimes`.
28
+
29
+ ## Apps
30
+
31
+ | Command | What it does |
32
+ |---|---|
33
+ | `install <dev> <path-to.app>` | Installs a simulator build; the device must be booted and the path is an `.app` folder, not an `.ipa` |
34
+ | `uninstall <dev> <bundle-id>` | Removes the app and its data |
35
+ | `launch [--console\|--console-pty] [--terminate-running-process] [--stdout=<file>] [--stderr=<file>] <dev> <bundle-id> [args...]` | Starts the app; `--terminate-running-process` stops a running copy first |
36
+ | `terminate <dev> <bundle-id>` | Stops the running app |
37
+ | `spawn <dev> <binary> [args...]` | Runs any executable inside the simulator, which is how `log stream` runs |
38
+ | `get_app_container <dev> <bundle-id> [app\|data\|groups\|<group-id>]` | Prints a container path; `groups` lists every App Group container |
39
+ | `appinfo <dev> <bundle-id>` | Prints information from the app's Info.plist |
40
+
41
+ In scripts, prefer `bootstatus <dev> -b` followed by `install`. If a script
42
+ calls `boot` by itself, add `bootstatus <dev>` before any install, launch,
43
+ push or location command.
44
+
45
+ ### Arguments and environment
46
+
47
+ - Extra words after the bundle ID reach the app as `CommandLine.arguments`.
48
+ - Force a language and region for one run:
49
+ `xcrun simctl launch "$SIM" org.example.pantry -AppleLanguages "(ko)" -AppleLocale "ko_KR"`.
50
+ - Environment variables for the launched app are taken from the calling
51
+ shell with a `SIMCTL_CHILD_` prefix, which simctl strips:
34
52
 
35
53
  ```bash
36
- # List all device types - use the identifier column
37
- xcrun simctl list devicetypes
38
-
39
- # Example output line:
40
- # iPhone 16 Pro (com.apple.CoreSimulator.SimDeviceType.iPhone-16-Pro)
41
-
42
- # List all runtimes
43
- xcrun simctl list runtimes
44
-
45
- # Example output line:
46
- # iOS 18.4 - com.apple.CoreSimulator.SimRuntime.iOS-18-4
54
+ SIMCTL_CHILD_API_STAGE=beta SIMCTL_CHILD_VERBOSE_SYNC=1 xcrun simctl launch "$SIM" org.example.pantry
47
55
  ```
48
56
 
49
- Use the identifier strings (e.g., `com.apple.CoreSimulator.SimDeviceType.iPhone-16-Pro`) in `create` and `upgrade` commands.
50
-
51
- ## App Lifecycle Commands
57
+ `spawn` is for arbitrary processes such as `log stream`; it is not the way to
58
+ start an installed app with custom environment variables.
52
59
 
53
- | Command | Synopsis | Notes |
54
- |---------|----------|-------|
55
- | `install` | `simctl install <UDID> <path-to-.app>` | Device must be booted. Path is a `.app` directory, not `.ipa`. |
56
- | `uninstall` | `simctl uninstall <UDID> <bundle-id>` | Removes app and its data. |
57
- | `launch` | `simctl launch [--console] [--terminate-running-process] <UDID> <bundle-id> [args...]` | `--console` streams stdout/stderr. `--terminate-running-process` kills existing instance first. |
58
- | `terminate` | `simctl terminate <UDID> <bundle-id>` | Sends SIGTERM to the running app. |
59
- | `spawn` | `simctl spawn <UDID> <path-to-binary> [args...]` | Runs an arbitrary binary inside the simulator. Used for `log stream`. |
60
- | `get_app_container` | `simctl get_app_container <UDID> <bundle-id> [app\|data\|groups\|<group-id>]` | Returns the filesystem path to the container. `groups` lists all App Group containers. |
61
- | `appinfo` | `simctl appinfo <UDID> <bundle-id>` | Prints Info.plist-derived information as JSON. |
62
-
63
- For scripts that boot a simulator before installing, prefer:
64
-
65
- ```bash
66
- xcrun simctl bootstatus <UDID> -b
67
- xcrun simctl install <UDID> build/Build/Products/Debug-iphonesimulator/MyApp.app
68
- ```
69
-
70
- `bootstatus -b` safely boots if needed and waits until the simulator finishes booting. If you call `simctl boot` separately, follow it with `xcrun simctl bootstatus <UDID>` before `install`, `launch`, `push`, or `location`.
71
-
72
- ### Launch Arguments and Environment
73
-
74
- ```bash
75
- # Pass launch arguments (received as CommandLine.arguments)
76
- xcrun simctl launch booted com.example.MyApp --reset-onboarding --debug-mode
77
-
78
- # Override language and locale
79
- xcrun simctl launch booted com.example.MyApp -AppleLanguages "(ja)" -AppleLocale "ja_JP"
80
-
81
- # Set environment variables for the launched app
82
- SIMCTL_CHILD_MY_VAR=value xcrun simctl launch booted com.example.MyApp
83
- ```
60
+ ## Simulation
84
61
 
85
- Use the `SIMCTL_CHILD_` prefix for environment variables passed to `simctl launch`. Use `simctl spawn` for arbitrary processes inside the simulator, such as `log stream`, not as the default way to launch an installed app with environment.
62
+ | Command | What it does |
63
+ |---|---|
64
+ | `push <dev> [<bundle-id>] <payload.json\|->` | Delivers a local remote-notification payload; the bundle ID may be omitted when the payload names it in `Simulator Target Bundle` (an explicit argument wins) |
65
+ | `openurl <dev> <url>` | Opens a URL as if tapped |
66
+ | `location <dev> set\|clear\|list\|run\|start [...]` | Simulated location |
67
+ | `privacy <dev> grant\|revoke\|reset <service> [<bundle-id>]` | Permission state; some changes terminate the running app |
68
+ | `keychain <dev> add-root-cert\|add-cert\|reset [path]` | Adds a trusted root or other certificate, or resets the keychain |
69
+ | `status_bar <dev> override\|clear\|list [flags]` | Status bar overrides |
86
70
 
87
- ## Testing and Simulation Commands
71
+ ## Push payloads
88
72
 
89
- | Command | Synopsis | Notes |
90
- |---------|----------|-------|
91
- | `push` | `simctl push <UDID> [<bundle-id>] <payload.json\|->` | Simulates local push delivery. Use `-` for stdin. Bundle ID is optional when the payload contains `Simulator Target Bundle`. |
92
- | `openurl` | `simctl openurl <UDID> <URL>` | Triggers universal links or custom URL schemes. |
93
- | `location` | `simctl location <UDID> <set\|clear\|list\|run\|start> [args]` | `set <lat,lon>`, `run <scenario>`, `list`, `start`, or `clear`. |
94
- | `privacy` | `simctl privacy <UDID> <grant\|revoke\|reset> <service> <bundle-id>` | See [Privacy Service Names](#privacy-service-names) for service values. |
95
- | `keychain` | `simctl keychain <UDID> <add-root-cert\|add-cert\|reset> [cert-path]` | Manages trusted certificates in the simulator keychain. |
96
- | `status_bar` | `simctl status_bar <UDID> <override\|clear> [flags]` | See [Status Bar Override Flags](#status-bar-override-flags). |
97
-
98
- ### Push Payload Format
99
-
100
- The JSON payload mirrors the APNs payload format. The `Simulator Target Bundle` key is optional - when provided, the bundle ID argument can be omitted:
73
+ The payload follows the APNs format:
101
74
 
102
75
  ```json
103
76
  {
104
- "Simulator Target Bundle": "com.example.MyApp",
105
- "aps": {
106
- "alert": {
107
- "title": "Order Update",
108
- "subtitle": "Order #1234",
109
- "body": "Your order has been shipped"
110
- },
111
- "badge": 1,
112
- "sound": "default",
113
- "category": "ORDER_STATUS",
114
- "thread-id": "order-1234",
115
- "interruption-level": "time-sensitive"
77
+ "Simulator Target Bundle": "org.example.pantry",
78
+ "aps": {
79
+ "alert": {
80
+ "title": "Delivery window changed",
81
+ "subtitle": "Order 1182",
82
+ "body": "Your groceries now arrive between 6 and 7 pm."
116
83
  },
117
- "orderID": "1234"
84
+ "badge": 2,
85
+ "sound": "default",
86
+ "category": "DELIVERY_UPDATE",
87
+ "thread-id": "order-1182",
88
+ "interruption-level": "time-sensitive"
89
+ },
90
+ "orderID": "1182"
118
91
  }
119
92
  ```
120
93
 
121
- The payload must be a top-level JSON object, include a valid `aps` dictionary, and be 4096 bytes or less. `simctl push` supports only application remote push notifications; it does not support VoIP, Complication, File Provider, or other push types.
122
-
123
- ### Location Scenarios
124
-
125
- The `run` subcommand accepts predefined scenario names, not GPX file paths:
126
-
127
- ```bash
128
- # List available predefined scenarios
129
- xcrun simctl location booted list
130
-
131
- # Run a predefined scenario
132
- xcrun simctl location booted run "City Run"
133
-
134
- # Follow custom command-line waypoints
135
- xcrun simctl location booted start --speed=15 --interval=1 \
136
- 37.3349,-122.0090 37.3317,-122.0307
137
-
138
- # Read waypoints from stdin, one "lat,lon" pair per line
139
- printf "37.3349,-122.0090\n37.3317,-122.0307\n" | \
140
- xcrun simctl location booted start --distance=100 -
141
-
142
- # Set a fixed coordinate
143
- xcrun simctl location booted set 37.3349,-122.0090
144
-
145
- # Clear the simulated location
146
- xcrun simctl location booted clear
147
- ```
148
-
149
- Available scenarios include "City Run", "City Bicycle Ride", "Freeway Drive", and "Apple" (stationary at Apple Park). Use `list` to see all options on your system.
150
-
151
- Use `start` for command-line waypoint routes. It accepts at least two latitude/longitude pairs, optional speed, and either distance- or interval-based update cadence. The command boundary matters: `simctl location run` accepts built-in scenario names, not GPX file paths; for custom routes already stored as GPX files, use Xcode's Debug > Simulate Location menu instead.
94
+ simctl checks three things: the top level is a JSON object, it contains a
95
+ valid `aps` dictionary, and the whole payload is 4096 bytes or less. Only
96
+ ordinary application remote notifications are supported; VoIP, complication,
97
+ File Provider and other push types are rejected.
152
98
 
153
- ## Media and IO Commands
99
+ ## Location
154
100
 
155
- | Command | Synopsis | Notes |
156
- |---------|----------|-------|
157
- | `io screenshot` | `simctl io <UDID> screenshot [--type png\|jpeg\|tiff\|bmp\|gif] [--mask ignored\|alpha\|black] <path>` | Default type is png. |
158
- | `io recordVideo` | `simctl io <UDID> recordVideo [--codec h264\|hevc] [--mask ignored\|alpha\|black] [--force] <path>` | Ctrl+C to stop. `--force` overwrites existing files. |
159
- | `addmedia` | `simctl addmedia <UDID> <path> [path...]` | Adds photos, live photos, videos, or contacts to the device. Supports PNG, JPEG, GIF, MOV, MP4, and vCard. |
101
+ - Built-in scenarios include "Freeway Drive", "City Run", "City Bicycle Ride"
102
+ and "Apple" (a fixed point at the company campus); `list` prints what the
103
+ local runtime offers.
104
+ - `start` needs at least two `lat,lon` waypoints and accepts
105
+ `--speed=<m/s>` (20 m/s when omitted) plus either `--distance=<meters>`
106
+ between updates or `--interval=<seconds>` between updates (1 s when neither
107
+ is given). Use `-` to read waypoints from stdin, one per line. Coordinates
108
+ use `.` for decimals and `,` between latitude and longitude.
109
+ - `run` accepts scenario names only. A stored GPX route is played through
110
+ Xcode's Debug > Simulate Location.
160
111
 
161
- ### Mask Options
112
+ ## Media and capture
162
113
 
163
- | Value | Effect |
164
- |-------|--------|
165
- | `ignored` | No mask applied (default). Full rectangular capture. |
166
- | `alpha` | Transparent pixels where the device bezel would be. Produces PNG with alpha channel. Not supported for video recording - falls back to `black`. |
167
- | `black` | Black pixels where the device bezel would be. Works with JPEG. |
114
+ | Command | Notes |
115
+ |---|---|
116
+ | `io <dev> screenshot [--type=png\|jpeg\|tiff\|bmp\|gif] [--mask=ignored\|alpha\|black] <file>` | PNG unless a type is given; `-` writes to stdout |
117
+ | `io <dev> recordVideo [--codec=h264\|hevc] [--mask=ignored\|black] [--force] <file>` | HEVC by default; stop with Ctrl+C; `--force` overwrites an existing file |
118
+ | `addmedia <dev> <path> [path...]` | Imports photos, Live Photos (photo plus video), videos and vCard contacts; PNG, JPEG, GIF, MOV, MP4 and `.vcf` all work |
168
119
 
169
- ## JSON Output Parsing
120
+ Mask policies for non-rectangular screens:
170
121
 
171
- ### Find a Booted Device UDID
122
+ - `ignored` (default): the whole rectangular framebuffer.
123
+ - `alpha`: pixels outside the screen shape become transparent, so a PNG keeps
124
+ the rounded corners. Video does not support it and renders the mask black.
125
+ - `black`: pixels outside the screen shape are black; fine for JPEG.
172
126
 
173
- ```bash
174
- xcrun simctl list -j devices booted | \
175
- jq -r '[.devices[][] | select(.state == "Booted")] | first | .udid'
176
- ```
127
+ `recordVideo` prints "Recording started" to stderr once the first frame is
128
+ captured, which scripts can wait for.
177
129
 
178
- ### Find a Device by Name and Runtime
130
+ ## JSON with jq
179
131
 
180
132
  ```bash
181
- RUNTIME="com.apple.CoreSimulator.SimRuntime.iOS-18-4"
182
- xcrun simctl list -j devices available | \
183
- jq -r --arg rt "$RUNTIME" \
184
- '.devices[$rt][] | select(.name == "iPhone 16 Pro") | .udid'
185
- ```
186
-
187
- ### List All Available Runtimes
133
+ xcrun simctl list devices booted --json |
134
+ jq -r '[.devices[][] | select(.state == "Booted") | .udid] | first'
188
135
 
189
- ```bash
190
- xcrun simctl list -j runtimes | \
191
- jq -r '.runtimes[] | select(.isAvailable == true) | "\(.name) - \(.identifier)"'
192
- ```
136
+ xcrun simctl list devices --json |
137
+ jq -r --arg rt com.apple.CoreSimulator.SimRuntime.iOS-26-0 \
138
+ '.devices[$rt][] | select(.name == "Checkout iPad") | .udid'
193
139
 
194
- ### Get Device State
140
+ xcrun simctl list runtimes --json |
141
+ jq -r '.runtimes[] | select(.isAvailable) | "\(.name)\t\(.identifier)"'
195
142
 
196
- ```bash
197
- xcrun simctl list -j devices | \
198
- jq -r --arg udid "$UDID" \
199
- '[.devices[][] | select(.udid == $udid)] | first | .state'
143
+ xcrun simctl list devices --json |
144
+ jq -r --arg id "$SIM" '.devices[][] | select(.udid == $id) | .state'
200
145
  ```
201
146
 
202
- ## Privacy Service Names
203
-
204
- Service names accepted by `simctl privacy grant|revoke|reset`:
205
-
206
- | Service | Description |
207
- |---------|-------------|
208
- | `all` | All services. `grant` and `revoke` require a bundle identifier; `reset` may omit it. |
209
- | `calendar` | EventKit calendar access |
210
- | `contacts-limited` | Limited contacts access |
211
- | `contacts` | Full contacts access |
212
- | `location` | When-in-use location access |
213
- | `location-always` | Always location access |
214
- | `photos-add` | Add-only photo library access |
215
- | `photos` | Full photo library access |
216
- | `media-library` | Apple Music / media library |
217
- | `microphone` | Microphone access |
218
- | `motion` | Core Motion activity data |
219
- | `reminders` | EventKit reminders access |
220
- | `siri` | Siri integration |
221
-
222
- ## Status Bar Override Flags
223
-
224
- All flags for `simctl status_bar <UDID> override`:
225
-
226
- | Flag | Type | Example |
227
- |------|------|---------|
228
- | `--time` | String | `"9:41"` |
229
- | `--dataNetwork` | String | `hide`, `wifi`, `3g`, `4g`, `lte`, `lte-a`, `lte+`, `5g`, `5g+`, `5g-uc`, `5g-uwb` |
230
- | `--wifiMode` | String | `searching`, `failed`, `active` |
231
- | `--wifiBars` | Integer | `0`-`3` |
232
- | `--cellularMode` | String | `notSupported`, `searching`, `failed`, `active` |
233
- | `--cellularBars` | Integer | `0`-`4` |
234
- | `--operatorName` | String | `""` (empty for clean screenshots) |
235
- | `--batteryState` | String | `charging`, `charged`, `discharging` |
236
- | `--batteryLevel` | Integer | `0`-`100` |
237
-
238
- ### App Store Screenshot Preset
147
+ In order: the UDID of the first booted device; a UDID by name and runtime;
148
+ installed runtimes that can be used, with their identifiers; and the state of
149
+ one device.
150
+
151
+ ## Privacy services
152
+
153
+ | Service | Scope |
154
+ |---|---|
155
+ | `all` | Every service. `grant` and `revoke` still need a bundle ID; `reset` can omit it |
156
+ | `calendar` | Calendar events (EventKit) |
157
+ | `reminders` | Reminders (EventKit) |
158
+ | `contacts-limited` | Basic contact details |
159
+ | `contacts` | Full contact records |
160
+ | `location` | Location while in use |
161
+ | `location-always` | Location at all times |
162
+ | `photos-add` | Adding to the library only |
163
+ | `photos` | Full photo library |
164
+ | `media-library` | Music and media library |
165
+ | `microphone` | Audio input |
166
+ | `motion` | Motion and fitness data (Core Motion) |
167
+ | `siri` | Using the app with Siri |
168
+
169
+ ## Status bar flags
170
+
171
+ | Flag | Accepted values |
172
+ |---|---|
173
+ | `--time` | Any string, for example `9:41`; a valid ISO date also sets the date |
174
+ | `--dataNetwork` | `wifi` or `hide`; cellular types `3g`, `4g`, `lte`, `lte-a`, `lte+`, and the 5G family `5g`, `5g+`, `5g-uc`, `5g-uwb` |
175
+ | `--wifiMode` | `searching`, `failed`, `active` |
176
+ | `--wifiBars` | 0 to 3 |
177
+ | `--cellularMode` | `notSupported`, `searching`, `failed`, `active` |
178
+ | `--cellularBars` | 0 to 4 |
179
+ | `--operatorName` | Any string; `''` for none |
180
+ | `--batteryState` | `charging`, `charged`, `discharging` |
181
+ | `--batteryLevel` | 0 to 100 |
182
+
183
+ A preset for store screenshots:
239
184
 
240
185
  ```bash
241
- xcrun simctl status_bar booted override \
242
- --time "9:41" \
243
- --batteryState charged \
244
- --batteryLevel 100 \
245
- --cellularMode active \
246
- --cellularBars 4 \
247
- --wifiMode active \
248
- --wifiBars 3 \
249
- --dataNetwork wifi \
250
- --operatorName ""
186
+ xcrun simctl status_bar "$SIM" override \
187
+ --dataNetwork wifi --wifiMode active --wifiBars 3 \
188
+ --cellularMode active --cellularBars 4 --operatorName '' \
189
+ --batteryState charged --batteryLevel 100 --time "9:41"
251
190
  ```
252
191
 
253
192
  ## Troubleshooting
254
193
 
255
- ### Stuck "Booting" State
194
+ **Device stuck while booting** (boot fails because the device is already in
195
+ the Booting state):
256
196
 
257
- The device shows state "Booting" and `simctl boot` returns "Unable to boot device in current state: Booting."
197
+ 1. `xcrun simctl shutdown <dev>`, then `erase <dev>`, then `boot <dev>`.
198
+ 2. Still failing: delete the device and create a new one.
199
+ 3. Last resort: `xcrun simctl shutdown all` and remove
200
+ `~/Library/Developer/CoreSimulator/Caches`.
258
201
 
259
- ```bash
260
- # Step 1: force shutdown
261
- xcrun simctl shutdown <UDID>
202
+ **Runtime missing** ("Invalid runtime", or nothing under `list runtimes`):
203
+ check `xcrun simctl list runtimes`, then install one with
204
+ `xcodebuild -downloadPlatform iOS` or from Xcode > Settings > Components.
205
+ Runtimes can be larger than 5 GB, so CI images should have them preinstalled.
262
206
 
263
- # Step 2: erase the device
264
- xcrun simctl erase <UDID>
265
-
266
- # Step 3: boot again
267
- xcrun simctl boot <UDID>
268
- ```
269
-
270
- If erasing does not resolve it, delete and recreate the device. As a last resort, clear the CoreSimulator caches:
207
+ **CoreSimulator cache damage** shows up as boot failures, a stale
208
+ `simctl list`, or "Unable to determine simulator device status". Full reset:
271
209
 
272
210
  ```bash
273
211
  xcrun simctl shutdown all
274
- rm -rf ~/Library/Developer/CoreSimulator/Caches
275
- ```
276
-
277
- ### Runtime Not Installed
278
-
279
- `simctl create` or `simctl boot` fails with "Invalid runtime" or the runtime does not appear in `simctl list runtimes`.
280
-
281
- ```bash
282
- # Check what's installed
283
- xcrun simctl list runtimes
284
-
285
- # Download a runtime via xcodebuild
286
- xcodebuild -downloadPlatform iOS
287
-
288
- # Or download via Xcode > Settings > Platforms
289
- ```
290
-
291
- Runtime downloads can be large (5+ GB). In CI, pre-install runtimes in the base image.
292
-
293
- ### CoreSimulator Cache Corruption
294
-
295
- Symptoms: devices fail to boot, `simctl list` shows stale data, or "Unable to determine simulator device status."
296
-
297
- ```bash
298
- # Nuclear option - reset everything
299
- xcrun simctl shutdown all
300
212
  xcrun simctl erase all
301
- rm -rf ~/Library/Developer/CoreSimulator/Caches
302
- # Restart CoreSimulatorService
303
- launchctl kickstart -k gui/$(id -u)/com.apple.CoreSimulator.CoreSimulatorService 2>/dev/null || true
213
+ rm -rf "$HOME/Library/Developer/CoreSimulator/Caches"
214
+ launchctl kickstart -k "gui/$UID/com.apple.CoreSimulator.CoreSimulatorService" || true
304
215
  ```
305
216
 
306
- After clearing caches, you may need to re-create custom devices. Default devices are recreated automatically by Xcode.
307
-
308
- ### "Unable to boot device in current state: Shutdown"
217
+ Afterwards, custom devices may need to be created again; Xcode recreates its
218
+ default set by itself.
309
219
 
310
- This usually means the required runtime is not fully installed or is corrupted. Verify the runtime is available and re-download if needed:
311
-
312
- ```bash
313
- xcrun simctl list runtimes
314
- # If the runtime shows (unavailable), re-download it
315
- xcodebuild -downloadPlatform iOS
316
- ```
220
+ **Boot fails from the Shutdown state** ("Unable to boot device in current
221
+ state: Shutdown"): usually the runtime is missing or damaged. Look for
222
+ "(unavailable)" next to it in `list runtimes` and download it again with
223
+ `xcodebuild -downloadPlatform iOS`.