@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,289 +1,275 @@
1
- # MLX Swift & llama.cpp Reference
2
-
3
- Complete reference for running open-source LLMs on Apple platforms using
4
- MLX Swift and llama.cpp.
1
+ # MLX Swift, llama.cpp and routing between backends
5
2
 
6
3
  ## Contents
7
4
 
8
- - [MLX Swift](#mlx-swift)
5
+ - [How MLX works](#how-mlx-works)
6
+ - [Loading and generating](#loading-and-generating)
7
+ - [Model sizes by device](#model-sizes-by-device)
8
+ - [Memory rules](#memory-rules)
9
+ - [Owning the model lifecycle](#owning-the-model-lifecycle)
10
+ - [Going to the background](#going-to-the-background)
9
11
  - [llama.cpp](#llamacpp)
10
- - [Multi-Backend Architecture](#multi-backend-architecture)
11
- - [Built-in Apple Frameworks](#built-in-apple-frameworks)
12
- - [Performance Best Practices](#performance-best-practices)
13
- - [Review Checklist](#review-checklist)
14
-
15
- ## MLX Swift
16
-
17
- Apple's ML framework for Swift. Highest sustained generation throughput on
18
- Apple Silicon via unified memory architecture.
12
+ - [GGUF quant types](#gguf-quant-types)
13
+ - [llama.cpp or MLX Swift](#llamacpp-or-mlx-swift)
14
+ - [Routing across backends](#routing-across-backends)
15
+ - [Built-in frameworks first](#built-in-frameworks-first)
16
+ - [Performance habits](#performance-habits)
17
+ - [Checklist](#checklist)
19
18
 
20
- ### Key Characteristics
19
+ ## How MLX works
21
20
 
22
- - Unified memory: operations run on CPU or GPU without data transfer
23
- - Lazy computation: operations computed only when needed
24
- - Automatic differentiation for training
25
- - Metal GPU acceleration
26
- - Research-oriented but increasingly used in production
21
+ - CPU and GPU share unified memory, so an array can move between them without
22
+ a copy.
23
+ - Evaluation is lazy; values are computed only when something needs them.
24
+ - It has automatic differentiation for training and runs on the GPU through
25
+ Metal.
26
+ - It started as a research tool and is used more and more in shipping apps.
27
27
 
28
- ### Loading and Running LLMs
28
+ ## Loading and generating
29
29
 
30
30
  ```swift
31
- import MLX
32
- import MLXLLM
33
- import MLXLMCommon
34
- import MLXLMHFAPI
35
31
  import MLXLMTokenizers
32
+ import MLXLMHFAPI
33
+ import MLXLMCommon
34
+ import MLXLLM
35
+ import MLX
36
36
 
37
+ let llama = ModelConfiguration(id: "mlx-community/Llama-3.2-3B-Instruct-4bit")
37
38
  let container = try await LLMModelFactory.shared.loadContainer(
38
39
  from: HubClient.default,
39
40
  using: TokenizersLoader(),
40
- configuration: .init(id: "mlx-community/Qwen3-4B-4bit")
41
+ configuration: llama
41
42
  )
43
+ ```
42
44
 
43
- let session = ChatSession(container)
44
- print(try await session.respond(to: "Hello"))
45
+ `ChatSession(container)` is the simple path. For control over streaming and
46
+ sampling, drive the container directly:
45
47
 
46
- // Use ModelContainer directly when you need streaming control.
47
- let input = try await container.prepare(input: UserInput(prompt: "Hello"))
48
- let stream = try await container.generate(
49
- input: input,
50
- parameters: GenerateParameters(temperature: 0.0)
51
- )
52
- for await event in stream {
53
- if case .chunk(let text) = event {
54
- print(text, terminator: "")
55
- }
48
+ ```swift
49
+ let question = UserInput(prompt: "Name three knots for climbing.")
50
+ let prepared = try await container.prepare(input: question)
51
+ let greedy = GenerateParameters(temperature: 0)
52
+ let events = try await container.generate(input: prepared, parameters: greedy)
53
+ for await item in events {
54
+ guard case .chunk(let piece) = item else { continue }
55
+ transcript += piece
56
56
  }
57
57
  ```
58
58
 
59
- ### Recommended Models by Device
59
+ ## Model sizes by device
60
+
61
+ | Device | Download size | Resident memory | Suggested model |
62
+ |---|---|---|---|
63
+ | iPhone 12 to 14 | about 278 MB | about 0.3 GB | SmolLM2-135M, or Qwen 2.5 at 0.5B |
64
+ | iPhone 15 Pro or newer | about 2.7 GB | about 3.5 GB | Gemma 3n E4B at 4 bits |
65
+ | Mac, 8 GB | about 1.8 GB | about 3 GB | Llama 3.2 3B at 4 bits |
66
+ | Mac, 16 GB or more | about 4 GB | about 6 GB | Mistral 7B at 4 bits |
60
67
 
61
- | Device | RAM | Recommended Model | Disk Size | RAM Usage |
62
- |---|---|---|---|---|
63
- | iPhone 12-14 | 4-6 GB | SmolLM2-135M or Qwen 2.5 0.5B | ~278 MB | ~0.3 GB |
64
- | iPhone 15 Pro+ | 8 GB | Gemma 3n E4B 4-bit | ~2.7 GB | ~3.5 GB |
65
- | Mac 8 GB | 8 GB | Llama 3.2 3B 4-bit | ~1.8 GB | ~3 GB |
66
- | Mac 16 GB+ | 16 GB+ | Mistral 7B 4-bit | ~4 GB | ~6 GB |
68
+ ## Memory rules
67
69
 
68
- ### Memory Management Rules
70
+ - On iOS keep total use under 60% of device RAM.
71
+ - Cap the buffer cache: `Memory.cacheLimit = 512 * 1024 * 1024`.
72
+ - Read `Memory.snapshot()` to watch usage, and lower the cache limit when the
73
+ system reports pressure.
74
+ - Before loading a model, check that the free memory can hold it.
75
+ - For larger models on iOS, add the Increased Memory Limit entitlement.
69
76
 
70
- 1. Never exceed 60% of total RAM on iOS
71
- 2. Set MLX cache limits:
72
- ```swift
73
- Memory.cacheLimit = 512 * 1024 * 1024 // 512 MB
74
- ```
75
- 3. Monitor memory pressure with `Memory.snapshot()` and reduce cache under pressure
76
- 4. Unload MLX and llama.cpp models on backgrounding or memory pressure; for MLX,
77
- also call `Memory.clearCache()` after generation-heavy phases
78
- 5. Use "Increased Memory Limit" entitlement for larger models on iOS
79
- 6. Pre-flight memory checks before loading models
80
- 7. Validate MLX Swift and llama.cpp on physical Apple Silicon; Simulator cannot
81
- exercise Metal-dependent inference, memory, or performance
77
+ ## Owning the model lifecycle
82
78
 
83
- ### Model Lifecycle Management
79
+ Keep the loaded model in one object that knows whether it is loaded, whether it
80
+ is generating, and how to let go of it.
84
81
 
85
82
  ```swift
83
+ import Observation
84
+
85
+ @MainActor
86
86
  @Observable
87
- class ModelManager {
88
- private var model: ModelContainer?
89
- private var generationCount = 0
90
-
91
- func loadModel() async throws {
92
- model = try await LLMModelFactory.shared.loadContainer(
93
- from: HubClient.default,
94
- using: TokenizersLoader(),
95
- configuration: .init(id: "mlx-community/Qwen3-4B-4bit")
96
- )
87
+ final class LocalModelHost {
88
+ private(set) var container: ModelContainer?
89
+ private(set) var runningGenerations = 0
90
+ private var generationTask: Task<Void, Never>?
91
+
92
+ var isBusy: Bool { runningGenerations > 0 }
93
+
94
+ func load(_ configuration: ModelConfiguration) async throws {
95
+ guard container == nil else { return }
96
+ let factory = LLMModelFactory.shared
97
+ container = try await factory.loadContainer(
98
+ from: HubClient.default, using: TokenizersLoader(), configuration: configuration)
97
99
  }
98
100
 
99
- func unloadModel() {
100
- model = nil
101
+ func cancelGeneration() { generationTask?.cancel() }
102
+
103
+ func unload() {
104
+ generationTask?.cancel()
105
+ container = nil
101
106
  Memory.clearCache()
102
107
  }
108
+
109
+ func track(_ task: Task<Void, Never>) {
110
+ generationTask = task
111
+ runningGenerations += 1
112
+ Task { await task.value; runningGenerations -= 1 }
113
+ }
103
114
  }
104
115
  ```
105
116
 
106
- Key lifecycle patterns:
107
- - Track active generation count to distinguish "loaded but idle" from
108
- "generating"
109
- - Unconditional cancellation on app backgrounding
110
- - 5-second delayed force-unload after backgrounding
111
- - Platform-specific memory monitoring (UIKit on iOS, DispatchSource on macOS)
117
+ - Count active generations so "loaded but idle" is distinguishable from
118
+ "working".
119
+ - When the app goes to the background, cancel generation every time, without
120
+ exceptions.
121
+ - After a short grace period in the background (five seconds works well),
122
+ unload the model.
123
+ - Memory warnings arrive differently per platform: through UIKit notifications
124
+ on iOS and through a `DispatchSource` memory-pressure source on macOS.
112
125
 
113
- ### Background Handling
126
+ ## Going to the background
114
127
 
115
128
  ```swift
116
- // iOS: Observe app lifecycle
117
- NotificationCenter.default.addObserver(
118
- forName: UIApplication.didEnterBackgroundNotification,
119
- object: nil, queue: .main
120
- ) { _ in
121
- modelManager.cancelGeneration()
122
- Task {
123
- try await Task.sleep(for: .seconds(5))
124
- modelManager.unloadModel()
129
+ import UIKit
130
+
131
+ @MainActor
132
+ func releaseModelWhenBackgrounded(_ host: LocalModelHost) async {
133
+ let grace = Duration.seconds(5)
134
+ let moves = NotificationCenter.default.notifications(
135
+ named: UIApplication.didEnterBackgroundNotification)
136
+ for await _ in moves {
137
+ host.cancelGeneration()
138
+ try? await Task.sleep(for: grace)
139
+ host.unload()
125
140
  }
126
141
  }
127
142
  ```
128
143
 
129
144
  ## llama.cpp
130
145
 
131
- C/C++ LLM inference engine. Best cross-platform support. Uses GGUF model format.
132
-
133
- ### Swift Integration (swift-llama-cpp)
146
+ llama.cpp is a C and C++ inference engine with the widest platform support. It
147
+ loads GGUF files. From Swift, the `swift-llama-cpp` package wraps it:
134
148
 
135
149
  ```swift
150
+ import Foundation
136
151
  import SwiftLlamaCpp
137
152
 
138
- let service = LlamaService(
139
- modelUrl: modelURL,
140
- config: .init(
141
- batchSize: 256,
142
- maxTokenCount: 4096,
143
- useGPU: true
144
- )
153
+ let engine = LlamaService(
154
+ modelUrl: ggufURL,
155
+ config: .init(batchSize: 512, maxTokenCount: 2048, useGPU: true)
145
156
  )
146
-
147
- let messages = [
148
- LlamaChatMessage(role: .system, content: "You are helpful."),
149
- LlamaChatMessage(role: .user, content: "Hello")
157
+ let conversation = [
158
+ LlamaChatMessage(role: .system, content: "Answer as a hiking guide."),
159
+ LlamaChatMessage(role: .user, content: "What should a day pack contain?")
150
160
  ]
151
-
152
- let stream = try await service.streamCompletion(
153
- of: messages,
161
+ for try await token in try await engine.streamCompletion(
162
+ of: conversation,
154
163
  samplingConfig: .init(temperature: 0.8)
155
- )
156
- for try await token in stream {
157
- print(token, terminator: "")
164
+ ) {
165
+ reply += token
158
166
  }
159
167
  ```
160
168
 
161
- ### GGUF Quantization Levels
169
+ ## GGUF quant types
162
170
 
163
- | Level | Quality | Size | Use Case |
171
+ | Type | Pick it when | Output quality | File size |
164
172
  |---|---|---|---|
165
- | Q2_K | Lowest | Smallest | Extreme memory constraints |
166
- | Q4_K_M | Good | Balanced | Mobile devices (recommended) |
167
- | Q5_K_M | Higher | Larger | When quality matters more |
168
- | Q8_0 | Near-original | Largest | Desktop with ample RAM |
173
+ | Q2_K | memory is extremely tight | lowest | smallest |
174
+ | Q4_K_M | shipping on phones; the usual default | good | balanced |
175
+ | Q5_K_M | a bit more quality is worth the space | higher | larger |
176
+ | Q8_0 | desktops with plenty of RAM | close to the original | largest |
169
177
 
170
- ### llama.cpp vs MLX Swift
178
+ ## llama.cpp or MLX Swift
171
179
 
172
- | Aspect | llama.cpp | MLX Swift |
180
+ | Question | MLX Swift | llama.cpp |
173
181
  |---|---|---|
174
- | Model format | GGUF | Hugging Face / MLX format |
175
- | Platform support | Cross-platform | Apple only |
176
- | Throughput (Apple Silicon) | Good | Best |
177
- | Model ecosystem | Broadest | mlx-community models |
178
- | Maturity | Very mature | Evolving |
179
- | Memory efficiency | Excellent | Good |
182
+ | Where does it run? | Apple platforms only | iOS, Android, desktop, servers |
183
+ | Weights it loads | MLX / Hugging Face format | GGUF files |
184
+ | Speed on Apple Silicon | the fastest | good |
185
+ | How efficient with memory? | good | excellent |
186
+ | How settled is it? | still changing quickly | long established |
187
+ | Where do models come from? | the `mlx-community` organisation | the widest range of sources |
180
188
 
181
- ## Multi-Backend Architecture
189
+ ## Routing across backends
182
190
 
183
- When an app needs multiple AI backends:
191
+ Order of preference:
184
192
 
185
- ### Fallback Chain Pattern
193
+ 1. Foundation Models, integrated with the system.
194
+ 2. MLX Swift, for throughput on Apple Silicon.
195
+ 3. llama.cpp, for compatibility.
196
+ 4. Nothing available: throw `AIError.noBackendAvailable`.
186
197
 
187
198
  ```swift
188
- func respond(to prompt: String) async throws -> String {
189
- // Try Foundation Models first when available (system-integrated backend)
190
- if SystemLanguageModel.default.isAvailable {
191
- return try await foundationModelsRespond(prompt)
199
+ enum AIError: Error { case noBackendAvailable }
200
+
201
+ actor ModelRouter {
202
+ enum Backend: Sendable { case foundationModels, mlx, llamaCpp }
203
+
204
+ private(set) var activeBackend: Backend?
205
+
206
+ func resolve() async throws -> Backend {
207
+ if let activeBackend { return activeBackend }
208
+ let choice: Backend
209
+ if SystemLanguageModel.default.isAvailable {
210
+ choice = .foundationModels
211
+ } else if await MLXSupport.canLoad(for: DeviceTier.current) {
212
+ choice = .mlx
213
+ } else if LlamaSupport.hasBundledModel {
214
+ choice = .llamaCpp
215
+ } else {
216
+ throw AIError.noBackendAvailable
217
+ }
218
+ activeBackend = choice
219
+ return choice
192
220
  }
193
-
194
- // Fall back to MLX Swift (best throughput)
195
- if canLoadMLXModel() {
196
- return try await mlxRespond(prompt)
197
- }
198
-
199
- // Fall back to llama.cpp (broadest compatibility)
200
- if llamaModelAvailable() {
201
- return try await llamaRespond(prompt)
202
- }
203
-
204
- throw AIError.noBackendAvailable
205
221
  }
206
222
  ```
207
223
 
208
- ### Architecture Guidelines
209
-
210
- 1. Create a router that checks Foundation Models availability first
211
- 2. Fall back to MLX or llama.cpp when Foundation Models is unavailable
212
- 3. Define model tiers based on device capabilities
213
- 4. Serialize all model access through a coordinator actor to prevent contention
214
- 5. Ensure tool systems work across backends (schema translation may be needed)
215
-
216
- ### Coordinator Actor
217
-
218
- ```swift
219
- actor ModelCoordinator {
220
- private var activeBackend: Backend?
221
-
222
- func withExclusiveAccess<T>(
223
- _ work: () async throws -> T
224
- ) async rethrows -> T {
225
- try await work()
226
- }
227
-
228
- enum Backend {
229
- case foundationModels
230
- case mlx
231
- case llamaCpp
232
- }
233
- }
234
- ```
235
-
236
- ## Built-in Apple Frameworks
237
-
238
- Before reaching for custom models, consider built-in frameworks:
239
-
240
- ### Natural Language Framework
224
+ Guidelines:
241
225
 
242
- No model downloads required:
226
+ - Ask the system model first; only when it is missing try MLX, then llama.cpp.
227
+ - Define model tiers per device class so each device gets a model it can hold.
228
+ - Serialise every model call through one coordinator actor (see SKILL.md for a
229
+ gate that actually queues requests).
230
+ - Tools may need translating: a Foundation Models `Tool` schema is not the
231
+ format an open model expects, so map tool definitions per backend.
243
232
 
244
- - `NLLanguageRecognizer` -- Language detection
245
- - `NLTokenizer` -- Word, sentence, paragraph tokenization
246
- - `NLTagger` -- Parts of speech, named entity recognition, sentiment
247
- - `NLEmbedding` -- Word and sentence vectors, similarity search
233
+ ## Built-in frameworks first
248
234
 
249
- ### Vision Framework
235
+ Before shipping a custom model, check whether the system already does the job.
250
236
 
251
- Built-in computer vision (legacy `VN*` API; for iOS 18+ prefer modern Swift equivalents like `RecognizeTextRequest`):
237
+ Natural Language, with nothing to download:
252
238
 
253
- - `VNRecognizeTextRequest` -- OCR
254
- - `VNClassifyImageRequest` -- Image classification
255
- - `VNDetectFaceRectanglesRequest` -- Face detection
256
- - `VNDetectHumanBodyPoseRequest` -- Body pose estimation
239
+ - Which language is this? `NLLanguageRecognizer`.
240
+ - Where are the word, sentence or paragraph boundaries? `NLTokenizer`.
241
+ - Tagging for sentiment, named entities or parts of speech: `NLTagger`.
242
+ - Vectors for words and sentences, and how close two are: `NLEmbedding`.
257
243
 
258
- ### Create ML
244
+ Vision (legacy `VN` names shown; from iOS 18 prefer the Swift request types
245
+ such as `RecognizeTextRequest`):
259
246
 
260
- Training custom classifiers directly on device or Mac:
247
+ - Reading text: `VNRecognizeTextRequest`.
248
+ - Labelling a whole image: `VNClassifyImageRequest`.
249
+ - Finding faces: `VNDetectFaceRectanglesRequest`.
250
+ - Human body pose: `VNDetectHumanBodyPoseRequest`.
261
251
 
262
- - Image classification
263
- - Text classification
264
- - Tabular data models
265
- - Sound classification
252
+ Create ML trains image, text, tabular and sound classifiers on a Mac or on
253
+ device.
266
254
 
267
- ## Performance Best Practices
255
+ ## Performance habits
268
256
 
269
- 1. Run outside debugger for accurate benchmarks (Xcode: Cmd-Opt-R, uncheck
270
- "Debug Executable")
271
- 2. Use `session.prewarm()` for Foundation Models before user interaction
272
- 3. Batch Vision framework requests in a single `perform()` call
273
- 4. Use `.fast` recognition level for real-time camera processing
274
- 5. Neural Engine (Core ML) is most energy-efficient for compatible operations
275
- 6. For MLX Swift, monitor token generation speed and adjust model size if
276
- below acceptable thresholds
257
+ - Send several Vision requests in one `perform()` call.
258
+ - Use the `.fast` recognition level for live camera text.
259
+ - Core ML on the Neural Engine is the most energy-efficient option for the ops
260
+ it supports.
261
+ - With MLX, track tokens per second; if it falls below what the feature needs,
262
+ move to a smaller model.
277
263
 
278
- ## Review Checklist
264
+ ## Checklist
279
265
 
280
- - [ ] Model size appropriate for target device RAM
281
- - [ ] Memory pressure monitoring implemented
282
- - [ ] Models unloaded on app backgrounding
283
- - [ ] MLX cache limits set appropriately
284
- - [ ] Pre-flight memory check before loading large models
285
- - [ ] Fallback strategy when model unavailable
286
- - [ ] All model access serialized through coordinator
287
- - [ ] Quantization level appropriate for quality/size tradeoff
288
- - [ ] Energy efficiency considered (Neural Engine vs GPU)
289
- - [ ] Physical device testing (not simulator) for Metal-dependent code
266
+ - [ ] The model fits the device's RAM.
267
+ - [ ] Memory pressure is monitored.
268
+ - [ ] Models unload when the app goes to the background.
269
+ - [ ] MLX cache limit is set.
270
+ - [ ] A memory check runs before loading a large model.
271
+ - [ ] There is a fallback when no model is available.
272
+ - [ ] All model access goes through one coordinator.
273
+ - [ ] The quantization level matches the quality and size trade-off.
274
+ - [ ] Energy use was considered (Neural Engine versus GPU).
275
+ - [ ] Metal inference was tested on physical devices.