@mmerterden/multi-agent-pipeline 20.6.0 → 20.8.0

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 (326) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/LICENSE +0 -10
  3. package/docs/facts.json +1 -1
  4. package/manifest.json +328 -329
  5. package/package.json +2 -2
  6. package/pipeline/multi-agent-refs/features/design-conformance.md +62 -64
  7. package/pipeline/scripts/_notices.mjs +12 -1
  8. package/pipeline/scripts/gen-skills-index.mjs +1 -1
  9. package/pipeline/skills/.skill-manifest.json +106 -106
  10. package/pipeline/skills/shared/README.md +71 -71
  11. package/pipeline/skills/shared/external/agent-introspection-debugging/SKILL.md +1 -0
  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/android-architecture/SKILL.md +2 -0
  16. package/pipeline/skills/shared/external/android-performance/SKILL.md +2 -0
  17. package/pipeline/skills/shared/external/android-security/SKILL.md +2 -0
  18. package/pipeline/skills/shared/external/app-clips/SKILL.md +260 -160
  19. package/pipeline/skills/shared/external/app-clips/evals/evals.json +27 -27
  20. package/pipeline/skills/shared/external/app-clips/references/data-handoff-notifications-location.md +150 -83
  21. package/pipeline/skills/shared/external/app-clips/references/routing-and-experiences.md +135 -83
  22. package/pipeline/skills/shared/external/app-clips/references/size-capabilities-and-promotion.md +143 -85
  23. package/pipeline/skills/shared/external/app-intents/SKILL.md +302 -304
  24. package/pipeline/skills/shared/external/app-intents/evals/evals.json +21 -21
  25. package/pipeline/skills/shared/external/app-intents/references/appintents-advanced.md +594 -894
  26. package/pipeline/skills/shared/external/app-store-optimization/SKILL.md +339 -277
  27. package/pipeline/skills/shared/external/app-store-optimization/evals/evals.json +27 -23
  28. package/pipeline/skills/shared/external/app-store-optimization/references/keyword-research-methodology.md +105 -122
  29. package/pipeline/skills/shared/external/app-store-optimization/references/product-page-variants.md +143 -166
  30. package/pipeline/skills/shared/external/app-store-review/SKILL.md +307 -326
  31. package/pipeline/skills/shared/external/app-store-review/evals/evals.json +21 -21
  32. package/pipeline/skills/shared/external/app-store-review/references/privacy-manifest.md +105 -67
  33. package/pipeline/skills/shared/external/app-store-review/references/review-checklists.md +114 -101
  34. package/pipeline/skills/shared/external/apple-on-device-ai/SKILL.md +333 -360
  35. package/pipeline/skills/shared/external/apple-on-device-ai/evals/evals.json +24 -27
  36. package/pipeline/skills/shared/external/apple-on-device-ai/references/coreml-conversion.md +215 -322
  37. package/pipeline/skills/shared/external/apple-on-device-ai/references/coreml-optimization.md +161 -256
  38. package/pipeline/skills/shared/external/apple-on-device-ai/references/foundation-models.md +277 -387
  39. package/pipeline/skills/shared/external/apple-on-device-ai/references/mlx-swift.md +196 -210
  40. package/pipeline/skills/shared/external/authentication/SKILL.md +265 -381
  41. package/pipeline/skills/shared/external/authentication/evals/evals.json +25 -25
  42. package/pipeline/skills/shared/external/authentication/references/keychain-biometric.md +133 -178
  43. package/pipeline/skills/shared/external/authentication/references/passkeys.md +111 -147
  44. package/pipeline/skills/shared/external/avkit/SKILL.md +267 -364
  45. package/pipeline/skills/shared/external/avkit/evals/evals.json +26 -26
  46. package/pipeline/skills/shared/external/avkit/references/avkit-patterns.md +375 -493
  47. package/pipeline/skills/shared/external/background-processing/SKILL.md +270 -382
  48. package/pipeline/skills/shared/external/background-processing/evals/evals.json +22 -22
  49. package/pipeline/skills/shared/external/background-processing/references/background-task-patterns.md +169 -317
  50. package/pipeline/skills/shared/external/backlog/BACKLOG.md +1 -1
  51. package/pipeline/skills/shared/external/backlog/SKILL.md +56 -33
  52. package/pipeline/skills/shared/external/callkit-voip/SKILL.md +290 -371
  53. package/pipeline/skills/shared/external/callkit-voip/evals/evals.json +24 -24
  54. package/pipeline/skills/shared/external/callkit-voip/references/callkit-patterns.md +175 -343
  55. package/pipeline/skills/shared/external/ci-cd-pipelines/SKILL.md +1 -0
  56. package/pipeline/skills/shared/external/cloudkit-sync/SKILL.md +292 -381
  57. package/pipeline/skills/shared/external/cloudkit-sync/evals/evals.json +33 -30
  58. package/pipeline/skills/shared/external/cloudkit-sync/references/cloudkit-patterns.md +227 -355
  59. package/pipeline/skills/shared/external/compose-components/SKILL.md +2 -0
  60. package/pipeline/skills/shared/external/compose-navigation/SKILL.md +3 -2
  61. package/pipeline/skills/shared/external/compose-testing/SKILL.md +2 -0
  62. package/pipeline/skills/shared/external/contacts-framework/SKILL.md +197 -346
  63. package/pipeline/skills/shared/external/contacts-framework/evals/evals.json +19 -21
  64. package/pipeline/skills/shared/external/contacts-framework/references/contacts-patterns.md +169 -308
  65. package/pipeline/skills/shared/external/core-bluetooth/SKILL.md +226 -376
  66. package/pipeline/skills/shared/external/core-bluetooth/evals/evals.json +25 -22
  67. package/pipeline/skills/shared/external/core-bluetooth/references/ble-patterns.md +257 -337
  68. package/pipeline/skills/shared/external/core-data/SKILL.md +292 -368
  69. package/pipeline/skills/shared/external/core-data/evals/evals.json +30 -27
  70. package/pipeline/skills/shared/external/core-motion/SKILL.md +235 -324
  71. package/pipeline/skills/shared/external/core-motion/evals/evals.json +31 -27
  72. package/pipeline/skills/shared/external/core-motion/references/motion-patterns.md +210 -310
  73. package/pipeline/skills/shared/external/core-nfc/SKILL.md +292 -366
  74. package/pipeline/skills/shared/external/core-nfc/evals/evals.json +22 -24
  75. package/pipeline/skills/shared/external/core-nfc/references/nfc-patterns.md +233 -329
  76. package/pipeline/skills/shared/external/coreml/SKILL.md +323 -367
  77. package/pipeline/skills/shared/external/coreml/evals/evals.json +24 -21
  78. package/pipeline/skills/shared/external/coreml/references/coreml-swift-integration.md +562 -565
  79. package/pipeline/skills/shared/external/council/SKILL.md +1 -0
  80. package/pipeline/skills/shared/external/cryptokit/SKILL.md +253 -394
  81. package/pipeline/skills/shared/external/cryptokit/evals/evals.json +20 -18
  82. package/pipeline/skills/shared/external/cryptokit/references/cryptokit-patterns.md +299 -488
  83. package/pipeline/skills/shared/external/css-modern/SKILL.md +1 -0
  84. package/pipeline/skills/shared/external/database-patterns/SKILL.md +1 -0
  85. package/pipeline/skills/shared/external/debugging-instruments/SKILL.md +270 -323
  86. package/pipeline/skills/shared/external/debugging-instruments/evals/evals.json +27 -30
  87. package/pipeline/skills/shared/external/debugging-instruments/references/instruments-guide.md +167 -315
  88. package/pipeline/skills/shared/external/debugging-instruments/references/lldb-patterns.md +140 -193
  89. package/pipeline/skills/shared/external/device-integrity/SKILL.md +230 -353
  90. package/pipeline/skills/shared/external/device-integrity/evals/evals.json +25 -21
  91. package/pipeline/skills/shared/external/device-integrity/references/device-integrity-patterns.md +159 -197
  92. package/pipeline/skills/shared/external/energykit/SKILL.md +225 -392
  93. package/pipeline/skills/shared/external/energykit/evals/evals.json +29 -28
  94. package/pipeline/skills/shared/external/energykit/references/energykit-patterns.md +174 -470
  95. package/pipeline/skills/shared/external/eventkit-calendar/SKILL.md +261 -383
  96. package/pipeline/skills/shared/external/eventkit-calendar/evals/evals.json +25 -22
  97. package/pipeline/skills/shared/external/eventkit-calendar/references/eventkit-patterns.md +165 -268
  98. package/pipeline/skills/shared/external/evidence-github/SKILL.md +2 -0
  99. package/pipeline/skills/shared/external/evidence-registry/SKILL.md +2 -0
  100. package/pipeline/skills/shared/external/gradle-kotlin-dsl/SKILL.md +2 -0
  101. package/pipeline/skills/shared/external/healthkit/SKILL.md +252 -303
  102. package/pipeline/skills/shared/external/healthkit/evals/evals.json +24 -23
  103. package/pipeline/skills/shared/external/healthkit/references/healthkit-patterns.md +369 -523
  104. package/pipeline/skills/shared/external/homekit-matter/SKILL.md +233 -348
  105. package/pipeline/skills/shared/external/homekit-matter/evals/evals.json +27 -22
  106. package/pipeline/skills/shared/external/homekit-matter/references/matter-commissioning.md +199 -305
  107. package/pipeline/skills/shared/external/html-semantic/SKILL.md +1 -0
  108. package/pipeline/skills/shared/external/humanizer/SKILL.md +1 -0
  109. package/pipeline/skills/shared/external/ios-accessibility/SKILL.md +368 -340
  110. package/pipeline/skills/shared/external/ios-accessibility/evals/evals.json +28 -27
  111. package/pipeline/skills/shared/external/ios-accessibility/references/a11y-patterns.md +314 -260
  112. package/pipeline/skills/shared/external/ios-accessibility/references/media-accessibility.md +97 -67
  113. package/pipeline/skills/shared/external/ios-accessibility/references/nutrition-labels.md +165 -101
  114. package/pipeline/skills/shared/external/ios-coding-standard/SKILL.md +1 -0
  115. package/pipeline/skills/shared/external/ios-localization/SKILL.md +258 -371
  116. package/pipeline/skills/shared/external/ios-localization/evals/evals.json +23 -23
  117. package/pipeline/skills/shared/external/ios-localization/references/formatstyle-locale.md +283 -491
  118. package/pipeline/skills/shared/external/ios-localization/references/string-catalogs.md +313 -440
  119. package/pipeline/skills/shared/external/ios-module-structure/SKILL.md +1 -0
  120. package/pipeline/skills/shared/external/ios-networking/SKILL.md +265 -341
  121. package/pipeline/skills/shared/external/ios-networking/evals/evals.json +24 -24
  122. package/pipeline/skills/shared/external/ios-networking/references/background-websocket.md +425 -652
  123. package/pipeline/skills/shared/external/ios-networking/references/file-storage-patterns.md +143 -285
  124. package/pipeline/skills/shared/external/ios-networking/references/lightweight-clients.md +93 -53
  125. package/pipeline/skills/shared/external/ios-networking/references/network-framework.md +231 -456
  126. package/pipeline/skills/shared/external/ios-networking/references/urlsession-patterns.md +517 -784
  127. package/pipeline/skills/shared/external/ios-security/SKILL.md +2 -0
  128. package/pipeline/skills/shared/external/ios-simulator/SKILL.md +265 -393
  129. package/pipeline/skills/shared/external/ios-simulator/evals/evals.json +21 -21
  130. package/pipeline/skills/shared/external/ios-simulator/references/simctl-commands.md +177 -270
  131. package/pipeline/skills/shared/external/live-activities/SKILL.md +318 -360
  132. package/pipeline/skills/shared/external/live-activities/evals/evals.json +21 -21
  133. package/pipeline/skills/shared/external/live-activities/references/activitykit-patterns.md +478 -710
  134. package/pipeline/skills/shared/external/localization-reuse-map/SKILL.md +91 -283
  135. package/pipeline/skills/shared/external/localization-reuse-map/reference/format-and-output.md +119 -151
  136. package/pipeline/skills/shared/external/localization-reuse-map/reference/publish-and-snapshot.md +60 -90
  137. package/pipeline/skills/shared/external/localization-reuse-map/reference/sources-and-recipes.md +119 -156
  138. package/pipeline/skills/shared/external/localization-reuse-map/scripts/build-artifact.py +726 -787
  139. package/pipeline/skills/shared/external/localization-reuse-map/scripts/build-spreadsheet.py +253 -288
  140. package/pipeline/skills/shared/external/localization-reuse-map/scripts/fetch-annotations.py +243 -304
  141. package/pipeline/skills/shared/external/localization-reuse-map/scripts/fetch-legacy-labels.py +88 -104
  142. package/pipeline/skills/shared/external/localization-reuse-map/scripts/publish-confluence.py +181 -235
  143. package/pipeline/skills/shared/external/localization-reuse-map/scripts/render-key-shots.py +198 -263
  144. package/pipeline/skills/shared/external/localization-reuse-map/scripts/render-overlay.py +461 -466
  145. package/pipeline/skills/shared/external/localization-reuse-map/scripts/resolve-legacy-values.py +145 -151
  146. package/pipeline/skills/shared/external/localization-reuse-map/scripts/resolve-new-values.py +123 -141
  147. package/pipeline/skills/shared/external/localization-reuse-map/scripts/scan-screen-keys.py +146 -157
  148. package/pipeline/skills/shared/external/localization-reuse-map/scripts/snapshot-resources.sh +22 -19
  149. package/pipeline/skills/shared/external/localization-reuse-map/scripts/verify-map.py +156 -140
  150. package/pipeline/skills/shared/external/mapkit-location/SKILL.md +295 -267
  151. package/pipeline/skills/shared/external/mapkit-location/evals/evals.json +28 -24
  152. package/pipeline/skills/shared/external/mapkit-location/references/mapkit-corelocation-patterns.md +378 -532
  153. package/pipeline/skills/shared/external/mapkit-location/references/mapkit-patterns.md +397 -499
  154. package/pipeline/skills/shared/external/metrickit-diagnostics/SKILL.md +165 -348
  155. package/pipeline/skills/shared/external/metrickit-diagnostics/evals/evals.json +26 -23
  156. package/pipeline/skills/shared/external/metrickit-diagnostics/references/metrickit-patterns.md +123 -130
  157. package/pipeline/skills/shared/external/musickit-audio/SKILL.md +189 -315
  158. package/pipeline/skills/shared/external/musickit-audio/evals/evals.json +22 -21
  159. package/pipeline/skills/shared/external/musickit-audio/references/musickit-patterns.md +181 -270
  160. package/pipeline/skills/shared/external/natural-language/SKILL.md +188 -340
  161. package/pipeline/skills/shared/external/natural-language/evals/evals.json +21 -21
  162. package/pipeline/skills/shared/external/natural-language/references/translation-patterns.md +171 -225
  163. package/pipeline/skills/shared/external/nextjs-app-router/SKILL.md +1 -0
  164. package/pipeline/skills/shared/external/passkit-wallet/SKILL.md +258 -392
  165. package/pipeline/skills/shared/external/passkit-wallet/evals/evals.json +30 -29
  166. package/pipeline/skills/shared/external/passkit-wallet/references/wallet-passes.md +164 -231
  167. package/pipeline/skills/shared/external/pdfkit/SKILL.md +312 -344
  168. package/pipeline/skills/shared/external/pdfkit/evals/evals.json +19 -19
  169. package/pipeline/skills/shared/external/pdfkit/references/pdfkit-patterns.md +413 -624
  170. package/pipeline/skills/shared/external/pencilkit-drawing/SKILL.md +242 -358
  171. package/pipeline/skills/shared/external/pencilkit-drawing/evals/evals.json +25 -21
  172. package/pipeline/skills/shared/external/pencilkit-drawing/references/pencilkit-patterns.md +161 -226
  173. package/pipeline/skills/shared/external/permissionkit/SKILL.md +282 -400
  174. package/pipeline/skills/shared/external/permissionkit/evals/evals.json +27 -30
  175. package/pipeline/skills/shared/external/permissionkit/references/permissionkit-patterns.md +237 -350
  176. package/pipeline/skills/shared/external/photos-camera-media/SKILL.md +276 -325
  177. package/pipeline/skills/shared/external/photos-camera-media/references/av-playback.md +299 -545
  178. package/pipeline/skills/shared/external/photos-camera-media/references/camera-capture.md +344 -588
  179. package/pipeline/skills/shared/external/photos-camera-media/references/image-loading-caching.md +316 -660
  180. package/pipeline/skills/shared/external/photos-camera-media/references/photokit-patterns.md +270 -416
  181. package/pipeline/skills/shared/external/play-store-review/SKILL.md +2 -0
  182. package/pipeline/skills/shared/external/push-notifications/SKILL.md +312 -340
  183. package/pipeline/skills/shared/external/push-notifications/evals/evals.json +27 -26
  184. package/pipeline/skills/shared/external/push-notifications/references/notification-patterns.md +328 -485
  185. package/pipeline/skills/shared/external/push-notifications/references/rich-notifications.md +327 -560
  186. package/pipeline/skills/shared/external/python-patterns/SKILL.md +1 -0
  187. package/pipeline/skills/shared/external/react-best-practices/SKILL.md +1 -0
  188. package/pipeline/skills/shared/external/realitykit-ar/SKILL.md +218 -410
  189. package/pipeline/skills/shared/external/realitykit-ar/evals/evals.json +24 -27
  190. package/pipeline/skills/shared/external/realitykit-ar/references/realitykit-patterns.md +221 -348
  191. package/pipeline/skills/shared/external/rest-api-design/SKILL.md +1 -0
  192. package/pipeline/skills/shared/external/retrofit-networking/SKILL.md +2 -0
  193. package/pipeline/skills/shared/external/room-database/SKILL.md +2 -0
  194. package/pipeline/skills/shared/external/search-first/SKILL.md +1 -0
  195. package/pipeline/skills/shared/external/shareplay-activities/SKILL.md +222 -393
  196. package/pipeline/skills/shared/external/shareplay-activities/evals/evals.json +23 -24
  197. package/pipeline/skills/shared/external/shareplay-activities/references/shareplay-patterns.md +280 -420
  198. package/pipeline/skills/shared/external/signal-community/SKILL.md +2 -0
  199. package/pipeline/skills/shared/external/skill-creator/SKILL.md +80 -41
  200. package/pipeline/skills/shared/external/skill-creator/audit.md +63 -59
  201. package/pipeline/skills/shared/external/skill-creator/checklist.md +28 -20
  202. package/pipeline/skills/shared/external/skill-creator/examples.md +40 -40
  203. package/pipeline/skills/shared/external/skill-creator/label-check.md +48 -36
  204. package/pipeline/skills/shared/external/skill-creator/scripts/audit-panel.js +91 -100
  205. package/pipeline/skills/shared/external/skill-creator/template.md +51 -39
  206. package/pipeline/skills/shared/external/speech-recognition/SKILL.md +217 -421
  207. package/pipeline/skills/shared/external/speech-recognition/evals/evals.json +23 -26
  208. package/pipeline/skills/shared/external/speech-recognition/references/speechanalyzer-patterns.md +133 -125
  209. package/pipeline/skills/shared/external/storekit/SKILL.md +228 -204
  210. package/pipeline/skills/shared/external/storekit/evals/evals.json +27 -24
  211. package/pipeline/skills/shared/external/storekit/references/app-review-guidelines.md +98 -109
  212. package/pipeline/skills/shared/external/storekit/references/core-patterns.md +298 -242
  213. package/pipeline/skills/shared/external/storekit/references/storekit-advanced.md +356 -649
  214. package/pipeline/skills/shared/external/swift-api-design-guidelines/SKILL.md +274 -399
  215. package/pipeline/skills/shared/external/swift-api-design-guidelines/evals/evals.json +22 -24
  216. package/pipeline/skills/shared/external/swift-api-design-guidelines/references/argument-labels-and-parameters.md +107 -108
  217. package/pipeline/skills/shared/external/swift-api-design-guidelines/references/conventions-and-special-rules.md +93 -165
  218. package/pipeline/skills/shared/external/swift-api-design-guidelines/references/naming-and-clarity.md +99 -137
  219. package/pipeline/skills/shared/external/swift-api-design-guidelines/references/side-effects-and-mutating-pairs.md +77 -120
  220. package/pipeline/skills/shared/external/swift-architecture/SKILL.md +334 -350
  221. package/pipeline/skills/shared/external/swift-architecture/evals/evals.json +22 -22
  222. package/pipeline/skills/shared/external/swift-charts/SKILL.md +208 -394
  223. package/pipeline/skills/shared/external/swift-charts/evals/evals.json +27 -30
  224. package/pipeline/skills/shared/external/swift-charts/references/charts-patterns.md +351 -762
  225. package/pipeline/skills/shared/external/swift-codable/SKILL.md +339 -343
  226. package/pipeline/skills/shared/external/swift-codable/evals/evals.json +20 -20
  227. package/pipeline/skills/shared/external/swift-concurrency/SKILL.md +303 -351
  228. package/pipeline/skills/shared/external/swift-concurrency/evals/evals.json +27 -24
  229. package/pipeline/skills/shared/external/swift-concurrency/references/approachable-concurrency.md +65 -80
  230. package/pipeline/skills/shared/external/swift-concurrency/references/async-algorithms.md +48 -84
  231. package/pipeline/skills/shared/external/swift-concurrency/references/bridging-interop.md +134 -79
  232. package/pipeline/skills/shared/external/swift-concurrency/references/concurrency-patterns.md +145 -167
  233. package/pipeline/skills/shared/external/swift-concurrency/references/diagnostics.md +62 -50
  234. package/pipeline/skills/shared/external/swift-concurrency/references/swiftui-concurrency.md +92 -121
  235. package/pipeline/skills/shared/external/swift-concurrency/references/synchronization-primitives.md +177 -241
  236. package/pipeline/skills/shared/external/swift-formatstyle/SKILL.md +258 -234
  237. package/pipeline/skills/shared/external/swift-language/SKILL.md +342 -382
  238. package/pipeline/skills/shared/external/swift-language/evals/evals.json +24 -27
  239. package/pipeline/skills/shared/external/swift-language/references/swift-attributes-interop.md +79 -56
  240. package/pipeline/skills/shared/external/swift-language/references/swift-patterns-extended.md +297 -340
  241. package/pipeline/skills/shared/external/swift-security/SKILL.md +180 -161
  242. package/pipeline/skills/shared/external/swift-security/evals/evals.json +25 -25
  243. package/pipeline/skills/shared/external/swift-security/references/biometric-authentication.md +314 -469
  244. package/pipeline/skills/shared/external/swift-security/references/certificate-trust.md +408 -476
  245. package/pipeline/skills/shared/external/swift-security/references/common-anti-patterns.md +260 -530
  246. package/pipeline/skills/shared/external/swift-security/references/compliance-owasp-mapping.md +270 -477
  247. package/pipeline/skills/shared/external/swift-security/references/credential-storage-patterns.md +573 -571
  248. package/pipeline/skills/shared/external/swift-security/references/cryptokit-public-key.md +370 -441
  249. package/pipeline/skills/shared/external/swift-security/references/cryptokit-symmetric.md +332 -433
  250. package/pipeline/skills/shared/external/swift-security/references/keychain-access-control.md +346 -468
  251. package/pipeline/skills/shared/external/swift-security/references/keychain-fundamentals.md +352 -472
  252. package/pipeline/skills/shared/external/swift-security/references/keychain-item-classes.md +431 -432
  253. package/pipeline/skills/shared/external/swift-security/references/keychain-sharing.md +328 -425
  254. package/pipeline/skills/shared/external/swift-security/references/migration-legacy-stores.md +341 -579
  255. package/pipeline/skills/shared/external/swift-security/references/secure-enclave.md +396 -457
  256. package/pipeline/skills/shared/external/swift-security/references/testing-security-code.md +354 -614
  257. package/pipeline/skills/shared/external/swift-testing/SKILL.md +188 -175
  258. package/pipeline/skills/shared/external/swift-testing/evals/evals.json +26 -24
  259. package/pipeline/skills/shared/external/swift-testing/references/testing-advanced.md +80 -84
  260. package/pipeline/skills/shared/external/swift-testing/references/testing-patterns.md +317 -433
  261. package/pipeline/skills/shared/external/swiftdata/SKILL.md +392 -256
  262. package/pipeline/skills/shared/external/swiftdata/evals/evals.json +24 -24
  263. package/pipeline/skills/shared/external/swiftdata/references/core-data-coexistence.md +206 -402
  264. package/pipeline/skills/shared/external/swiftdata/references/indexing.md +59 -52
  265. package/pipeline/skills/shared/external/swiftdata/references/predicate-pitfalls.md +57 -33
  266. package/pipeline/skills/shared/external/swiftdata/references/swiftdata-advanced.md +354 -747
  267. package/pipeline/skills/shared/external/swiftdata/references/swiftdata-queries.md +300 -508
  268. package/pipeline/skills/shared/external/swiftlint/SKILL.md +175 -226
  269. package/pipeline/skills/shared/external/swiftlint/references/adoption-and-configuration.md +141 -208
  270. package/pipeline/skills/shared/external/swiftlint/references/custom-rules-and-analyze.md +100 -109
  271. package/pipeline/skills/shared/external/swiftlint/references/plugins-run-scripts-and-integrations.md +159 -179
  272. package/pipeline/skills/shared/external/swiftlint/references/rule-reference.md +383 -18
  273. package/pipeline/skills/shared/external/swiftlint/references/rules-suppressions-and-baselines.md +143 -229
  274. package/pipeline/skills/shared/external/swiftui-animation/SKILL.md +283 -366
  275. package/pipeline/skills/shared/external/swiftui-animation/references/animation-advanced.md +396 -608
  276. package/pipeline/skills/shared/external/swiftui-animation/references/core-animation-bridge.md +336 -385
  277. package/pipeline/skills/shared/external/swiftui-gestures/SKILL.md +239 -349
  278. package/pipeline/skills/shared/external/swiftui-gestures/references/gesture-patterns.md +228 -310
  279. package/pipeline/skills/shared/external/swiftui-layout-components/SKILL.md +260 -249
  280. package/pipeline/skills/shared/external/swiftui-layout-components/references/form.md +92 -74
  281. package/pipeline/skills/shared/external/swiftui-layout-components/references/grids.md +112 -177
  282. package/pipeline/skills/shared/external/swiftui-layout-components/references/list.md +61 -64
  283. package/pipeline/skills/shared/external/swiftui-layout-components/references/scrollview.md +94 -134
  284. package/pipeline/skills/shared/external/swiftui-liquid-glass/SKILL.md +193 -225
  285. package/pipeline/skills/shared/external/swiftui-liquid-glass/references/liquid-glass.md +173 -327
  286. package/pipeline/skills/shared/external/swiftui-navigation/SKILL.md +193 -168
  287. package/pipeline/skills/shared/external/swiftui-navigation/references/deeplinks.md +127 -150
  288. package/pipeline/skills/shared/external/swiftui-navigation/references/navigationstack.md +132 -133
  289. package/pipeline/skills/shared/external/swiftui-navigation/references/sheets.md +152 -117
  290. package/pipeline/skills/shared/external/swiftui-navigation/references/tabview.md +106 -140
  291. package/pipeline/skills/shared/external/swiftui-patterns/SKILL.md +316 -252
  292. package/pipeline/skills/shared/external/swiftui-patterns/references/architecture-patterns.md +341 -332
  293. package/pipeline/skills/shared/external/swiftui-patterns/references/deprecated-migration.md +547 -854
  294. package/pipeline/skills/shared/external/swiftui-patterns/references/design-polish.md +485 -537
  295. package/pipeline/skills/shared/external/swiftui-patterns/references/platform-and-sharing.md +417 -499
  296. package/pipeline/skills/shared/external/swiftui-performance/SKILL.md +213 -376
  297. package/pipeline/skills/shared/external/swiftui-performance/references/demystify-swiftui-performance-wwdc23.md +86 -175
  298. package/pipeline/skills/shared/external/swiftui-performance/references/optimizing-swiftui-performance-instruments.md +89 -195
  299. package/pipeline/skills/shared/external/swiftui-performance/references/understanding-hangs-in-your-app.md +95 -182
  300. package/pipeline/skills/shared/external/swiftui-performance/references/understanding-improving-swiftui-performance.md +71 -149
  301. package/pipeline/skills/shared/external/swiftui-performance/references/wwdc-session-sources.md +21 -27
  302. package/pipeline/skills/shared/external/swiftui-uikit-interop/SKILL.md +303 -295
  303. package/pipeline/skills/shared/external/swiftui-uikit-interop/references/hosting-migration.md +204 -387
  304. package/pipeline/skills/shared/external/swiftui-uikit-interop/references/representable-recipes.md +469 -683
  305. package/pipeline/skills/shared/external/swiftui-webkit/SKILL.md +140 -186
  306. package/pipeline/skills/shared/external/swiftui-webkit/references/loading-and-observation.md +75 -86
  307. package/pipeline/skills/shared/external/swiftui-webkit/references/local-content-and-custom-schemes.md +63 -60
  308. package/pipeline/skills/shared/external/swiftui-webkit/references/migration-and-fallbacks.md +69 -137
  309. package/pipeline/skills/shared/external/swiftui-webkit/references/navigation-and-javascript.md +95 -67
  310. package/pipeline/skills/shared/external/tailwind-css/SKILL.md +1 -0
  311. package/pipeline/skills/shared/external/testing-backend/SKILL.md +1 -0
  312. package/pipeline/skills/shared/external/tipkit/SKILL.md +220 -335
  313. package/pipeline/skills/shared/external/tipkit/references/tipkit-patterns.md +356 -494
  314. package/pipeline/skills/shared/external/typescript-patterns/SKILL.md +1 -0
  315. package/pipeline/skills/shared/external/vision-framework/SKILL.md +260 -375
  316. package/pipeline/skills/shared/external/vision-framework/references/vision-requests.md +393 -515
  317. package/pipeline/skills/shared/external/vision-framework/references/visionkit-scanner.md +363 -539
  318. package/pipeline/skills/shared/external/vue-composition/SKILL.md +1 -0
  319. package/pipeline/skills/shared/external/weatherkit/SKILL.md +152 -310
  320. package/pipeline/skills/shared/external/weatherkit/references/weatherkit-patterns.md +288 -407
  321. package/pipeline/skills/shared/external/web-accessibility/SKILL.md +1 -0
  322. package/pipeline/skills/shared/external/web-performance/SKILL.md +1 -0
  323. package/pipeline/skills/shared/external/web-testing/SKILL.md +1 -0
  324. package/pipeline/skills/shared/external/widgetkit/SKILL.md +216 -288
  325. package/pipeline/skills/shared/external/widgetkit/references/widgetkit-advanced.md +414 -719
  326. package/pipeline/skills/shared/external/NOTICE-swift-ios-skills.md +0 -39
@@ -1,395 +1,247 @@
1
- # Instruments Guide Reference
2
-
3
- Detailed template-by-template guide for profiling iOS apps with Instruments. Companion to the main `debugging-instruments` skill.
4
-
5
- ## Contents
6
-
7
- - [General Workflow](#general-workflow)
8
- - [Time Profiler](#time-profiler)
9
- - [Allocations](#allocations)
10
- - [Leaks](#leaks)
11
- - [Network](#network)
12
- - [SwiftUI Instruments](#swiftui-instruments)
13
- - [Animation Hitches and Core Animation](#animation-hitches-and-core-animation)
14
- - [Power Profiler](#power-profiler)
15
- - [File Activity](#file-activity)
16
- - [System Trace](#system-trace)
17
- - [xctrace CLI](#xctrace-cli)
18
- - [Custom Instruments with os_signpost](#custom-instruments-with-os_signpost)
19
- - [Automation and CI Integration](#automation-and-ci-integration)
20
-
21
- ## General Workflow
22
-
23
- 1. **Build for profiling**: Product > Profile (Cmd+I). This builds with Release optimization by default.
24
- 2. **Select a template** from the Instruments chooser.
25
- 3. **Configure recording**: Set the target device and process.
26
- 4. **Record**: Press the red record button and reproduce the scenario.
27
- 5. **Analyze**: Use the timeline, detail views, and call tree to find issues.
28
- 6. **Filter**: Check "Hide System Libraries" and use the search bar to focus on your code.
29
-
30
- Always profile on a **physical device** for accurate measurements. Simulator
31
- performance does not reflect real-world behavior.
1
+ # Instruments Guide
32
2
 
33
- ## Time Profiler
34
-
35
- **When to use**: CPU is high, UI is slow, animations stutter, or you need to
36
- find which functions consume the most time.
37
-
38
- ### Key Workflow
3
+ Companion to the `debugging-instruments` skill: what each template is for, how
4
+ to read it, and how to drive recordings from scripts.
39
5
 
40
- 1. Record while reproducing the slow interaction.
41
- 2. Select the time range of interest in the timeline.
42
- 3. Switch to the **Call Tree** view in the detail pane.
43
- 4. Enable these checkboxes:
44
- - **Separate by Thread** - isolate main thread vs background
45
- - **Invert Call Tree** - show leaf functions (actual work) first
46
- - **Hide System Libraries** - focus on your code
47
- 5. Sort by **Weight** (self time) to find the hottest functions.
48
- 6. Double-click a function to view source with per-line timing.
6
+ ## Workflow That Fits Every Template
49
7
 
50
- ### Reading the Call Tree
8
+ Product > Profile (Cmd+I) builds the app for profiling, which uses the Release
9
+ configuration unless the scheme says otherwise. Then:
51
10
 
52
- - **Weight**: total time in this function and all its callees
53
- - **Self Weight**: time spent in this function alone (not callees)
54
- - **Symbol Name**: the function - look for your module prefix
11
+ 1. Choose a template.
12
+ 2. Pick the device and the process to launch or attach to.
13
+ 3. Record while you reproduce the problem.
14
+ 4. Read the timeline, the detail pane and the call tree.
15
+ 5. Narrow the data with Hide System Libraries and the search field.
55
16
 
56
- Focus on functions with high **Self Weight** - these are doing the actual work.
17
+ Profile on a physical device. Simulator runs on the Mac's CPU and memory and
18
+ does not tell you how the app performs on a phone.
57
19
 
58
- ### Tips
59
-
60
- - Profile the same user interaction 3 times to get stable measurements.
61
- - Use the **Comparison** view to diff traces before/after a fix.
62
- - Check "Flatten Recursion" if recursive calls make the tree hard to read.
63
-
64
- ## Allocations
20
+ ## Time Profiler
65
21
 
66
- **When to use**: Memory grows over time, you suspect objects are not being
67
- freed, or you need to track object lifetimes.
22
+ Use it for high CPU, slow screens, stuttering animations and for finding the
23
+ most expensive functions.
68
24
 
69
- ### Key Workflow
25
+ Reading the call tree:
70
26
 
71
- 1. Record while reproducing the scenario.
72
- 2. Use **Mark Generation** (button in the detail pane) to snapshot allocations
73
- at specific points. For example:
74
- - Mark before navigating to a screen
75
- - Navigate to the screen
76
- - Navigate back
77
- - Mark again
78
- - The difference shows objects that were not freed
79
- 3. Expand a generation to see allocations grouped by category.
80
- 4. Filter by your module name to exclude system allocations.
27
+ 1. Drag across the timeline to select the slow period.
28
+ 2. Open the Call Tree and turn on Separate by Thread, Invert Call Tree (leaf
29
+ functions first) and Hide System Libraries.
30
+ 3. Sort by Weight and double-click a function to see its source with per-line
31
+ cost.
81
32
 
82
- ### Allocation Lifespan
33
+ Weight is time spent in the function including its callees; Self Weight counts
34
+ only the function's own code. Functions with a high Self Weight are the ones
35
+ doing the work.
83
36
 
84
- - **Created & Still Living**: objects allocated and not yet freed
85
- - **Created & Destroyed**: objects with normal lifetimes
86
- - **Persistent**: long-lived allocations (singletons, caches)
87
- - **Transient**: short-lived allocations (autoreleased, temporary)
37
+ Tips:
38
+ - Perform the interaction three times so the numbers settle.
39
+ - Record before and after a change and diff them in the comparison view.
40
+ - Flatten Recursion collapses deep recursive trees into one entry.
88
41
 
89
- Focus on "Created & Still Living" objects in the generation diff - these
90
- are your potential leaks.
42
+ ## Allocations
91
43
 
92
- ### Heap Growth Analysis
44
+ Generation analysis:
93
45
 
94
- Enable the **Allocations List** and sort by **Persistent Bytes**. Look for:
95
- - Classes with unexpectedly high instance counts
96
- - Image data or NSData objects that should have been released
97
- - View controllers that persist after dismissal
46
+ 1. Click Mark Generation.
47
+ 2. Open the screen under suspicion.
48
+ 3. Leave it again.
49
+ 4. Click Mark Generation once more.
98
50
 
99
- ## Leaks
51
+ The second generation holds what the round trip left behind. Expand it to see
52
+ allocations grouped by category and filter by your module name.
100
53
 
101
- **When to use**: Suspected retain cycles or abandoned memory.
54
+ Lifespan filters:
102
55
 
103
- ### Key Workflow
56
+ | Category | Meaning |
57
+ |----------|---------|
58
+ | Created & Still Living | Allocated in the range and still alive |
59
+ | Created & Destroyed | Allocated and freed in the range |
60
+ | Persistent | Long-lived by design: singletons, caches |
61
+ | Transient | Short-lived temporaries and autoreleased objects |
104
62
 
105
- 1. Run with the Leaks template.
106
- 2. The tool automatically checks for leaks every 10 seconds.
107
- 3. Red "Leak" markers appear in the timeline when leaks are detected.
108
- 4. Click a leak marker to see the leaked object and its retain/release history.
109
- 5. The **Cycles & Roots** view shows the reference graph - follow the arrows
110
- to find the cycle.
63
+ In a generation diff, "Created & Still Living" is where leaks hide.
111
64
 
112
- ### Interpreting Results
65
+ For overall heap growth, sort the Allocations List by Persistent Bytes. Watch
66
+ for types with surprisingly high counts, images or `Data` buffers that are
67
+ never released, and view controllers that outlive their dismissal.
113
68
 
114
- - **Leak**: an object with no references pointing to it (true orphan)
115
- - **Root Leak**: the object at the head of a leaked object graph
116
- - **Cycles & Roots graph**: arrows show retain relationships - look for
117
- bidirectional arrows indicating a cycle
69
+ ## Leaks
118
70
 
119
- ### Common Cycle Patterns
71
+ - A leak check runs automatically every 10 seconds.
72
+ - Red markers on the timeline show where leaks were found; click one to see the
73
+ object and its retain and release history.
74
+ - Cycles & Roots draws the reference graph; arrows in both directions mean a
75
+ cycle.
76
+ - A *leak* is an object nothing refers to any more; a *root leak* is the top of
77
+ a leaked object graph.
120
78
 
121
- Leaks instrument commonly catches:
122
- - Closure -> self -> closure cycles
123
- - Delegate strong reference cycles
124
- - NotificationCenter observer blocks retaining self
125
- - CADisplayLink/Timer retaining target
79
+ Cycles this usually finds: a closure stored on an object that captures that
80
+ object, strong delegate references, block-based `NotificationCenter` observers
81
+ that capture `self`, and `CADisplayLink` or `Timer` retaining its target.
126
82
 
127
83
  ## Network
128
84
 
129
- **When to use**: Inspecting HTTP request/response timing, payload sizes,
130
- or connection reuse.
131
-
132
- ### Key Workflow
85
+ Each HTTP request appears as a bar on the timeline. Selecting one shows the
86
+ URL, method, status code, headers, a timing split (DNS, connect, TLS, request,
87
+ response) and the payload size.
133
88
 
134
- 1. Record with the Network template.
135
- 2. Each HTTP request appears as a bar in the timeline.
136
- 3. Select a request to see:
137
- - URL, method, status code
138
- - Request/response headers
139
- - Timing breakdown (DNS, connect, TLS, request, response)
140
- - Payload size
89
+ What to look for:
90
+ - Gaps in a waterfall where requests run one after another but could run in
91
+ parallel.
92
+ - Large responses that need pagination or compression.
93
+ - The same request sent more than once.
94
+ - Slow DNS or TLS setup that connection prewarming could hide.
141
95
 
142
- ### What to Look For
96
+ ## SwiftUI
143
97
 
144
- - **Waterfall gaps**: sequential requests that could be parallelized
145
- - **Large payloads**: responses that could use pagination or compression
146
- - **Redundant requests**: duplicate calls to the same endpoint
147
- - **DNS/TLS latency**: consider connection prewarming
98
+ Use it for bodies that run too often, redraws with no visible change, and list
99
+ rows whose identity keeps changing.
148
100
 
149
- ## SwiftUI Instruments
101
+ Lanes to read:
102
+ - **Update Groups**: batches of work SwiftUI performed together.
103
+ - **Long View Body Updates**: bodies that took longer than the threshold.
104
+ - **Cause and Effect Graph**: the chain of changes that made a view update.
150
105
 
151
- **When to use**: SwiftUI view body is evaluated too frequently, unnecessary
152
- redraws, or identity churn in lists.
153
-
154
- ### Key Workflow
155
-
156
- 1. Select the **SwiftUI** template in Instruments.
157
- 2. Record while interacting with the UI.
158
- 3. Check these lanes:
159
- - **Update Groups**: shows batches of view updates triggered together
160
- - **Long View Body Updates**: highlights body evaluations exceeding a time threshold
161
- - **Cause and Effect Graph**: traces why a view was re-evaluated
162
- 4. Look for views with excessive body evaluations during a single interaction.
163
-
164
- ### Tips
165
-
166
- - Filter by view name to focus on a specific component.
167
- - Cross-reference with Time Profiler to see if body evaluations are expensive.
168
- - See the `swiftui-performance` skill for remediation patterns.
106
+ Filter by view name and cross-check hot spots against Time Profiler. How to fix
107
+ what you find belongs to the `swiftui-performance` skill.
169
108
 
170
109
  ## Animation Hitches and Core Animation
171
110
 
172
- **When to use**: Frame drops, off-screen rendering, excessive blending.
173
-
174
- ### Key Workflow
175
-
176
- 1. Record with the **Animation Hitches** template on a real device when the
177
- symptom is stutter or missed frames.
178
- 2. Add Core Animation instruments such as **Core Animation FPS**,
179
- **Core Animation Commits**, or **Core Animation Activity** when you need
180
- lower-level render pipeline detail.
181
- 3. Check FPS, hitches, commits, and frame lifetime lanes for drops or long
182
- commit/render work.
183
- 4. Enable these debug options in Recording Options or Xcode view debugging:
184
- - **Color Blended Layers** - red areas have multiple overlapping layers
185
- - **Color Off-screen Rendered** - yellow areas use off-screen passes
186
- - **Color Hits Green and Misses Red** - rasterization cache hits/misses
111
+ Record Animation Hitches on a real device when scrolling or animations stutter
112
+ or frames are missed. For lower-level rendering detail add Core Animation FPS,
113
+ Core Animation Commits or Core Animation Activity, and read the FPS, hitch,
114
+ commit and frame-lifetime lanes.
187
115
 
188
- ### Common Issues
116
+ Rendering diagnostics live in Xcode (Debug > View Debugging > Rendering) and
117
+ in Simulator's Debug menu rather than in current Instruments:
118
+ - **Color Blended Layers**: overlapping translucent layers show in red.
119
+ - **Color Off-screen Rendered**: layers rendered off screen show in yellow.
120
+ - **Color Hits Green and Misses Red**: rasterization cache hits and misses.
189
121
 
190
- | Issue | Indicator | Fix |
191
- |-------|-----------|-----|
192
- | Transparent overlapping views | Red blended layers | Use opaque backgrounds |
193
- | Corner radius + clip | Off-screen rendering | Use `cornerCurve` with pre-masked images |
194
- | Shadow without path | Off-screen rendering | Set `shadowPath` explicitly |
195
- | Large images not downsampled | High memory + slow rendering | Downsample before display |
122
+ | Problem | Why it costs | Fix |
123
+ |---------|--------------|-----|
124
+ | Stacked transparent views | Blending, red in Color Blended Layers | Give views opaque backgrounds |
125
+ | Rounded corners with `masksToBounds` over image content | Off-screen pass | Round the image once before display, or avoid masking |
126
+ | Shadows without a path | Off-screen pass to find the shape | Set `shadowPath` |
127
+ | Full-size images in small views | Memory and decode cost | Downsample to display size first |
196
128
 
197
129
  ## Power Profiler
198
130
 
199
- **When to use**: Battery drain complaints, background energy impact, or
200
- App Store rejection for excessive energy use.
131
+ Use it for battery complaints, energy spent in the background, or an App Store
132
+ rejection that cites energy use. Record on a physical device.
201
133
 
202
- ### Key Workflow
134
+ Read the power, thermal state and energy impact lanes, and the per-component
135
+ split: CPU, network, location, GPU and background tasks.
203
136
 
204
- 1. Record with the **Power Profiler** template on a physical device.
205
- 2. Check power, thermal, and energy-impact lanes for high readings.
206
- 3. Examine component breakdown:
207
- - CPU
208
- - Network
209
- - Location
210
- - GPU
211
- - Background tasks
212
-
213
- ### Tips
214
-
215
- - Profile typical user sessions (5-10 minutes of real usage).
216
- - Compare foreground vs background energy impact.
217
- - Check that background tasks complete and do not run indefinitely.
218
- - Cross-reference with MetricKit energy metrics from production.
137
+ Tips:
138
+ - Record a realistic session of 5 to 10 minutes.
139
+ - Compare the app in the foreground with the app in the background.
140
+ - Make sure background tasks finish and stop.
141
+ - Cross-check against MetricKit energy metrics from the field.
219
142
 
220
143
  ## File Activity
221
144
 
222
- **When to use**: Slow file operations, excessive disk I/O, or disk write
223
- exceptions from MetricKit.
224
-
225
- ### Key Workflow
226
-
227
- 1. Record with the File Activity template.
228
- 2. Look for:
229
- - Frequent writes to the same file (journaling, logging)
230
- - Large reads on the main thread
231
- - Unintended file access patterns
145
+ Use it for slow file operations, heavy disk I/O and MetricKit disk-write
146
+ exceptions. Look for the same file written again and again, large reads on the
147
+ main thread and access patterns you did not expect.
232
148
 
233
149
  ## System Trace
234
150
 
235
- **When to use**: Deep investigation of thread scheduling, virtual memory
236
- faults, system calls, and inter-process communication.
237
-
238
- ### Key Workflow
151
+ Use it when you need to see thread scheduling, virtual memory faults, system
152
+ calls or IPC. Start from the main thread's lane and look for:
153
+ - threads blocked on locks, semaphores or dispatch queues,
154
+ - VM page faults,
155
+ - a high number of context switches.
239
156
 
240
- 1. Record with the System Trace template.
241
- 2. Focus on the main thread lane.
242
- 3. Look for:
243
- - **Thread blocks**: main thread waiting on locks, semaphores, or dispatch queues
244
- - **VM faults**: page faults from memory-mapped files or large allocations
245
- - **Context switches**: excessive switching between threads
157
+ It is the most detailed template. Reach for it after Time Profiler, when you
158
+ need to know what the operating system was doing.
246
159
 
247
- This is the most advanced template - use it after Time Profiler when you
248
- need OS-level detail.
249
-
250
- ## xctrace CLI
251
-
252
- ### Recording
253
-
254
- ```bash
255
- # Record Time Profiler trace
256
- xcrun xctrace record \
257
- --template "Time Profiler" \
258
- --device "iPhone" \
259
- --output ~/traces/profile.trace \
260
- --time-limit 30s \
261
- --launch -- /path/to/MyApp.app
262
-
263
- # Record Allocations trace for a running app
264
- xcrun xctrace record \
265
- --template "Allocations" \
266
- --device "iPhone" \
267
- --output ~/traces/alloc.trace \
268
- --attach MyApp
269
-
270
- # Record with multiple instruments
271
- xcrun xctrace record \
272
- --template "Time Profiler" \
273
- --instrument "Allocations" \
274
- --output ~/traces/combined.trace \
275
- --launch -- /path/to/MyApp.app
276
- ```
277
-
278
- ### Exporting Data
160
+ ## xctrace
279
161
 
280
162
  ```bash
281
- # List available tables in a trace
282
- xcrun xctrace export --input profile.trace --toc
283
-
284
- # Export specific table as XML
285
- xcrun xctrace export --input profile.trace \
286
- --xpath '/trace-toc/run/data/table[@schema="time-profile"]'
287
-
288
- # Export to a file
289
- xcrun xctrace export --input profile.trace \
290
- --xpath '/trace-toc/run/data/table[@schema="time-profile"]' \
291
- --output profile_data.xml
292
- ```
293
-
294
- ### Listing Resources
295
-
296
- ```bash
297
- # Available templates
298
- xcrun xctrace list templates
299
-
300
- # Connected devices
301
- xcrun xctrace list devices
302
-
303
- # Available instruments
163
+ xcrun xctrace record --template "Time Profiler" --time-limit 30s \
164
+ --output scroll.trace --launch -- /path/to/Atlas.app
165
+ xcrun xctrace record --template "Allocations" --attach Atlas --output memory.trace
166
+ xcrun xctrace export --input scroll.trace --toc
167
+ xcrun xctrace export --input scroll.trace \
168
+ --xpath '/trace-toc/run/data/table[@schema="time-profile"]' --output time-profile.xml
304
169
  xcrun xctrace list instruments
305
170
  ```
306
171
 
307
- ## Custom Instruments with os_signpost
172
+ - `--time-limit` stops the recording on its own.
173
+ - `--attach` records an app that is already running, instead of `--launch`.
174
+ - `--toc` lists the tables inside a trace; `--xpath` picks one to export.
308
175
 
309
- ### Emitting Signposts for Instruments
176
+ ## Custom Intervals with Signposts
310
177
 
311
178
  ```swift
312
179
  import os
313
180
 
314
- let signposter = OSSignposter(subsystem: "com.example.app", category: "Networking")
181
+ let signposter = OSSignposter(subsystem: "com.example.atlas", category: "Catalog")
315
182
 
316
- func fetchUser(id: String) async throws -> User {
317
- let signpostID = signposter.makeSignpostID()
318
- let state = signposter.beginInterval("fetchUser", id: signpostID)
319
- defer { signposter.endInterval("fetchUser", state) }
183
+ func loadCatalog(from url: URL) async throws -> [Product] {
184
+ let id = signposter.makeSignpostID()
185
+ let state = signposter.beginInterval("loadCatalog", id: id)
186
+ defer { signposter.endInterval("loadCatalog", state) }
320
187
 
321
- let (data, _) = try await URLSession.shared.data(from: userURL(id))
322
- signposter.emitEvent("dataReceived", id: signpostID, "\(data.count) bytes")
323
-
324
- return try JSONDecoder().decode(User.self, from: data)
188
+ let (data, _) = try await URLSession.shared.data(from: url)
189
+ signposter.emitEvent("downloaded", id: id, "\(data.count) bytes")
190
+ return try JSONDecoder().decode([Product].self, from: data)
325
191
  }
326
192
  ```
327
193
 
328
- ### Viewing in Instruments
329
-
330
- 1. Open Instruments with a Blank document, then add the **os_signpost**
331
- instrument, or start from a template that includes **Points of Interest**.
332
- 2. Your custom intervals appear as labeled bars in the timeline.
333
- 3. Events appear as point markers.
334
- 4. Filter by subsystem or category to isolate your signposts.
194
+ To see them, start from a Blank document and add the os_signpost instrument,
195
+ or use any template that includes Points of Interest. Intervals appear as
196
+ labelled bars and events as single markers; filter by subsystem and category.
335
197
 
336
- ### Integration with MetricKit
198
+ Signposts written to a log from `MXMetricManager.makeLogHandle(category:)` are
199
+ also counted in MetricKit payloads; the `metrickit-diagnostics` skill covers
200
+ that side.
337
201
 
338
- Signposts emitted through `MXMetricManager.makeLogHandle(category:)` are
339
- also reported in MetricKit payloads. See the `metrickit` skill
340
- for details on custom signpost metrics.
202
+ ## Automation and CI
341
203
 
342
- ## Automation and CI Integration
343
-
344
- ### Performance Baselines with xctrace
345
-
346
- Create a shell script for CI:
204
+ A script a CI job can run:
347
205
 
348
206
  ```bash
349
207
  #!/bin/bash
350
208
  set -euo pipefail
351
209
 
352
- APP_BUNDLE="build/MyApp.app"
353
- TRACE_OUTPUT="traces/ci_profile_$(date +%s).trace"
354
- TEMPLATE="Time Profiler"
355
-
356
- # Record trace
357
- xcrun xctrace record \
358
- --template "$TEMPLATE" \
359
- --output "$TRACE_OUTPUT" \
360
- --time-limit 60s \
361
- --launch -- "$APP_BUNDLE"
210
+ stamp=$(date +%Y%m%d-%H%M%S)
211
+ trace="traces/launch-$stamp.trace"
212
+ mkdir -p traces
362
213
 
363
- # Export data for analysis
364
- xcrun xctrace export \
365
- --input "$TRACE_OUTPUT" \
366
- --toc > "traces/toc.xml"
367
-
368
- echo "Trace saved to $TRACE_OUTPUT"
214
+ xcrun xctrace record --template "Time Profiler" --time-limit 60s \
215
+ --output "$trace" --launch -- "$APP_PATH"
216
+ xcrun xctrace export --input "$trace" --toc > "traces/launch-$stamp-toc.xml"
369
217
  ```
370
218
 
371
- ### XCTest Performance Metrics
372
-
373
- Complement Instruments with in-test measurements:
219
+ XCTest can measure a flow and compare it with a stored baseline:
374
220
 
375
221
  ```swift
376
- func testScrollPerformance() {
377
- let app = XCUIApplication()
378
- app.launch()
379
-
380
- let measureOptions = XCTMeasureOptions()
381
- measureOptions.iterationCount = 5
382
-
383
- measure(metrics: [
384
- XCTClockMetric(),
385
- XCTCPUMetric(),
386
- XCTMemoryMetric(),
387
- XCTStorageMetric()
388
- ], options: measureOptions) {
389
- app.swipeUp()
390
- app.swipeDown()
222
+ import XCTest
223
+
224
+ final class FeedScrollPerformanceTests: XCTestCase {
225
+ @MainActor
226
+ func testFeedScrolling() {
227
+ let app = XCUIApplication()
228
+ app.launch()
229
+
230
+ let options = XCTMeasureOptions()
231
+ options.iterationCount = 5
232
+
233
+ measure(metrics: [XCTClockMetric(),
234
+ XCTCPUMetric(application: app),
235
+ XCTMemoryMetric(application: app),
236
+ XCTStorageMetric(application: app)],
237
+ options: options) {
238
+ app.swipeUp()
239
+ app.swipeDown()
240
+ }
391
241
  }
392
242
  }
393
243
  ```
394
244
 
395
- Set performance baselines in Xcode to automatically flag regressions in CI.
245
+ `XCUIApplication` and its gestures are main-actor isolated, hence `@MainActor`
246
+ on the test method. Set a baseline for each measurement in Xcode's test report; later runs that
247
+ exceed it fail, so CI flags the regression without anyone reading traces.