@mmerterden/multi-agent-pipeline 20.7.0 → 20.8.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +21 -0
- package/LICENSE +0 -10
- package/docs/facts.json +1 -1
- package/manifest.json +285 -285
- package/package.json +3 -3
- package/pipeline/lib/redact.mjs +3 -2
- package/pipeline/scripts/_notices.mjs +1 -1
- package/pipeline/scripts/gen-skills-index.mjs +13 -1
- package/pipeline/scripts/pre-commit-check.sh +4 -0
- package/pipeline/skills/.skill-manifest.json +69 -69
- 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 +345 -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 +107 -121
- package/pipeline/skills/shared/external/app-store-optimization/references/product-page-variants.md +145 -165
- package/pipeline/skills/shared/external/app-store-review/SKILL.md +306 -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 +335 -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 +277 -381
- package/pipeline/skills/shared/external/authentication/evals/evals.json +25 -25
- package/pipeline/skills/shared/external/authentication/references/keychain-biometric.md +135 -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 +274 -384
- package/pipeline/skills/shared/external/background-processing/evals/evals.json +22 -22
- package/pipeline/skills/shared/external/background-processing/references/background-task-patterns.md +173 -321
- 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 +228 -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 +302 -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 +236 -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/localization-reuse-map/SKILL.md +3 -3
- package/pipeline/skills/shared/external/localization-reuse-map/example-mapping.json +1 -1
- package/pipeline/skills/shared/external/localization-reuse-map/reference/format-and-output.md +8 -7
- package/pipeline/skills/shared/external/localization-reuse-map/reference/publish-and-snapshot.md +2 -2
- package/pipeline/skills/shared/external/localization-reuse-map/reference/sources-and-recipes.md +5 -2
- package/pipeline/skills/shared/external/localization-reuse-map/scripts/_shared.py +100 -0
- package/pipeline/skills/shared/external/localization-reuse-map/scripts/build-artifact.py +45 -26
- package/pipeline/skills/shared/external/localization-reuse-map/scripts/build-spreadsheet.py +14 -16
- package/pipeline/skills/shared/external/localization-reuse-map/scripts/fetch-annotations.py +12 -5
- package/pipeline/skills/shared/external/localization-reuse-map/scripts/fetch-legacy-labels.py +2 -1
- package/pipeline/skills/shared/external/localization-reuse-map/scripts/publish-confluence.py +6 -5
- package/pipeline/skills/shared/external/localization-reuse-map/scripts/render-overlay.py +44 -18
- package/pipeline/skills/shared/external/localization-reuse-map/scripts/resolve-legacy-values.py +5 -2
- package/pipeline/skills/shared/external/localization-reuse-map/scripts/resolve-new-values.py +10 -11
- package/pipeline/skills/shared/external/localization-reuse-map/scripts/scan-screen-keys.py +4 -33
- package/pipeline/skills/shared/external/localization-reuse-map/scripts/verify-map.py +12 -59
- package/pipeline/skills/shared/external/mapkit-location/SKILL.md +297 -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/skill-creator/template.md +7 -1
- 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 +302 -241
- 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 +304 -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 +183 -162
- 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 +411 -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 +375 -491
- 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 +397 -457
- package/pipeline/skills/shared/external/swift-security/references/testing-security-code.md +354 -614
- package/pipeline/skills/shared/external/swift-testing/SKILL.md +191 -175
- package/pipeline/skills/shared/external/swift-testing/evals/evals.json +26 -24
- package/pipeline/skills/shared/external/swift-testing/references/testing-advanced.md +81 -84
- package/pipeline/skills/shared/external/swift-testing/references/testing-patterns.md +317 -433
- package/pipeline/skills/shared/external/swiftdata/SKILL.md +394 -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 +201 -168
- package/pipeline/skills/shared/external/swiftui-navigation/references/deeplinks.md +127 -150
- package/pipeline/skills/shared/external/swiftui-navigation/references/navigationstack.md +134 -133
- package/pipeline/skills/shared/external/swiftui-navigation/references/sheets.md +152 -117
- package/pipeline/skills/shared/external/swiftui-navigation/references/tabview.md +111 -138
- 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 +160 -315
- package/pipeline/skills/shared/external/weatherkit/references/weatherkit-patterns.md +288 -407
- package/pipeline/skills/shared/external/widgetkit/SKILL.md +224 -288
- package/pipeline/skills/shared/external/widgetkit/references/widgetkit-advanced.md +416 -719
- package/pipeline/skills/shared/external/NOTICE-swift-ios-skills.md +0 -39
|
@@ -1,196 +1,217 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: swift-security
|
|
3
|
-
description:
|
|
3
|
+
description: "Apple client security: Keychain (SecItem, kSecClass, OSStatus, iOS, macOS), Face ID/Touch ID keychain items, CryptoKit (AES-GCM, ChaChaPoly, ECDSA, ECDH, HPKE, ML-KEM), Secure Enclave, OAuth token and API key storage, SecTrust/SPKI pinning, keychain sharing, moving secrets out of UserDefaults or plists, OWASP MASVS/MASTG. Use when writing, reviewing or migrating code that stores secrets, holds keys or evaluates trust. Not for passkeys, App Attest or App Review."
|
|
4
4
|
metadata:
|
|
5
|
-
source:
|
|
5
|
+
source: multi-agent-pipeline
|
|
6
6
|
---
|
|
7
7
|
|
|
8
8
|
# Swift Security
|
|
9
9
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
migration, security testing, and OWASP mobile compliance mapping.
|
|
10
|
+
This skill covers the parts of an Apple-platform app that hold secrets on the
|
|
11
|
+
device: the keychain, biometric gates, CryptoKit primitives, Secure Enclave keys,
|
|
12
|
+
server trust, and the audit vocabulary around them.
|
|
14
13
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
- [Workflow](#workflow)
|
|
22
|
-
- [Reference Loading](#reference-loading)
|
|
23
|
-
- [Security Invariants](#security-invariants)
|
|
24
|
-
- [Sibling Boundaries](#sibling-boundaries)
|
|
25
|
-
- [Review Checklist](#review-checklist)
|
|
26
|
-
- [Common Mistakes](#common-mistakes)
|
|
27
|
-
- [Output Rules](#output-rules)
|
|
28
|
-
- [References](#references)
|
|
14
|
+
If nobody states a deployment target, write examples for iOS 17 and later with
|
|
15
|
+
Swift concurrency (actors, `async`/`await`). If the user names an older target,
|
|
16
|
+
keep an iOS 13 compatible path alongside (serial queue, completion handlers).
|
|
17
|
+
Everything CryptoKit shipped for post-quantum work in iOS 26 (SHA-3, ML-KEM,
|
|
18
|
+
ML-DSA, X-Wing, the Secure Enclave lattice types) sits behind an availability
|
|
19
|
+
check; never present it as usable on earlier systems.
|
|
29
20
|
|
|
30
21
|
## Workflow
|
|
31
22
|
|
|
32
|
-
|
|
23
|
+
Decide which of three jobs the request is before opening any reference file.
|
|
33
24
|
|
|
34
|
-
1. Review existing code
|
|
35
|
-
|
|
36
|
-
domain
|
|
37
|
-
corrected pattern.
|
|
38
|
-
2.
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
25
|
+
1. **Review of existing code.** Walk the Review Checklist below. For every row
|
|
26
|
+
that fails, open [Anti-pattern catalog](references/common-anti-patterns.md)
|
|
27
|
+
and the domain file for that row. Report each finding with a severity, the
|
|
28
|
+
offending code as evidence, and the corrected pattern.
|
|
29
|
+
2. **Improvement or migration.** Name the kind of migration (plaintext to
|
|
30
|
+
keychain, class change, accessibility change, sharing, macOS backend). Open
|
|
31
|
+
[Legacy migration](references/migration-legacy-stores.md) and the
|
|
32
|
+
file for the target domain. Keep the user's existing data readable, read the
|
|
33
|
+
new item back to prove the write, and remove the old copy only after that
|
|
34
|
+
check passes.
|
|
35
|
+
3. **New implementation.** Open the fewest domain files that answer the
|
|
36
|
+
question and follow what they show. Handle every OSStatus, add tests, and
|
|
37
|
+
finish by running the matching part of the checklist.
|
|
44
38
|
|
|
45
|
-
|
|
46
|
-
|
|
39
|
+
Load references on demand. Opening all of them for every question wastes
|
|
40
|
+
context and blurs the answer.
|
|
47
41
|
|
|
48
|
-
## Reference
|
|
42
|
+
## Which Reference to Open
|
|
49
43
|
|
|
50
|
-
|
|
|
44
|
+
| The task involves | Open |
|
|
51
45
|
| --- | --- |
|
|
52
|
-
|
|
|
53
|
-
|
|
|
54
|
-
|
|
|
55
|
-
| Face ID, Touch ID,
|
|
56
|
-
| Secure Enclave
|
|
57
|
-
|
|
|
58
|
-
|
|
|
59
|
-
| OAuth tokens, API keys,
|
|
60
|
-
|
|
|
61
|
-
|
|
|
62
|
-
| UserDefaults
|
|
63
|
-
| Unit, integration,
|
|
64
|
-
| OWASP MASVS
|
|
65
|
-
|
|
|
46
|
+
| Keychain CRUD, return types, OSStatus codes | [Keychain basics](references/keychain-fundamentals.md) |
|
|
47
|
+
| Picking a `kSecClass`, primary keys, item identity | [Item classes](references/keychain-item-classes.md) |
|
|
48
|
+
| `kSecAttrAccessible` values, `SecAccessControl` flags | [Access control](references/keychain-access-control.md) |
|
|
49
|
+
| Face ID, Touch ID, secrets released by biometrics | [Biometrics](references/biometric-authentication.md) |
|
|
50
|
+
| Keys generated in the Secure Enclave | [Enclave keys](references/secure-enclave.md) |
|
|
51
|
+
| SHA-2/SHA-3, HMAC, AES-GCM, ChaChaPoly, HKDF, PBKDF2 | [Symmetric crypto](references/cryptokit-symmetric.md) |
|
|
52
|
+
| Signatures, ECDH, HPKE, ML-KEM, ML-DSA | [Public-key crypto](references/cryptokit-public-key.md) |
|
|
53
|
+
| OAuth tokens, API keys, refresh rotation, logout | [Credential lifecycles](references/credential-storage-patterns.md) |
|
|
54
|
+
| Sharing items between an app and its extensions or sibling apps | [Sharing](references/keychain-sharing.md) |
|
|
55
|
+
| `SecTrust`, SPKI pinning, client certificates (mTLS) | [Trust and pinning](references/certificate-trust.md) |
|
|
56
|
+
| Moving data out of UserDefaults, plists, NSCoding archives | [Legacy migration](references/migration-legacy-stores.md) |
|
|
57
|
+
| Unit, integration, Simulator, device and CI testing | [Testing](references/testing-security-code.md) |
|
|
58
|
+
| OWASP MASVS, MASTG, audit evidence | [OWASP mapping](references/compliance-owasp-mapping.md) |
|
|
59
|
+
| A full security review | [Anti-pattern catalog](references/common-anti-patterns.md) first, then each domain the code touches |
|
|
66
60
|
|
|
67
61
|
## Security Invariants
|
|
68
62
|
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
63
|
+
Only these rules, and the anti-patterns that break them, are phrased as "must"
|
|
64
|
+
or "never". Everything else in this skill is a recommendation with trade-offs
|
|
65
|
+
and should be worded that way.
|
|
66
|
+
|
|
67
|
+
1. Never place refresh tokens, signing keys, API keys, passwords or tokens in
|
|
68
|
+
`UserDefaults`, `Info.plist`, `.xcconfig` values, source literals, log
|
|
69
|
+
output, plain files or `NSCoding` archives. Use the keychain, or fetch the
|
|
70
|
+
value from a server at runtime.
|
|
71
|
+
2. Never discard an `OSStatus`. Every path through `SecItemAdd`,
|
|
72
|
+
`SecItemCopyMatching`, `SecItemUpdate` and `SecItemDelete` handles success
|
|
73
|
+
and the expected failures `errSecDuplicateItem`, `errSecItemNotFound` and
|
|
74
|
+
`errSecInteractionNotAllowed`.
|
|
75
|
+
3. Never let the `Bool` from `LAContext.evaluatePolicy()` be the only thing
|
|
76
|
+
standing between a user and a secret. Put the secret in a keychain item
|
|
77
|
+
protected by `SecAccessControl`; reading the item makes the system run the
|
|
78
|
+
biometric check.
|
|
79
|
+
4. Set `kSecAttrAccessible` or `kSecAttrAccessControl` explicitly on every add.
|
|
80
|
+
5. Save with add-or-update: call `SecItemAdd`, and when it returns
|
|
81
|
+
`errSecDuplicateItem`, call `SecItemUpdate`. Deleting and re-adding is
|
|
82
|
+
reserved for changing an item's access control, which `SecItemUpdate`
|
|
83
|
+
cannot do.
|
|
84
|
+
6. `SecItem*` calls must not run on the main actor. Isolate them in an actor
|
|
85
|
+
(available from iOS 13) or, in completion-handler code, a private serial
|
|
86
|
+
queue.
|
|
87
|
+
7. On macOS, pass `kSecUseDataProtectionKeychain: true` unless the code is
|
|
88
|
+
deliberately working with the legacy file-based keychain.
|
|
89
|
+
8. Never encrypt twice with the same AES-GCM nonce under one key.
|
|
90
|
+
9. Never use the bytes of an ECDH `SharedSecret` as a key. Derive one with
|
|
91
|
+
HKDF or X9.63 first.
|
|
92
|
+
10. Never let `Insecure.SHA1` or `Insecure.MD5` protect anything; they exist
|
|
93
|
+
for legacy interoperability only.
|
|
94
|
+
|
|
95
|
+
## Settled Facts
|
|
96
|
+
|
|
97
|
+
These answers apply across every reference file in this skill.
|
|
98
|
+
|
|
99
|
+
- `errSecUserCanceled` is `-128` (the user dismissed the prompt).
|
|
100
|
+
`errSecAuthFailed` is `-25293` (authentication failed or the protected item is
|
|
101
|
+
no longer usable).
|
|
102
|
+
- An item cannot be both synchronizable and `...ThisDeviceOnly`. Apple's
|
|
103
|
+
`kSecAttrSynchronizable` documentation forbids pairing it with an
|
|
104
|
+
accessibility value that ends in `ThisDeviceOnly`; the add is rejected with
|
|
105
|
+
`errSecParam` (-50) rather than quietly staying local.
|
|
106
|
+
- The Simulator has no Secure Enclave. Branch on
|
|
107
|
+
`#if targetEnvironment(simulator)` at compile time and use
|
|
108
|
+
`SecureEnclave.isAvailable` as the runtime check on real hardware; do not base
|
|
109
|
+
Simulator behaviour on what the flag reports there.
|
|
110
|
+
- Secure Enclave private keys that carry an access control always include
|
|
111
|
+
`.privateKeyUsage` in its flags, for example
|
|
112
|
+
`[.privateKeyUsage, .biometryCurrentSet]`.
|
|
113
|
+
- Any code path that shows Face ID needs `NSFaceIDUsageDescription` in
|
|
114
|
+
`Info.plist`. The `LAContext` header asks apps to supply it, shows its string
|
|
115
|
+
the first time Face ID is used, and fails evaluations with
|
|
116
|
+
`LAError.biometryNotAvailable` once the user denies Face ID for the app. That
|
|
117
|
+
applies to keychain reads that trigger Face ID as much as to `evaluatePolicy`.
|
|
118
|
+
- `arc4random` on Apple platforms is backed by a cryptographically secure
|
|
119
|
+
generator, not RC4. Its limits are a 32-bit result and the bias of `% n`. For
|
|
120
|
+
keys, nonces, salts and tokens, use `SecRandomCopyBytes`,
|
|
121
|
+
`SymmetricKey(size:)` or `SystemRandomNumberGenerator` so the size and the
|
|
122
|
+
failure path are explicit.
|
|
123
|
+
- After migrating a secret, remove the plaintext copy as soon as the keychain
|
|
124
|
+
read-back succeeds. A rollback window that keeps plaintext on disk defeats the
|
|
125
|
+
migration; keep any rollback state in the keychain instead.
|
|
96
126
|
|
|
97
127
|
## Sibling Boundaries
|
|
98
128
|
|
|
99
|
-
This skill owns
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
-
|
|
110
|
-
|
|
111
|
-
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
This skill may mention those areas only to identify a security handoff.
|
|
129
|
+
This skill owns on-device secret storage, cryptographic primitives, keys held
|
|
130
|
+
in hardware, and checks of server trust. Adjacent topics appear here only to
|
|
131
|
+
point at the right skill:
|
|
132
|
+
|
|
133
|
+
- `authentication`: passkeys, Sign in with Apple, OAuth sign-in flows,
|
|
134
|
+
`ASAuthorizationController`, credential state, sign-in UX, and `LAContext`
|
|
135
|
+
prompts and policy that do not guard a keychain item.
|
|
136
|
+
- `cryptokit`: CryptoKit questions with no storage, keychain, Secure Enclave,
|
|
137
|
+
trust or compliance angle.
|
|
138
|
+
- `device-integrity`: DeviceCheck and App Attest attestations and assertions.
|
|
139
|
+
- `ios-networking`: URLSession, request pipelines, ATS settings, retries,
|
|
140
|
+
caching, reachability and transport design.
|
|
141
|
+
- `app-store-review`: privacy manifests, ATT, App Review guidelines and
|
|
142
|
+
submission readiness.
|
|
115
143
|
|
|
116
144
|
## Review Checklist
|
|
117
145
|
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
-
|
|
122
|
-
|
|
123
|
-
-
|
|
124
|
-
-
|
|
125
|
-
|
|
126
|
-
-
|
|
127
|
-
-
|
|
128
|
-
-
|
|
129
|
-
-
|
|
130
|
-
-
|
|
131
|
-
|
|
132
|
-
-
|
|
133
|
-
|
|
134
|
-
- App/extension sharing uses full Team ID access groups and matching
|
|
135
|
-
entitlements on every target.
|
|
136
|
-
- Certificate trust uses current `SecTrust` APIs, validates hostname/policy, and
|
|
137
|
-
uses SPKI or CA pinning when pinning is required.
|
|
138
|
-
- macOS keychain code intentionally chooses data protection or file-based
|
|
139
|
-
keychain behavior.
|
|
140
|
-
- Tests cover success, duplicate, missing item, locked-device, simulator/device,
|
|
141
|
-
and migration paths where applicable.
|
|
142
|
-
- OWASP MASVS/MASTG mappings are included when compliance is requested.
|
|
146
|
+
Mark each row pass, fail or n/a. A fail names the reference file and a severity.
|
|
147
|
+
|
|
148
|
+
- [ ] No secret sits in source code, `UserDefaults`, a plist, a log line, a plain file or an archive.
|
|
149
|
+
- [ ] Each `SecItem*` call inspects its `OSStatus` and handles the recoverable cases.
|
|
150
|
+
- [ ] Biometric access to a secret goes through a `SecAccessControl` keychain item, not an `evaluatePolicy()` Bool.
|
|
151
|
+
- [ ] Add dictionaries carry an explicit accessibility value.
|
|
152
|
+
- [ ] Saves are add-or-update; delete-then-add appears only for access-control changes.
|
|
153
|
+
- [ ] Keychain calls run away from the UI and the main actor.
|
|
154
|
+
- [ ] The `kSecClass` fits the item and its primary-key attributes are all set.
|
|
155
|
+
- [ ] CryptoKit use avoids nonce reuse, raw shared secrets, weak hashes and embedded keys.
|
|
156
|
+
- [ ] Secure Enclave code checks availability, separates Simulator from device, stores only `dataRepresentation`, and assumes keys never leave the device.
|
|
157
|
+
- [ ] App and extension sharing uses Team ID prefixed access groups with matching entitlements on every target.
|
|
158
|
+
- [ ] Trust evaluation uses current `SecTrust` APIs, checks the host name and policy, and pins SPKI or a CA when pinning is required.
|
|
159
|
+
- [ ] On macOS, the choice between the file-based keychain and the data protection keychain is deliberate.
|
|
160
|
+
- [ ] Tests exercise the happy path, a duplicate add, an absent item, a locked device, Simulator against hardware, and migration where it applies.
|
|
161
|
+
- [ ] A MASVS/MASTG mapping is included when compliance was asked for.
|
|
143
162
|
|
|
144
163
|
## Common Mistakes
|
|
145
164
|
|
|
146
|
-
-
|
|
147
|
-
`errSecItemNotFound`
|
|
148
|
-
-
|
|
149
|
-
control.
|
|
150
|
-
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
-
|
|
155
|
-
|
|
156
|
-
-
|
|
157
|
-
|
|
158
|
-
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
-
|
|
162
|
-
|
|
165
|
+
- Keychain snippets that stop at `SecItemAdd` with no duplicate branch or no
|
|
166
|
+
`errSecItemNotFound` branch.
|
|
167
|
+
- A Face ID prompt bolted onto the UI while the secret itself remains readable
|
|
168
|
+
without any keychain access control.
|
|
169
|
+
- Leaving out `kSecAttrAccessible`, which silently means
|
|
170
|
+
`kSecAttrAccessibleWhenUnlocked`.
|
|
171
|
+
- Using `kSecAttrAccessibleAlways` or `kSecAttrAccessibleAlwaysThisDeviceOnly`;
|
|
172
|
+
both are deprecated.
|
|
173
|
+
- One add dictionary that carries both `kSecAttrAccessControl` and
|
|
174
|
+
`kSecAttrAccessible`.
|
|
175
|
+
- Expecting to import, export or sync an enclave key, or asking the enclave to
|
|
176
|
+
perform symmetric encryption.
|
|
177
|
+
- Offering the CryptoKit ML-KEM, ML-DSA, X-Wing or SHA-3 types on systems older
|
|
178
|
+
than iOS 26.
|
|
179
|
+
- Offering HPKE on systems older than iOS 17.
|
|
180
|
+
- Computing a pin over bare public-key bytes instead of the DER-encoded
|
|
181
|
+
SubjectPublicKeyInfo.
|
|
182
|
+
- Wandering into sign-in flows, networking stacks, App Attest or App Review
|
|
183
|
+
instead of handing those parts to the sibling skill.
|
|
163
184
|
|
|
164
185
|
## Output Rules
|
|
165
186
|
|
|
166
|
-
-
|
|
167
|
-
|
|
168
|
-
MEDIUM
|
|
169
|
-
-
|
|
170
|
-
|
|
171
|
-
-
|
|
172
|
-
|
|
173
|
-
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
verification.
|
|
187
|
+
- Severity: **CRITICAL** is an exploitable secret exposure or broken crypto;
|
|
188
|
+
**HIGH** is a silent break in a security boundary or a data-loss path;
|
|
189
|
+
**MEDIUM** is hardening that is brittle or incomplete.
|
|
190
|
+
- When reviewing code with a concrete anti-pattern, show the wrong code and the
|
|
191
|
+
corrected code.
|
|
192
|
+
- State the minimum iOS and macOS version whenever you recommend an API that is
|
|
193
|
+
versioned.
|
|
194
|
+
- Name the reference file that backs each substantive security pattern.
|
|
195
|
+
- Keychain samples always show `OSStatus` handling and an explicit
|
|
196
|
+
accessibility value.
|
|
197
|
+
- Close implementation and migration answers with a `## Reference Files`
|
|
198
|
+
section: each reference you loaded plus one line on why.
|
|
199
|
+
- Do not make up WWDC session numbers or citations. When a claim has no source
|
|
200
|
+
at hand, say it needs verification.
|
|
180
201
|
|
|
181
202
|
## References
|
|
182
203
|
|
|
183
|
-
- [
|
|
184
|
-
- [
|
|
185
|
-
- [
|
|
186
|
-
- [
|
|
187
|
-
- [
|
|
188
|
-
- [
|
|
189
|
-
- [
|
|
190
|
-
- [
|
|
191
|
-
- [
|
|
192
|
-
- [
|
|
193
|
-
- [migration
|
|
194
|
-
- [
|
|
195
|
-
- [
|
|
196
|
-
- [
|
|
204
|
+
- [Keychain basics](references/keychain-fundamentals.md): the four SecItem calls, return types, OSStatus handling, actor wrapper, macOS backends.
|
|
205
|
+
- [Item classes](references/keychain-item-classes.md): the five item classes, their primary keys, keys, certificates and identities.
|
|
206
|
+
- [Access control](references/keychain-access-control.md): accessibility constants, `SecAccessControl` flags, background access, file protection.
|
|
207
|
+
- [Biometrics](references/biometric-authentication.md): keychain-bound biometrics, `LAContext`, enrollment changes.
|
|
208
|
+
- [Enclave keys](references/secure-enclave.md): enclave limits, CryptoKit `SecureEnclave`, key persistence, iOS 26 post-quantum types.
|
|
209
|
+
- [Symmetric crypto](references/cryptokit-symmetric.md): hashing, HMAC, AES-GCM, ChaChaPoly, HKDF, PBKDF2.
|
|
210
|
+
- [Public-key crypto](references/cryptokit-public-key.md): ECDSA, ECDH, HPKE, ML-KEM, ML-DSA, key formats, moving off RSA.
|
|
211
|
+
- [Credential lifecycles](references/credential-storage-patterns.md): OAuth tokens, API keys, refresh rotation, logout cleanup.
|
|
212
|
+
- [Sharing](references/keychain-sharing.md): access groups, entitlements, extensions, iCloud Keychain, macOS groups.
|
|
213
|
+
- [Trust and pinning](references/certificate-trust.md): `SecTrust`, SPKI and CA pinning, `NSPinnedDomains`, client certificates.
|
|
214
|
+
- [Legacy migration](references/migration-legacy-stores.md): moving secrets out of UserDefaults, plists and archives, then cleaning up.
|
|
215
|
+
- [Anti-pattern catalog](references/common-anti-patterns.md): the catalog of insecure patterns that drives a review.
|
|
216
|
+
- [Testing](references/testing-security-code.md): protocol mocks, real keychain tests, the CI and device split.
|
|
217
|
+
- [OWASP mapping](references/compliance-owasp-mapping.md): OWASP Mobile Top 10, MASVS and MASTG evidence.
|
|
@@ -4,44 +4,44 @@
|
|
|
4
4
|
{
|
|
5
5
|
"id": 0,
|
|
6
6
|
"name": "keychain-token-review",
|
|
7
|
-
"prompt": "Review this
|
|
8
|
-
"expected_output": "
|
|
7
|
+
"prompt": "Review this helper from our fitness app. `SessionVault.save(refresh:)` keeps a fallback copy via `UserDefaults.standard.set(token, forKey: \"rt\")`, then calls `SecItemDelete` on the same service and account followed by `SecItemAdd` with class, service, account and value data. The return value of `SecItemAdd` is ignored and no accessibility attribute is passed. Tell us what is wrong and how to fix it.",
|
|
8
|
+
"expected_output": "Flags the UserDefaults copy of the refresh token as CRITICAL or HIGH and says it must be removed. Points out the ignored OSStatus and shows handling for errSecDuplicateItem, errSecItemNotFound and errSecInteractionNotAllowed. Adds an explicit kSecAttrAccessible value (or a SecAccessControl) to the add dictionary. Replaces delete-then-add with add, then SecItemUpdate when the add reports a duplicate. Shows wrong and corrected code and names the reference files used.",
|
|
9
9
|
"files": [],
|
|
10
|
-
"
|
|
11
|
-
"
|
|
12
|
-
"
|
|
13
|
-
"
|
|
14
|
-
"Rejects delete-then-add
|
|
15
|
-
"Cites
|
|
10
|
+
"expectations": [
|
|
11
|
+
"Rates the refresh token stored in UserDefaults as critical or high severity",
|
|
12
|
+
"Adds OSStatus checks that cover errSecDuplicateItem, errSecItemNotFound and errSecInteractionNotAllowed",
|
|
13
|
+
"Sets kSecAttrAccessible explicitly, or uses a SecAccessControl, on the add",
|
|
14
|
+
"Rejects the delete-then-add save and calls SecItemUpdate when SecItemAdd returns a duplicate",
|
|
15
|
+
"Cites the reference files that support the fixes"
|
|
16
16
|
]
|
|
17
17
|
},
|
|
18
18
|
{
|
|
19
19
|
"id": 1,
|
|
20
20
|
"name": "biometric-secret-boundary",
|
|
21
|
-
"prompt": "
|
|
22
|
-
"expected_output": "
|
|
21
|
+
"prompt": "Our banking app shows the full card number after `LAContext().evaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, localizedReason:)` returns true. The number itself lives in UserDefaults and Info.plist has no Face ID entry. Is this acceptable, and what should we change?",
|
|
22
|
+
"expected_output": "Says a Bool from evaluatePolicy is not a security boundary and can be forced true at runtime. Moves the card number into the keychain, guarded by a SecAccessControl using .biometryCurrentSet (or .userPresence where passcode fallback is wanted) so the read itself triggers the prompt. Adds NSFaceIDUsageDescription to Info.plist. Explains that .biometryCurrentSet makes the item unreadable after an enrollment change, how evaluatedPolicyDomainState detects that, and the recovery path. Cites biometric-authentication.md and keychain-access-control.md.",
|
|
23
23
|
"files": [],
|
|
24
|
-
"
|
|
25
|
-
"
|
|
26
|
-
"
|
|
27
|
-
"Mentions NSFaceIDUsageDescription
|
|
28
|
-
"
|
|
29
|
-
"Cites
|
|
24
|
+
"expectations": [
|
|
25
|
+
"Rejects the evaluatePolicy Bool as the only gate",
|
|
26
|
+
"Stores the secret in the keychain behind SecAccessControl using .biometryCurrentSet or .userPresence",
|
|
27
|
+
"Mentions adding NSFaceIDUsageDescription to Info.plist",
|
|
28
|
+
"Says what an enrollment change does to a .biometryCurrentSet item, covers detection through evaluatedPolicyDomainState, and a recovery flow",
|
|
29
|
+
"Cites biometric-authentication.md and keychain-access-control.md"
|
|
30
30
|
]
|
|
31
31
|
},
|
|
32
32
|
{
|
|
33
33
|
"id": 2,
|
|
34
34
|
"name": "security-sibling-boundary",
|
|
35
|
-
"prompt": "
|
|
36
|
-
"expected_output": "
|
|
35
|
+
"prompt": "Give us a security checklist for our next release. It covers: refresh-token storage in the keychain, the access policy for a Secure Enclave signing key, pinning our API certificate, end-to-end encrypting chat messages with CryptoKit, adding Sign in with Apple and passkeys, verifying OAuth tokens on the relying party, App Attest, URLSession TLS settings, and our privacy manifest. We also want to try ML-KEM.",
|
|
36
|
+
"expected_output": "Treats four items as in scope here: keychain refresh-token storage, the access policy of the enclave key, certificate trust, and CryptoKit encryption on the client. Hands passkeys, Sign in with Apple, OAuth and relying-party verification to authentication, App Attest and DeviceCheck to device-integrity, URLSession and TLS configuration to ios-networking (the custom CryptoKit end-to-end layer stays here), and the privacy manifest to app-store-review. Notes that X-Wing, ML-DSA, ML-KEM, SHA-3 and the Secure Enclave post-quantum types need iOS 26.",
|
|
37
37
|
"files": [],
|
|
38
|
-
"
|
|
39
|
-
"
|
|
40
|
-
"Routes Sign in with Apple,
|
|
41
|
-
"Routes App Attest and DeviceCheck
|
|
42
|
-
"
|
|
43
|
-
"Routes
|
|
44
|
-
"
|
|
38
|
+
"expectations": [
|
|
39
|
+
"Treats keychain token storage, the enclave key policy, certificate trust and client-side CryptoKit as in scope",
|
|
40
|
+
"Routes passkeys, Sign in with Apple, OAuth and relying-party verification to authentication",
|
|
41
|
+
"Routes App Attest and DeviceCheck to device-integrity",
|
|
42
|
+
"Sends URLSession and TLS settings to ios-networking and keeps the app's own end-to-end CryptoKit layer here",
|
|
43
|
+
"Routes privacy manifests to app-store-review",
|
|
44
|
+
"Says X-Wing, ML-DSA, ML-KEM, SHA-3 and the enclave post-quantum APIs require iOS 26"
|
|
45
45
|
]
|
|
46
46
|
}
|
|
47
47
|
]
|