@mmerterden/multi-agent-pipeline 20.7.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.
- package/CHANGELOG.md +9 -0
- package/LICENSE +0 -10
- package/docs/facts.json +1 -1
- package/manifest.json +266 -267
- package/package.json +2 -2
- package/pipeline/scripts/_notices.mjs +1 -1
- package/pipeline/skills/.skill-manifest.json +68 -68
- package/pipeline/skills/shared/README.md +70 -70
- package/pipeline/skills/shared/external/alarmkit/SKILL.md +373 -381
- package/pipeline/skills/shared/external/alarmkit/evals/evals.json +23 -18
- package/pipeline/skills/shared/external/alarmkit/references/alarmkit-patterns.md +328 -378
- package/pipeline/skills/shared/external/app-clips/SKILL.md +260 -160
- package/pipeline/skills/shared/external/app-clips/evals/evals.json +27 -27
- package/pipeline/skills/shared/external/app-clips/references/data-handoff-notifications-location.md +150 -83
- package/pipeline/skills/shared/external/app-clips/references/routing-and-experiences.md +135 -83
- package/pipeline/skills/shared/external/app-clips/references/size-capabilities-and-promotion.md +143 -85
- package/pipeline/skills/shared/external/app-intents/SKILL.md +302 -304
- package/pipeline/skills/shared/external/app-intents/evals/evals.json +21 -21
- package/pipeline/skills/shared/external/app-intents/references/appintents-advanced.md +594 -894
- package/pipeline/skills/shared/external/app-store-optimization/SKILL.md +339 -277
- package/pipeline/skills/shared/external/app-store-optimization/evals/evals.json +27 -23
- package/pipeline/skills/shared/external/app-store-optimization/references/keyword-research-methodology.md +105 -122
- package/pipeline/skills/shared/external/app-store-optimization/references/product-page-variants.md +143 -166
- package/pipeline/skills/shared/external/app-store-review/SKILL.md +307 -326
- package/pipeline/skills/shared/external/app-store-review/evals/evals.json +21 -21
- package/pipeline/skills/shared/external/app-store-review/references/privacy-manifest.md +105 -67
- package/pipeline/skills/shared/external/app-store-review/references/review-checklists.md +114 -101
- package/pipeline/skills/shared/external/apple-on-device-ai/SKILL.md +333 -360
- package/pipeline/skills/shared/external/apple-on-device-ai/evals/evals.json +24 -27
- package/pipeline/skills/shared/external/apple-on-device-ai/references/coreml-conversion.md +215 -322
- package/pipeline/skills/shared/external/apple-on-device-ai/references/coreml-optimization.md +161 -256
- package/pipeline/skills/shared/external/apple-on-device-ai/references/foundation-models.md +277 -387
- package/pipeline/skills/shared/external/apple-on-device-ai/references/mlx-swift.md +196 -210
- package/pipeline/skills/shared/external/authentication/SKILL.md +265 -381
- package/pipeline/skills/shared/external/authentication/evals/evals.json +25 -25
- package/pipeline/skills/shared/external/authentication/references/keychain-biometric.md +133 -178
- package/pipeline/skills/shared/external/authentication/references/passkeys.md +111 -147
- package/pipeline/skills/shared/external/avkit/SKILL.md +267 -364
- package/pipeline/skills/shared/external/avkit/evals/evals.json +26 -26
- package/pipeline/skills/shared/external/avkit/references/avkit-patterns.md +375 -493
- package/pipeline/skills/shared/external/background-processing/SKILL.md +270 -382
- package/pipeline/skills/shared/external/background-processing/evals/evals.json +22 -22
- package/pipeline/skills/shared/external/background-processing/references/background-task-patterns.md +169 -317
- package/pipeline/skills/shared/external/callkit-voip/SKILL.md +290 -371
- package/pipeline/skills/shared/external/callkit-voip/evals/evals.json +24 -24
- package/pipeline/skills/shared/external/callkit-voip/references/callkit-patterns.md +175 -343
- package/pipeline/skills/shared/external/cloudkit-sync/SKILL.md +292 -381
- package/pipeline/skills/shared/external/cloudkit-sync/evals/evals.json +33 -30
- package/pipeline/skills/shared/external/cloudkit-sync/references/cloudkit-patterns.md +227 -355
- package/pipeline/skills/shared/external/contacts-framework/SKILL.md +197 -346
- package/pipeline/skills/shared/external/contacts-framework/evals/evals.json +19 -21
- package/pipeline/skills/shared/external/contacts-framework/references/contacts-patterns.md +169 -308
- package/pipeline/skills/shared/external/core-bluetooth/SKILL.md +226 -376
- package/pipeline/skills/shared/external/core-bluetooth/evals/evals.json +25 -22
- package/pipeline/skills/shared/external/core-bluetooth/references/ble-patterns.md +257 -337
- package/pipeline/skills/shared/external/core-data/SKILL.md +292 -368
- package/pipeline/skills/shared/external/core-data/evals/evals.json +30 -27
- package/pipeline/skills/shared/external/core-motion/SKILL.md +235 -324
- package/pipeline/skills/shared/external/core-motion/evals/evals.json +31 -27
- package/pipeline/skills/shared/external/core-motion/references/motion-patterns.md +210 -310
- package/pipeline/skills/shared/external/core-nfc/SKILL.md +292 -366
- package/pipeline/skills/shared/external/core-nfc/evals/evals.json +22 -24
- package/pipeline/skills/shared/external/core-nfc/references/nfc-patterns.md +233 -329
- package/pipeline/skills/shared/external/coreml/SKILL.md +323 -367
- package/pipeline/skills/shared/external/coreml/evals/evals.json +24 -21
- package/pipeline/skills/shared/external/coreml/references/coreml-swift-integration.md +562 -565
- package/pipeline/skills/shared/external/cryptokit/SKILL.md +253 -394
- package/pipeline/skills/shared/external/cryptokit/evals/evals.json +20 -18
- package/pipeline/skills/shared/external/cryptokit/references/cryptokit-patterns.md +299 -488
- package/pipeline/skills/shared/external/debugging-instruments/SKILL.md +270 -323
- package/pipeline/skills/shared/external/debugging-instruments/evals/evals.json +27 -30
- package/pipeline/skills/shared/external/debugging-instruments/references/instruments-guide.md +167 -315
- package/pipeline/skills/shared/external/debugging-instruments/references/lldb-patterns.md +140 -193
- package/pipeline/skills/shared/external/device-integrity/SKILL.md +230 -353
- package/pipeline/skills/shared/external/device-integrity/evals/evals.json +25 -21
- package/pipeline/skills/shared/external/device-integrity/references/device-integrity-patterns.md +159 -197
- package/pipeline/skills/shared/external/energykit/SKILL.md +225 -392
- package/pipeline/skills/shared/external/energykit/evals/evals.json +29 -28
- package/pipeline/skills/shared/external/energykit/references/energykit-patterns.md +174 -470
- package/pipeline/skills/shared/external/eventkit-calendar/SKILL.md +261 -383
- package/pipeline/skills/shared/external/eventkit-calendar/evals/evals.json +25 -22
- package/pipeline/skills/shared/external/eventkit-calendar/references/eventkit-patterns.md +165 -268
- package/pipeline/skills/shared/external/healthkit/SKILL.md +252 -303
- package/pipeline/skills/shared/external/healthkit/evals/evals.json +24 -23
- package/pipeline/skills/shared/external/healthkit/references/healthkit-patterns.md +369 -523
- package/pipeline/skills/shared/external/homekit-matter/SKILL.md +233 -348
- package/pipeline/skills/shared/external/homekit-matter/evals/evals.json +27 -22
- package/pipeline/skills/shared/external/homekit-matter/references/matter-commissioning.md +199 -305
- package/pipeline/skills/shared/external/ios-accessibility/SKILL.md +368 -340
- package/pipeline/skills/shared/external/ios-accessibility/evals/evals.json +28 -27
- package/pipeline/skills/shared/external/ios-accessibility/references/a11y-patterns.md +314 -260
- package/pipeline/skills/shared/external/ios-accessibility/references/media-accessibility.md +97 -67
- package/pipeline/skills/shared/external/ios-accessibility/references/nutrition-labels.md +165 -101
- package/pipeline/skills/shared/external/ios-localization/SKILL.md +258 -371
- package/pipeline/skills/shared/external/ios-localization/evals/evals.json +23 -23
- package/pipeline/skills/shared/external/ios-localization/references/formatstyle-locale.md +283 -491
- package/pipeline/skills/shared/external/ios-localization/references/string-catalogs.md +313 -440
- package/pipeline/skills/shared/external/ios-networking/SKILL.md +265 -341
- package/pipeline/skills/shared/external/ios-networking/evals/evals.json +24 -24
- package/pipeline/skills/shared/external/ios-networking/references/background-websocket.md +425 -652
- package/pipeline/skills/shared/external/ios-networking/references/file-storage-patterns.md +143 -285
- package/pipeline/skills/shared/external/ios-networking/references/lightweight-clients.md +93 -53
- package/pipeline/skills/shared/external/ios-networking/references/network-framework.md +231 -456
- package/pipeline/skills/shared/external/ios-networking/references/urlsession-patterns.md +517 -784
- package/pipeline/skills/shared/external/ios-simulator/SKILL.md +265 -393
- package/pipeline/skills/shared/external/ios-simulator/evals/evals.json +21 -21
- package/pipeline/skills/shared/external/ios-simulator/references/simctl-commands.md +177 -270
- package/pipeline/skills/shared/external/live-activities/SKILL.md +318 -360
- package/pipeline/skills/shared/external/live-activities/evals/evals.json +21 -21
- package/pipeline/skills/shared/external/live-activities/references/activitykit-patterns.md +478 -710
- package/pipeline/skills/shared/external/mapkit-location/SKILL.md +295 -267
- package/pipeline/skills/shared/external/mapkit-location/evals/evals.json +28 -24
- package/pipeline/skills/shared/external/mapkit-location/references/mapkit-corelocation-patterns.md +378 -532
- package/pipeline/skills/shared/external/mapkit-location/references/mapkit-patterns.md +397 -499
- package/pipeline/skills/shared/external/metrickit-diagnostics/SKILL.md +165 -348
- package/pipeline/skills/shared/external/metrickit-diagnostics/evals/evals.json +26 -23
- package/pipeline/skills/shared/external/metrickit-diagnostics/references/metrickit-patterns.md +123 -130
- package/pipeline/skills/shared/external/musickit-audio/SKILL.md +189 -315
- package/pipeline/skills/shared/external/musickit-audio/evals/evals.json +22 -21
- package/pipeline/skills/shared/external/musickit-audio/references/musickit-patterns.md +181 -270
- package/pipeline/skills/shared/external/natural-language/SKILL.md +188 -340
- package/pipeline/skills/shared/external/natural-language/evals/evals.json +21 -21
- package/pipeline/skills/shared/external/natural-language/references/translation-patterns.md +171 -225
- package/pipeline/skills/shared/external/passkit-wallet/SKILL.md +258 -392
- package/pipeline/skills/shared/external/passkit-wallet/evals/evals.json +30 -29
- package/pipeline/skills/shared/external/passkit-wallet/references/wallet-passes.md +164 -231
- package/pipeline/skills/shared/external/pdfkit/SKILL.md +312 -344
- package/pipeline/skills/shared/external/pdfkit/evals/evals.json +19 -19
- package/pipeline/skills/shared/external/pdfkit/references/pdfkit-patterns.md +413 -624
- package/pipeline/skills/shared/external/pencilkit-drawing/SKILL.md +242 -358
- package/pipeline/skills/shared/external/pencilkit-drawing/evals/evals.json +25 -21
- package/pipeline/skills/shared/external/pencilkit-drawing/references/pencilkit-patterns.md +161 -226
- package/pipeline/skills/shared/external/permissionkit/SKILL.md +282 -400
- package/pipeline/skills/shared/external/permissionkit/evals/evals.json +27 -30
- package/pipeline/skills/shared/external/permissionkit/references/permissionkit-patterns.md +237 -350
- package/pipeline/skills/shared/external/photos-camera-media/SKILL.md +276 -325
- package/pipeline/skills/shared/external/photos-camera-media/references/av-playback.md +299 -545
- package/pipeline/skills/shared/external/photos-camera-media/references/camera-capture.md +344 -588
- package/pipeline/skills/shared/external/photos-camera-media/references/image-loading-caching.md +316 -660
- package/pipeline/skills/shared/external/photos-camera-media/references/photokit-patterns.md +270 -416
- package/pipeline/skills/shared/external/push-notifications/SKILL.md +312 -340
- package/pipeline/skills/shared/external/push-notifications/evals/evals.json +27 -26
- package/pipeline/skills/shared/external/push-notifications/references/notification-patterns.md +328 -485
- package/pipeline/skills/shared/external/push-notifications/references/rich-notifications.md +327 -560
- package/pipeline/skills/shared/external/realitykit-ar/SKILL.md +218 -410
- package/pipeline/skills/shared/external/realitykit-ar/evals/evals.json +24 -27
- package/pipeline/skills/shared/external/realitykit-ar/references/realitykit-patterns.md +221 -348
- package/pipeline/skills/shared/external/shareplay-activities/SKILL.md +222 -393
- package/pipeline/skills/shared/external/shareplay-activities/evals/evals.json +23 -24
- package/pipeline/skills/shared/external/shareplay-activities/references/shareplay-patterns.md +280 -420
- package/pipeline/skills/shared/external/speech-recognition/SKILL.md +217 -421
- package/pipeline/skills/shared/external/speech-recognition/evals/evals.json +23 -26
- package/pipeline/skills/shared/external/speech-recognition/references/speechanalyzer-patterns.md +133 -125
- package/pipeline/skills/shared/external/storekit/SKILL.md +228 -204
- package/pipeline/skills/shared/external/storekit/evals/evals.json +27 -24
- package/pipeline/skills/shared/external/storekit/references/app-review-guidelines.md +98 -109
- package/pipeline/skills/shared/external/storekit/references/core-patterns.md +298 -242
- package/pipeline/skills/shared/external/storekit/references/storekit-advanced.md +356 -649
- package/pipeline/skills/shared/external/swift-api-design-guidelines/SKILL.md +274 -399
- package/pipeline/skills/shared/external/swift-api-design-guidelines/evals/evals.json +22 -24
- package/pipeline/skills/shared/external/swift-api-design-guidelines/references/argument-labels-and-parameters.md +107 -108
- package/pipeline/skills/shared/external/swift-api-design-guidelines/references/conventions-and-special-rules.md +93 -165
- package/pipeline/skills/shared/external/swift-api-design-guidelines/references/naming-and-clarity.md +99 -137
- package/pipeline/skills/shared/external/swift-api-design-guidelines/references/side-effects-and-mutating-pairs.md +77 -120
- package/pipeline/skills/shared/external/swift-architecture/SKILL.md +334 -350
- package/pipeline/skills/shared/external/swift-architecture/evals/evals.json +22 -22
- package/pipeline/skills/shared/external/swift-charts/SKILL.md +208 -394
- package/pipeline/skills/shared/external/swift-charts/evals/evals.json +27 -30
- package/pipeline/skills/shared/external/swift-charts/references/charts-patterns.md +351 -762
- package/pipeline/skills/shared/external/swift-codable/SKILL.md +339 -343
- package/pipeline/skills/shared/external/swift-codable/evals/evals.json +20 -20
- package/pipeline/skills/shared/external/swift-concurrency/SKILL.md +303 -351
- package/pipeline/skills/shared/external/swift-concurrency/evals/evals.json +27 -24
- package/pipeline/skills/shared/external/swift-concurrency/references/approachable-concurrency.md +65 -80
- package/pipeline/skills/shared/external/swift-concurrency/references/async-algorithms.md +48 -84
- package/pipeline/skills/shared/external/swift-concurrency/references/bridging-interop.md +134 -79
- package/pipeline/skills/shared/external/swift-concurrency/references/concurrency-patterns.md +145 -167
- package/pipeline/skills/shared/external/swift-concurrency/references/diagnostics.md +62 -50
- package/pipeline/skills/shared/external/swift-concurrency/references/swiftui-concurrency.md +92 -121
- package/pipeline/skills/shared/external/swift-concurrency/references/synchronization-primitives.md +177 -241
- package/pipeline/skills/shared/external/swift-formatstyle/SKILL.md +258 -234
- package/pipeline/skills/shared/external/swift-language/SKILL.md +342 -382
- package/pipeline/skills/shared/external/swift-language/evals/evals.json +24 -27
- package/pipeline/skills/shared/external/swift-language/references/swift-attributes-interop.md +79 -56
- package/pipeline/skills/shared/external/swift-language/references/swift-patterns-extended.md +297 -340
- package/pipeline/skills/shared/external/swift-security/SKILL.md +180 -161
- package/pipeline/skills/shared/external/swift-security/evals/evals.json +25 -25
- package/pipeline/skills/shared/external/swift-security/references/biometric-authentication.md +314 -469
- package/pipeline/skills/shared/external/swift-security/references/certificate-trust.md +408 -476
- package/pipeline/skills/shared/external/swift-security/references/common-anti-patterns.md +260 -530
- package/pipeline/skills/shared/external/swift-security/references/compliance-owasp-mapping.md +270 -477
- package/pipeline/skills/shared/external/swift-security/references/credential-storage-patterns.md +573 -571
- package/pipeline/skills/shared/external/swift-security/references/cryptokit-public-key.md +370 -441
- package/pipeline/skills/shared/external/swift-security/references/cryptokit-symmetric.md +332 -433
- package/pipeline/skills/shared/external/swift-security/references/keychain-access-control.md +346 -468
- package/pipeline/skills/shared/external/swift-security/references/keychain-fundamentals.md +352 -472
- package/pipeline/skills/shared/external/swift-security/references/keychain-item-classes.md +431 -432
- package/pipeline/skills/shared/external/swift-security/references/keychain-sharing.md +328 -425
- package/pipeline/skills/shared/external/swift-security/references/migration-legacy-stores.md +341 -579
- package/pipeline/skills/shared/external/swift-security/references/secure-enclave.md +396 -457
- package/pipeline/skills/shared/external/swift-security/references/testing-security-code.md +354 -614
- package/pipeline/skills/shared/external/swift-testing/SKILL.md +188 -175
- package/pipeline/skills/shared/external/swift-testing/evals/evals.json +26 -24
- package/pipeline/skills/shared/external/swift-testing/references/testing-advanced.md +80 -84
- package/pipeline/skills/shared/external/swift-testing/references/testing-patterns.md +317 -433
- package/pipeline/skills/shared/external/swiftdata/SKILL.md +392 -256
- package/pipeline/skills/shared/external/swiftdata/evals/evals.json +24 -24
- package/pipeline/skills/shared/external/swiftdata/references/core-data-coexistence.md +206 -402
- package/pipeline/skills/shared/external/swiftdata/references/indexing.md +59 -52
- package/pipeline/skills/shared/external/swiftdata/references/predicate-pitfalls.md +57 -33
- package/pipeline/skills/shared/external/swiftdata/references/swiftdata-advanced.md +354 -747
- package/pipeline/skills/shared/external/swiftdata/references/swiftdata-queries.md +300 -508
- package/pipeline/skills/shared/external/swiftlint/SKILL.md +175 -226
- package/pipeline/skills/shared/external/swiftlint/references/adoption-and-configuration.md +141 -208
- package/pipeline/skills/shared/external/swiftlint/references/custom-rules-and-analyze.md +100 -109
- package/pipeline/skills/shared/external/swiftlint/references/plugins-run-scripts-and-integrations.md +159 -179
- package/pipeline/skills/shared/external/swiftlint/references/rule-reference.md +383 -18
- package/pipeline/skills/shared/external/swiftlint/references/rules-suppressions-and-baselines.md +143 -229
- package/pipeline/skills/shared/external/swiftui-animation/SKILL.md +283 -366
- package/pipeline/skills/shared/external/swiftui-animation/references/animation-advanced.md +396 -608
- package/pipeline/skills/shared/external/swiftui-animation/references/core-animation-bridge.md +336 -385
- package/pipeline/skills/shared/external/swiftui-gestures/SKILL.md +239 -349
- package/pipeline/skills/shared/external/swiftui-gestures/references/gesture-patterns.md +228 -310
- package/pipeline/skills/shared/external/swiftui-layout-components/SKILL.md +260 -249
- package/pipeline/skills/shared/external/swiftui-layout-components/references/form.md +92 -74
- package/pipeline/skills/shared/external/swiftui-layout-components/references/grids.md +112 -177
- package/pipeline/skills/shared/external/swiftui-layout-components/references/list.md +61 -64
- package/pipeline/skills/shared/external/swiftui-layout-components/references/scrollview.md +94 -134
- package/pipeline/skills/shared/external/swiftui-liquid-glass/SKILL.md +193 -225
- package/pipeline/skills/shared/external/swiftui-liquid-glass/references/liquid-glass.md +173 -327
- package/pipeline/skills/shared/external/swiftui-navigation/SKILL.md +193 -168
- package/pipeline/skills/shared/external/swiftui-navigation/references/deeplinks.md +127 -150
- package/pipeline/skills/shared/external/swiftui-navigation/references/navigationstack.md +132 -133
- package/pipeline/skills/shared/external/swiftui-navigation/references/sheets.md +152 -117
- package/pipeline/skills/shared/external/swiftui-navigation/references/tabview.md +106 -140
- package/pipeline/skills/shared/external/swiftui-patterns/SKILL.md +316 -252
- package/pipeline/skills/shared/external/swiftui-patterns/references/architecture-patterns.md +341 -332
- package/pipeline/skills/shared/external/swiftui-patterns/references/deprecated-migration.md +547 -854
- package/pipeline/skills/shared/external/swiftui-patterns/references/design-polish.md +485 -537
- package/pipeline/skills/shared/external/swiftui-patterns/references/platform-and-sharing.md +417 -499
- package/pipeline/skills/shared/external/swiftui-performance/SKILL.md +213 -376
- package/pipeline/skills/shared/external/swiftui-performance/references/demystify-swiftui-performance-wwdc23.md +86 -175
- package/pipeline/skills/shared/external/swiftui-performance/references/optimizing-swiftui-performance-instruments.md +89 -195
- package/pipeline/skills/shared/external/swiftui-performance/references/understanding-hangs-in-your-app.md +95 -182
- package/pipeline/skills/shared/external/swiftui-performance/references/understanding-improving-swiftui-performance.md +71 -149
- package/pipeline/skills/shared/external/swiftui-performance/references/wwdc-session-sources.md +21 -27
- package/pipeline/skills/shared/external/swiftui-uikit-interop/SKILL.md +303 -295
- package/pipeline/skills/shared/external/swiftui-uikit-interop/references/hosting-migration.md +204 -387
- package/pipeline/skills/shared/external/swiftui-uikit-interop/references/representable-recipes.md +469 -683
- package/pipeline/skills/shared/external/swiftui-webkit/SKILL.md +140 -186
- package/pipeline/skills/shared/external/swiftui-webkit/references/loading-and-observation.md +75 -86
- package/pipeline/skills/shared/external/swiftui-webkit/references/local-content-and-custom-schemes.md +63 -60
- package/pipeline/skills/shared/external/swiftui-webkit/references/migration-and-fallbacks.md +69 -137
- package/pipeline/skills/shared/external/swiftui-webkit/references/navigation-and-javascript.md +95 -67
- package/pipeline/skills/shared/external/tipkit/SKILL.md +220 -335
- package/pipeline/skills/shared/external/tipkit/references/tipkit-patterns.md +356 -494
- package/pipeline/skills/shared/external/vision-framework/SKILL.md +260 -375
- package/pipeline/skills/shared/external/vision-framework/references/vision-requests.md +393 -515
- package/pipeline/skills/shared/external/vision-framework/references/visionkit-scanner.md +363 -539
- package/pipeline/skills/shared/external/weatherkit/SKILL.md +152 -310
- package/pipeline/skills/shared/external/weatherkit/references/weatherkit-patterns.md +288 -407
- package/pipeline/skills/shared/external/widgetkit/SKILL.md +216 -288
- package/pipeline/skills/shared/external/widgetkit/references/widgetkit-advanced.md +414 -719
- package/pipeline/skills/shared/external/NOTICE-swift-ios-skills.md +0 -39
package/pipeline/skills/shared/external/swiftlint/references/plugins-run-scripts-and-integrations.md
CHANGED
|
@@ -1,184 +1,165 @@
|
|
|
1
|
-
# Plugins, Run Scripts
|
|
1
|
+
# Plugins, Run Scripts and Other Integrations
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Back to [SKILL.md](../SKILL.md).
|
|
4
4
|
|
|
5
|
-
##
|
|
5
|
+
## Build tool plugin (first choice)
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
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
|
-
|
|
20
|
-
|
|
21
|
-
|
|
12
|
+
```swift
|
|
13
|
+
// swift-tools-version: 5.9
|
|
14
|
+
import PackageDescription
|
|
22
15
|
|
|
23
|
-
|
|
16
|
+
let lint: Target.PluginUsage = .plugin(name: "SwiftLintBuildToolPlugin", package: "SwiftLintPlugins")
|
|
24
17
|
|
|
25
|
-
```swift
|
|
26
|
-
// Package.swift
|
|
27
18
|
let package = Package(
|
|
28
|
-
name: "
|
|
19
|
+
name: "Orchard",
|
|
29
20
|
dependencies: [
|
|
30
|
-
|
|
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
|
-
|
|
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
|
|
31
|
+
### Xcode project without `Package.swift`
|
|
47
32
|
|
|
48
|
-
1.
|
|
49
|
-
|
|
50
|
-
|
|
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
|
-
###
|
|
39
|
+
### Headless CI with `xcodebuild`
|
|
53
40
|
|
|
54
|
-
|
|
41
|
+
The trust prompt cannot be answered on a build agent, so skip validation:
|
|
55
42
|
|
|
56
|
-
```
|
|
57
|
-
xcodebuild -skipPackagePluginValidation -skipMacroValidation
|
|
43
|
+
```bash
|
|
44
|
+
xcodebuild -scheme Orchard -skipPackagePluginValidation -skipMacroValidation build
|
|
58
45
|
```
|
|
59
46
|
|
|
60
|
-
###
|
|
47
|
+
### What the plugin cannot do
|
|
61
48
|
|
|
62
|
-
-
|
|
63
|
-
-
|
|
64
|
-
|
|
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
|
|
55
|
+
## Command plugin
|
|
67
56
|
|
|
68
|
-
|
|
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
|
-
```
|
|
71
|
-
swift package plugin swiftlint
|
|
72
|
-
swift package plugin swiftlint
|
|
73
|
-
swift package plugin swiftlint -- --
|
|
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
|
-
|
|
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
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
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
|
-
|
|
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
|
-
```
|
|
100
|
-
if [
|
|
101
|
-
|
|
79
|
+
```bash
|
|
80
|
+
if [ "$(uname -m)" = "arm64" ]; then
|
|
81
|
+
PATH="/opt/homebrew/bin:${PATH}"; export PATH
|
|
102
82
|
fi
|
|
103
83
|
|
|
104
|
-
|
|
105
|
-
swiftlint
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
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
|
-
|
|
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
|
-
|
|
99
|
+
### Limiting the files a run script lints
|
|
114
100
|
|
|
115
|
-
|
|
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
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
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
|
-
|
|
108
|
+
Then tell SwiftLint where to read them from:
|
|
127
109
|
|
|
128
|
-
|
|
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
|
-
|
|
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
|
-
|
|
118
|
+
```bash
|
|
119
|
+
swiftlint lint --config "${SRCROOT}/.swiftlint.yml"
|
|
120
|
+
```
|
|
137
121
|
|
|
138
|
-
|
|
122
|
+
and untick "Based on dependency analysis" so the phase is never skipped.
|
|
139
123
|
|
|
140
|
-
|
|
141
|
-
"${PODS_ROOT}/SwiftLint/swiftlint"
|
|
142
|
-
```
|
|
124
|
+
With CocoaPods the binary path is `"${PODS_ROOT}/SwiftLint/swiftlint"`.
|
|
143
125
|
|
|
144
|
-
## CI
|
|
126
|
+
## Recipes for CI services
|
|
145
127
|
|
|
146
|
-
### GitHub Actions
|
|
128
|
+
### GitHub Actions: inline annotations
|
|
147
129
|
|
|
148
130
|
```yaml
|
|
149
|
-
name:
|
|
131
|
+
name: lint
|
|
150
132
|
on:
|
|
151
133
|
pull_request:
|
|
152
134
|
paths: ['**/*.swift']
|
|
153
|
-
|
|
154
135
|
jobs:
|
|
155
|
-
|
|
136
|
+
swiftlint:
|
|
156
137
|
runs-on: macos-latest
|
|
138
|
+
timeout-minutes: 15
|
|
157
139
|
steps:
|
|
158
140
|
- uses: actions/checkout@v4
|
|
159
|
-
-
|
|
160
|
-
|
|
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
|
-
|
|
145
|
+
### GitHub Actions: code scanning
|
|
166
146
|
|
|
167
147
|
```yaml
|
|
168
|
-
- name: Lint
|
|
169
|
-
run: swiftlint
|
|
148
|
+
- name: Lint
|
|
149
|
+
run: swiftlint lint --reporter sarif --strict > lint.sarif
|
|
170
150
|
continue-on-error: true
|
|
171
|
-
-
|
|
172
|
-
|
|
151
|
+
- uses: github/codeql-action/upload-sarif@v3
|
|
152
|
+
if: always()
|
|
173
153
|
with:
|
|
174
|
-
sarif_file:
|
|
154
|
+
sarif_file: lint.sarif
|
|
175
155
|
```
|
|
176
156
|
|
|
177
|
-
|
|
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
|
-
-
|
|
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
|
|
172
|
+
- swiftlint lint --reporter codeclimate --strict > code-quality.json
|
|
191
173
|
artifacts:
|
|
192
174
|
reports:
|
|
193
|
-
codequality:
|
|
175
|
+
codequality: code-quality.json
|
|
194
176
|
```
|
|
195
177
|
|
|
196
|
-
|
|
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
|
|
181
|
+
### Bitrise and other hosted runners
|
|
199
182
|
|
|
200
|
-
```
|
|
183
|
+
```bash
|
|
201
184
|
brew install swiftlint
|
|
202
185
|
swiftlint --strict
|
|
203
186
|
```
|
|
204
187
|
|
|
205
|
-
|
|
188
|
+
## Reporters at a glance
|
|
206
189
|
|
|
207
|
-
| Reporter |
|
|
208
|
-
|
|
209
|
-
| `xcode` | Xcode-
|
|
210
|
-
| `
|
|
211
|
-
| `
|
|
212
|
-
| `
|
|
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
|
-
| `
|
|
215
|
-
| `emoji` | Text with emoji | Fun terminal output |
|
|
198
|
+
| `json` | JSON array | scripts, dashboards |
|
|
216
199
|
|
|
217
|
-
##
|
|
200
|
+
## Swift toolchain compatibility
|
|
218
201
|
|
|
219
|
-
SwiftLint
|
|
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
|
-
|
|
206
|
+
On macOS SwiftLint looks for a toolchain in this order:
|
|
222
207
|
|
|
223
|
-
1.
|
|
224
|
-
2.
|
|
225
|
-
3.
|
|
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
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
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
|
|
227
|
+
The `vknabel.vscode-swiftlint` extension lints when you save:
|
|
239
228
|
|
|
240
229
|
```json
|
|
241
|
-
// .vscode/settings.json
|
|
242
230
|
{
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
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
|
-
|
|
256
|
-
config_file: ".swiftlint.yml",
|
|
242
|
+
raise_if_swiftlint_error: true,
|
|
257
243
|
strict: true,
|
|
258
|
-
|
|
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
|
|
252
|
+
The official image suits Linux CI:
|
|
266
253
|
|
|
267
|
-
```
|
|
268
|
-
docker run --rm -v "$
|
|
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
|
|
258
|
+
## Pre-commit
|
|
272
259
|
|
|
273
|
-
###
|
|
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: <
|
|
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
|
-
|
|
272
|
+
The `entry` override applies automatic fixes and still fails the commit on any
|
|
273
|
+
remaining warning or error.
|
|
285
274
|
|
|
286
|
-
|
|
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
|
-
|
|
277
|
+
`.git/hooks/pre-commit`:
|
|
297
278
|
|
|
298
|
-
```
|
|
299
|
-
#!/bin/
|
|
300
|
-
|
|
301
|
-
|
|
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
|
-
|
|
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.
|