@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,184 +1,165 @@
1
- # Plugins, Run Scripts, and Integrations
1
+ # Plugins, Run Scripts and Other Integrations
2
2
 
3
- Setup instructions for each SwiftLint integration method: build tool plugin, command plugin, Xcode run scripts, CI, and secondary integrations.
3
+ Back to [SKILL.md](../SKILL.md).
4
4
 
5
- ## Contents
5
+ ## Build tool plugin (first choice)
6
6
 
7
- - [Build Tool Plugin (Recommended)](#build-tool-plugin-recommended)
8
- - [Command Plugin](#command-plugin)
9
- - [Xcode Run Script Build Phase](#xcode-run-script-build-phase)
10
- - [CI Recipes](#ci-recipes)
11
- - [Working With Multiple Swift Versions](#working-with-multiple-swift-versions)
12
- - [VS Code](#vs-code)
13
- - [Fastlane](#fastlane)
14
- - [Docker](#docker)
15
- - [Pre-commit Hook](#pre-commit-hook)
7
+ `SwiftLintBuildToolPlugin` comes from the `SimplyDanny/SwiftLintPlugins`
8
+ package. Homebrew and `PATH` tweaks are unnecessary.
16
9
 
17
- ---
10
+ ### SwiftPM
18
11
 
19
- ## Build Tool Plugin (Recommended)
20
-
21
- The `SwiftLintBuildToolPlugin` from [SimplyDanny/SwiftLintPlugins](https://github.com/SimplyDanny/SwiftLintPlugins) runs SwiftLint as part of the build. No Homebrew or PATH setup needed.
12
+ ```swift
13
+ // swift-tools-version: 5.9
14
+ import PackageDescription
22
15
 
23
- ### SwiftPM setup
16
+ let lint: Target.PluginUsage = .plugin(name: "SwiftLintBuildToolPlugin", package: "SwiftLintPlugins")
24
17
 
25
- ```swift
26
- // Package.swift
27
18
  let package = Package(
28
- name: "MyApp",
19
+ name: "Orchard",
29
20
  dependencies: [
30
- .package(url: "https://github.com/SimplyDanny/SwiftLintPlugins", from: "<reviewed-version>")
21
+ // pin an exact, reviewed release
22
+ .package(url: "https://github.com/SimplyDanny/SwiftLintPlugins", exact: "<reviewed-version>")
31
23
  ],
32
24
  targets: [
33
- .target(
34
- name: "MyApp",
35
- plugins: [.plugin(name: "SwiftLintBuildToolPlugin", package: "SwiftLintPlugins")]
36
- ),
37
- .testTarget(
38
- name: "MyAppTests",
39
- dependencies: ["MyApp"],
40
- plugins: [.plugin(name: "SwiftLintBuildToolPlugin", package: "SwiftLintPlugins")]
41
- )
25
+ .target(name: "Orchard", plugins: [lint]),
26
+ .testTarget(name: "OrchardTests", dependencies: ["Orchard"], plugins: [lint])
42
27
  ]
43
28
  )
44
29
  ```
45
30
 
46
- ### Xcode project setup (no Package.swift)
31
+ ### Xcode project without `Package.swift`
47
32
 
48
- 1. **File > Add Package Dependencies** → add `https://github.com/SimplyDanny/SwiftLintPlugins`
49
- 2. For each target you want to lint, go to **Build Phases** and add `SwiftLintBuildToolPlugin` under **Run Build Tool Plug-ins**
50
- 3. When prompted, trust the plugin
33
+ 1. Choose Add Package Dependencies from the File menu and paste the
34
+ SwiftLintPlugins URL.
35
+ 2. For every target to lint: Build Phases > Run Build Tool Plug-ins, add
36
+ `SwiftLintBuildToolPlugin`.
37
+ 3. Trust the plugin when Xcode asks.
51
38
 
52
- ### Plugin trust
39
+ ### Headless CI with `xcodebuild`
53
40
 
54
- On first build, Xcode shows a trust dialog. Select **Trust & Enable All** for the SwiftLintPlugins package. In CI with `xcodebuild`, pass:
41
+ The trust prompt cannot be answered on a build agent, so skip validation:
55
42
 
56
- ```sh
57
- xcodebuild -skipPackagePluginValidation -skipMacroValidation ...
43
+ ```bash
44
+ xcodebuild -scheme Orchard -skipPackagePluginValidation -skipMacroValidation build
58
45
  ```
59
46
 
60
- ### Limitations
47
+ ### What the plugin cannot do
61
48
 
62
- - The build tool plugin cannot run `--fix` (it has read-only access to sources).
63
- - It cannot pass `--baseline` or other CLI flags - build tool plugins do not accept arguments. Use config keys like `baseline:` / `write_baseline:` where available, or switch to the command plugin / direct CLI for advanced flag-based workflows.
64
- - It runs on every build, which is desirable for local development but may slow clean builds in large projects.
49
+ - No `--fix`: build tool plugins get read-only access to sources.
50
+ - No command-line flags at all, `--baseline` included. Use the `baseline:` and
51
+ `write_baseline:` config keys, or move to the command plugin or the CLI.
52
+ - Because it fires with each build, clean builds of big projects get
53
+ noticeably slower.
65
54
 
66
- ## Command Plugin
55
+ ## Command plugin
67
56
 
68
- The command plugin provides broad SwiftPM-based CLI access to SwiftLint, including `--fix`, `--baseline`, and `analyze` workflows that the build tool plugin cannot handle directly:
57
+ Same `SwiftLintPlugins` dependency, but invoked on demand through SwiftPM with
58
+ read-write access to sources. Anything after `--` goes straight to the CLI, so
59
+ `--fix`, `--baseline` and `analyze` all work.
69
60
 
70
- ```sh
71
- swift package plugin swiftlint
72
- swift package plugin swiftlint --fix
73
- swift package plugin swiftlint -- --strict --baseline .swiftlint.baseline
61
+ ```bash
62
+ swift package plugin swiftlint --fix # rewrite correctable violations
63
+ swift package plugin swiftlint # plain lint
64
+ swift package plugin swiftlint -- --baseline .swiftlint.baseline --strict # CLI flags after --
74
65
  swift package plugin swiftlint -- analyze --compile-commands .build/debug.yaml
75
66
  ```
76
67
 
77
- The command plugin requires the same `SwiftLintPlugins` dependency. It has read-write access to sources (for `--fix`) and accepts all CLI flags after `--`.
78
-
79
- ## Xcode Run Script Build Phase
80
-
81
- Use a run script when the build tool plugin is impractical for your project shape or when you need CLI features the build tool plugin cannot provide (for example `--fix` locally or `--baseline`). Xcode projects can still use the build tool plugin via Xcode Package Dependency even without a local `Package.swift`.
68
+ ## Run script build phase
82
69
 
83
- ### Basic run script
84
-
85
- 1. Select the target → **Build Phases** → **+** → **New Run Script Phase**
86
- 2. Move the phase **after Compile Sources** - SwiftLint is designed to analyze valid, compilable source code; linting before compilation leads to confusing results
87
- 3. Add the script:
88
-
89
- ```sh
90
- if command -v swiftlint >/dev/null 2>&1; then
91
- swiftlint
92
- else
93
- echo "warning: SwiftLint not installed. Install with: brew install swiftlint"
94
- fi
95
- ```
70
+ Reach for this when the plugin does not fit or you want CLI-only behaviour in
71
+ Xcode, such as a local `--fix` or `--baseline`. Note that a plain Xcode project
72
+ can still use the plugin through a package dependency, no `Package.swift`
73
+ needed.
96
74
 
97
- On Apple Silicon with Homebrew, `swiftlint` is often installed at `/opt/homebrew/bin/swiftlint`. If the run script cannot find it, either export that path in the build phase or create a symlink into `/usr/local/bin`:
75
+ Create it from the target's Build Phases tab (the + button, then New Run
76
+ Script Phase) and move it so it sits below Compile Sources. SwiftLint assumes code that compiles; linting
77
+ earlier produces confusing results.
98
78
 
99
- ```sh
100
- if [[ "$(uname -m)" == arm64 ]]; then
101
- export PATH="/opt/homebrew/bin:$PATH"
79
+ ```bash
80
+ if [ "$(uname -m)" = "arm64" ]; then
81
+ PATH="/opt/homebrew/bin:${PATH}"; export PATH
102
82
  fi
103
83
 
104
- if command -v swiftlint >/dev/null 2>&1; then
105
- swiftlint
106
- else
107
- echo "warning: SwiftLint not installed. Install with: brew install swiftlint"
108
- fi
84
+ command -v swiftlint > /dev/null || {
85
+ echo "warning: SwiftLint missing. Install it with: brew install swiftlint"
86
+ exit 0
87
+ }
88
+ swiftlint
109
89
  ```
110
90
 
111
- ### Run script with script input files (Xcode 15+)
91
+ - Homebrew on Apple silicon installs to `/opt/homebrew/bin/swiftlint`, which is
92
+ not on Xcode's default `PATH`. Export it as above, or symlink the binary into
93
+ `/usr/local/bin`.
94
+ - User script sandboxing (`ENABLE_USER_SCRIPT_SANDBOXING`) is on by default in
95
+ projects created with Xcode 15 or later. When the build log shows a
96
+ `deny(1) file-read-data` sandbox error naming swiftlint, set
97
+ `ENABLE_USER_SCRIPT_SANDBOXING = NO` on that target.
112
98
 
113
- Xcode 15 sandboxes run scripts by default. If SwiftLint fails with `Sandbox: swiftlint ... deny(1) file-read-data`, set `ENABLE_USER_SCRIPT_SANDBOXING = NO` for the target. Input files and input file lists are a separate optimization for limiting which files are linted.
99
+ ### Limiting the files a run script lints
114
100
 
115
- 1. Set `ENABLE_USER_SCRIPT_SANDBOXING = NO` for the target if the script cannot read source files under Xcode 15+
116
- 2. Under the run script phase, check **Based on dependency analysis**
117
- 3. Add either explicit **Input Files** or readable `.xcfilelist` paths under **Input File Lists**
118
- 4. Use `--use-script-input-file-lists` when Xcode is providing `.xcfilelist` paths:
101
+ Input files are an optional speed-up on top of the basic script:
119
102
 
120
- ```sh
121
- if command -v swiftlint >/dev/null 2>&1; then
122
- swiftlint --use-script-input-file-lists
123
- fi
124
- ```
103
+ 1. Turn sandboxing off if the script needs it.
104
+ 2. Tick "Based on dependency analysis".
105
+ 3. List sources under Input Files, or point Input File Lists at `.xcfilelist`
106
+ files.
125
107
 
126
- This requires Xcode to populate `SCRIPT_INPUT_FILE_LIST_COUNT` and `SCRIPT_INPUT_FILE_LIST_n` with readable `.xcfilelist` paths. Use `--use-script-input-files` only when Xcode is populating `SCRIPT_INPUT_FILE_COUNT` and `SCRIPT_INPUT_FILE_n` directly via **Input Files** rather than **Input File Lists**.
108
+ Then tell SwiftLint where to read them from:
127
109
 
128
- Alternatively, to lint the full target without file lists:
110
+ - `--use-script-input-file-lists` reads `SCRIPT_INPUT_FILE_LIST_COUNT` and
111
+ `SCRIPT_INPUT_FILE_LIST_0`, `_1`, and so on; each points at a readable
112
+ `.xcfilelist`.
113
+ - `--use-script-input-files` reads `SCRIPT_INPUT_FILE_COUNT` and
114
+ `SCRIPT_INPUT_FILE_0`, `_1`, and so on, taken from Input Files directly.
129
115
 
130
- ```sh
131
- if command -v swiftlint >/dev/null 2>&1; then
132
- swiftlint lint --config "${SRCROOT}/.swiftlint.yml"
133
- fi
134
- ```
116
+ To lint the whole target every time instead:
135
117
 
136
- And uncheck **Based on dependency analysis** if you want it to run every build.
118
+ ```bash
119
+ swiftlint lint --config "${SRCROOT}/.swiftlint.yml"
120
+ ```
137
121
 
138
- ### CocoaPods run script
122
+ and untick "Based on dependency analysis" so the phase is never skipped.
139
123
 
140
- ```sh
141
- "${PODS_ROOT}/SwiftLint/swiftlint"
142
- ```
124
+ With CocoaPods the binary path is `"${PODS_ROOT}/SwiftLint/swiftlint"`.
143
125
 
144
- ## CI Recipes
126
+ ## Recipes for CI services
145
127
 
146
- ### GitHub Actions
128
+ ### GitHub Actions: inline annotations
147
129
 
148
130
  ```yaml
149
- name: SwiftLint
131
+ name: lint
150
132
  on:
151
133
  pull_request:
152
134
  paths: ['**/*.swift']
153
-
154
135
  jobs:
155
- lint:
136
+ swiftlint:
156
137
  runs-on: macos-latest
138
+ timeout-minutes: 15
157
139
  steps:
158
140
  - uses: actions/checkout@v4
159
- - name: Install SwiftLint
160
- run: brew install swiftlint
161
- - name: Lint
162
- run: swiftlint --strict --reporter github-actions-logging
141
+ - run: brew install swiftlint
142
+ - run: swiftlint lint --reporter github-actions-logging --strict
163
143
  ```
164
144
 
165
- For SARIF upload to GitHub code scanning:
145
+ ### GitHub Actions: code scanning
166
146
 
167
147
  ```yaml
168
- - name: Lint (SARIF)
169
- run: swiftlint --strict --reporter sarif > swiftlint.sarif
148
+ - name: Lint
149
+ run: swiftlint lint --reporter sarif --strict > lint.sarif
170
150
  continue-on-error: true
171
- - name: Upload SARIF
172
- uses: github/codeql-action/upload-sarif@v3
151
+ - uses: github/codeql-action/upload-sarif@v3
152
+ if: always()
173
153
  with:
174
- sarif_file: swiftlint.sarif
154
+ sarif_file: lint.sarif
175
155
  ```
176
156
 
177
- ### GitHub Actions with baseline
157
+ `continue-on-error` lets the upload step run even when lint fails.
158
+
159
+ ### GitHub Actions: during baseline adoption
178
160
 
179
161
  ```yaml
180
- - name: Lint (baseline)
181
- run: swiftlint --strict --baseline .swiftlint.baseline --reporter github-actions-logging
162
+ - run: swiftlint lint --reporter github-actions-logging --baseline .swiftlint.baseline --strict
182
163
  ```
183
164
 
184
165
  ### GitLab CI
@@ -186,122 +167,121 @@ For SARIF upload to GitHub code scanning:
186
167
  ```yaml
187
168
  swiftlint:
188
169
  image: ghcr.io/realm/swiftlint:latest
170
+ stage: test
189
171
  script:
190
- - swiftlint --strict --reporter codeclimate > swiftlint.json
172
+ - swiftlint lint --reporter codeclimate --strict > code-quality.json
191
173
  artifacts:
192
174
  reports:
193
- codequality: swiftlint.json
175
+ codequality: code-quality.json
194
176
  ```
195
177
 
196
- If you want GitLab JUnit-style output instead, use `--reporter gitlab` and publish the result as a JUnit artifact rather than `codequality`.
178
+ GitLab can also show results as test failures: switch to `--reporter gitlab`,
179
+ which writes JUnit XML, and attach that file as a `junit` report.
197
180
 
198
- ### Bitrise / other CI
181
+ ### Bitrise and other hosted runners
199
182
 
200
- ```sh
183
+ ```bash
201
184
  brew install swiftlint
202
185
  swiftlint --strict
203
186
  ```
204
187
 
205
- ### Reporter summary
188
+ ## Reporters at a glance
206
189
 
207
- | Reporter | Format | Best for |
208
- | -------- | ------ | -------- |
209
- | `xcode` | Xcode-compatible text | Local builds, Xcode run scripts |
210
- | `github-actions-logging` | GitHub Actions annotations | PR inline comments |
211
- | `sarif` | SARIF JSON | GitHub code scanning |
212
- | `json` | JSON array | Custom tooling, dashboards |
190
+ | Reporter | Output | Typical consumer |
191
+ |---|---|---|
192
+ | `xcode` | Xcode-style diagnostics | local runs, run scripts |
193
+ | `emoji` | decorated text | fun in a terminal |
194
+ | `github-actions-logging` | workflow commands | inline PR annotations |
195
+ | `csv` | comma-separated rows | spreadsheets |
196
+ | `sarif` | SARIF | code scanning |
213
197
  | `checkstyle` | XML | Jenkins, SonarQube |
214
- | `csv` | CSV | Spreadsheet analysis |
215
- | `emoji` | Text with emoji | Fun terminal output |
198
+ | `json` | JSON array | scripts, dashboards |
216
199
 
217
- ## Working With Multiple Swift Versions
200
+ ## Swift toolchain compatibility
218
201
 
219
- SwiftLint is predominantly SwiftSyntax-based, but some rules still rely on SourceKit/Clang for additional analysis. It must remain compatible with the Swift toolchain used to compile your project.
202
+ SwiftLint parses mostly through SwiftSyntax, yet a few rules still go through
203
+ SourceKit and Clang, so the linter has to agree with the toolchain that
204
+ compiles the code. Rule of thumb: lint with the same toolchain you build with.
220
205
 
221
- **Key rules:**
206
+ On macOS SwiftLint looks for a toolchain in this order:
222
207
 
223
- 1. Run SwiftLint with the same Swift toolchain used to build your project.
224
- 2. On macOS, SwiftLint resolves the toolchain in this order: `XCODE_DEFAULT_TOOLCHAIN_OVERRIDE`, `TOOLCHAIN_DIR` or `TOOLCHAINS`, `xcrun -find swift`, `/Applications/Xcode.app/...`, `/Applications/Xcode-beta.app/...`, `~/Applications/Xcode.app/...`, `~/Applications/Xcode-beta.app/...`.
225
- 3. In CI with multiple Xcode versions, set `DEVELOPER_DIR` before running SwiftLint:
208
+ 1. `XCODE_DEFAULT_TOOLCHAIN_OVERRIDE`
209
+ 2. `TOOLCHAIN_DIR` or `TOOLCHAINS`
210
+ 3. `xcrun -find swift`
211
+ 4. `/Applications/Xcode.app/...`
212
+ 5. `/Applications/Xcode-beta.app/...`
213
+ 6. `~/Applications/Xcode.app/...`
214
+ 7. `~/Applications/Xcode-beta.app/...`
226
215
 
227
- ```sh
228
- export DEVELOPER_DIR=/Applications/Xcode_16.app/Contents/Developer
229
- swiftlint
230
- ```
231
-
232
- 1. The build tool plugin automatically uses the correct toolchain because it runs within the build system.
233
- 2. Homebrew-installed SwiftLint may lag behind the latest Swift release. If you see parsing errors after updating Xcode, check for a SwiftLint update.
234
- 3. `sourcekitd.framework` is expected in the selected toolchain's `usr/lib/` directory. Toolchain mismatches typically show up as parsing or SourceKit failures.
216
+ - CI machines with several Xcodes installed: export `DEVELOPER_DIR` first, for
217
+ example `DEVELOPER_DIR=/Applications/Xcode_16.4.app/Contents/Developer`.
218
+ - The build tool plugin lives inside the build system and picks the right
219
+ toolchain by itself.
220
+ - The Homebrew formula can trail a new Swift release. Parse errors right after
221
+ an Xcode upgrade usually mean SwiftLint needs updating.
222
+ - The selected toolchain must contain `usr/lib/sourcekitd.framework`. A
223
+ mismatch shows up as parse failures or SourceKit errors.
235
224
 
236
225
  ## VS Code
237
226
 
238
- The [SwiftLint VS Code extension](https://marketplace.visualstudio.com/items?itemName=vknabel.vscode-swiftlint) runs SwiftLint on save.
227
+ The `vknabel.vscode-swiftlint` extension lints when you save:
239
228
 
240
229
  ```json
241
- // .vscode/settings.json
242
230
  {
243
- "swiftlint.enable": true,
244
- "swiftlint.path": "/opt/homebrew/bin/swiftlint",
245
- "swiftlint.autoLintWorkspace": false
231
+ "swiftlint.autoLintWorkspace": false,
232
+ "swiftlint.enable": true,
233
+ "swiftlint.path": "/opt/homebrew/bin/swiftlint"
246
234
  }
247
235
  ```
248
236
 
249
237
  ## Fastlane
250
238
 
251
239
  ```ruby
252
- # Fastfile
253
240
  lane :lint do
254
241
  swiftlint(
255
- mode: :lint,
256
- config_file: ".swiftlint.yml",
242
+ raise_if_swiftlint_error: true,
257
243
  strict: true,
258
- raise_if_swiftlint_error: true
244
+ config_file: ".swiftlint.yml",
245
+ mode: :lint
259
246
  )
260
247
  end
261
248
  ```
262
249
 
263
250
  ## Docker
264
251
 
265
- The official SwiftLint Docker image is useful for Linux CI:
252
+ The official image suits Linux CI:
266
253
 
267
- ```sh
268
- docker run --rm -v "$(pwd):/work" -w /work ghcr.io/realm/swiftlint:<reviewed-version> --strict
254
+ ```bash
255
+ docker run --rm -v "$PWD:/src" -w /src ghcr.io/realm/swiftlint:<pinned-version> --strict
269
256
  ```
270
257
 
271
- ## Pre-commit Hook
258
+ ## Pre-commit
272
259
 
273
- ### Using the pre-commit framework
260
+ ### With the pre-commit framework
274
261
 
275
262
  ```yaml
276
- # .pre-commit-config.yaml
277
263
  repos:
278
264
  - repo: https://github.com/realm/SwiftLint
279
- rev: <reviewed-version>
265
+ rev: <pinned-version>
280
266
  hooks:
281
267
  - id: swiftlint
268
+ name: SwiftLint (fix, then check)
269
+ entry: swiftlint --fix --strict
282
270
  ```
283
271
 
284
- To apply fixes and fail on warnings/errors from the hook, use an `entry` override:
272
+ The `entry` override applies automatic fixes and still fails the commit on any
273
+ remaining warning or error.
285
274
 
286
- ```yaml
287
- # .pre-commit-config.yaml
288
- repos:
289
- - repo: https://github.com/realm/SwiftLint
290
- rev: <reviewed-version>
291
- hooks:
292
- - id: swiftlint
293
- entry: swiftlint --fix --strict
294
- ```
275
+ ### Plain git hook
295
276
 
296
- ### Manual git hook
277
+ `.git/hooks/pre-commit`:
297
278
 
298
- ```sh
299
- #!/bin/sh
300
- # .git/hooks/pre-commit
301
- if command -v swiftlint >/dev/null 2>&1; then
302
- git diff --cached --name-only --diff-filter=d -- '*.swift' | \
303
- xargs -I{} swiftlint lint --path "{}" --strict --quiet
304
- fi
279
+ ```bash
280
+ #!/bin/bash
281
+ git diff --cached --diff-filter=d --name-only -- '*.swift' \
282
+ | xargs -I{} swiftlint lint --strict --quiet "{}"
305
283
  ```
306
284
 
307
- Make it executable: `chmod +x .git/hooks/pre-commit`
285
+ Git ignores the hook until it has the execute bit, so run `chmod +x` on it. Older SwiftLint
286
+ releases took the file through `--path "{}"`; current releases take paths as
287
+ plain arguments.