@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.
- package/CHANGELOG.md +27 -0
- package/LICENSE +0 -10
- package/docs/facts.json +1 -1
- package/manifest.json +328 -329
- package/package.json +2 -2
- package/pipeline/multi-agent-refs/features/design-conformance.md +62 -64
- package/pipeline/scripts/_notices.mjs +12 -1
- package/pipeline/scripts/gen-skills-index.mjs +1 -1
- package/pipeline/skills/.skill-manifest.json +106 -106
- package/pipeline/skills/shared/README.md +71 -71
- package/pipeline/skills/shared/external/agent-introspection-debugging/SKILL.md +1 -0
- 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/android-architecture/SKILL.md +2 -0
- package/pipeline/skills/shared/external/android-performance/SKILL.md +2 -0
- package/pipeline/skills/shared/external/android-security/SKILL.md +2 -0
- 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/backlog/BACKLOG.md +1 -1
- package/pipeline/skills/shared/external/backlog/SKILL.md +56 -33
- 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/ci-cd-pipelines/SKILL.md +1 -0
- 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/compose-components/SKILL.md +2 -0
- package/pipeline/skills/shared/external/compose-navigation/SKILL.md +3 -2
- package/pipeline/skills/shared/external/compose-testing/SKILL.md +2 -0
- 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/council/SKILL.md +1 -0
- 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/css-modern/SKILL.md +1 -0
- package/pipeline/skills/shared/external/database-patterns/SKILL.md +1 -0
- 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/evidence-github/SKILL.md +2 -0
- package/pipeline/skills/shared/external/evidence-registry/SKILL.md +2 -0
- package/pipeline/skills/shared/external/gradle-kotlin-dsl/SKILL.md +2 -0
- 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/html-semantic/SKILL.md +1 -0
- package/pipeline/skills/shared/external/humanizer/SKILL.md +1 -0
- 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-coding-standard/SKILL.md +1 -0
- 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-module-structure/SKILL.md +1 -0
- 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-security/SKILL.md +2 -0
- 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 +91 -283
- package/pipeline/skills/shared/external/localization-reuse-map/reference/format-and-output.md +119 -151
- package/pipeline/skills/shared/external/localization-reuse-map/reference/publish-and-snapshot.md +60 -90
- package/pipeline/skills/shared/external/localization-reuse-map/reference/sources-and-recipes.md +119 -156
- package/pipeline/skills/shared/external/localization-reuse-map/scripts/build-artifact.py +726 -787
- package/pipeline/skills/shared/external/localization-reuse-map/scripts/build-spreadsheet.py +253 -288
- package/pipeline/skills/shared/external/localization-reuse-map/scripts/fetch-annotations.py +243 -304
- package/pipeline/skills/shared/external/localization-reuse-map/scripts/fetch-legacy-labels.py +88 -104
- package/pipeline/skills/shared/external/localization-reuse-map/scripts/publish-confluence.py +181 -235
- package/pipeline/skills/shared/external/localization-reuse-map/scripts/render-key-shots.py +198 -263
- package/pipeline/skills/shared/external/localization-reuse-map/scripts/render-overlay.py +461 -466
- package/pipeline/skills/shared/external/localization-reuse-map/scripts/resolve-legacy-values.py +145 -151
- package/pipeline/skills/shared/external/localization-reuse-map/scripts/resolve-new-values.py +123 -141
- package/pipeline/skills/shared/external/localization-reuse-map/scripts/scan-screen-keys.py +146 -157
- package/pipeline/skills/shared/external/localization-reuse-map/scripts/snapshot-resources.sh +22 -19
- package/pipeline/skills/shared/external/localization-reuse-map/scripts/verify-map.py +156 -140
- 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/nextjs-app-router/SKILL.md +1 -0
- 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/play-store-review/SKILL.md +2 -0
- 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/python-patterns/SKILL.md +1 -0
- package/pipeline/skills/shared/external/react-best-practices/SKILL.md +1 -0
- 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/rest-api-design/SKILL.md +1 -0
- package/pipeline/skills/shared/external/retrofit-networking/SKILL.md +2 -0
- package/pipeline/skills/shared/external/room-database/SKILL.md +2 -0
- package/pipeline/skills/shared/external/search-first/SKILL.md +1 -0
- 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/signal-community/SKILL.md +2 -0
- package/pipeline/skills/shared/external/skill-creator/SKILL.md +80 -41
- package/pipeline/skills/shared/external/skill-creator/audit.md +63 -59
- package/pipeline/skills/shared/external/skill-creator/checklist.md +28 -20
- package/pipeline/skills/shared/external/skill-creator/examples.md +40 -40
- package/pipeline/skills/shared/external/skill-creator/label-check.md +48 -36
- package/pipeline/skills/shared/external/skill-creator/scripts/audit-panel.js +91 -100
- package/pipeline/skills/shared/external/skill-creator/template.md +51 -39
- 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/tailwind-css/SKILL.md +1 -0
- package/pipeline/skills/shared/external/testing-backend/SKILL.md +1 -0
- 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/typescript-patterns/SKILL.md +1 -0
- 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/vue-composition/SKILL.md +1 -0
- 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/web-accessibility/SKILL.md +1 -0
- package/pipeline/skills/shared/external/web-performance/SKILL.md +1 -0
- package/pipeline/skills/shared/external/web-testing/SKILL.md +1 -0
- 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
|
@@ -4,45 +4,42 @@
|
|
|
4
4
|
{
|
|
5
5
|
"id": 0,
|
|
6
6
|
"name": "speechanalyzer-live-transcription",
|
|
7
|
-
"prompt": "
|
|
8
|
-
"expected_output": "
|
|
9
|
-
"files": [],
|
|
7
|
+
"prompt": "Build live captions for an iOS 26 lecture-recording app with SpeechAnalyzer. Captions should appear while the lecturer speaks and later highlight words during playback. A draft we found uses SpeechTranscriber(locale:preset: .offlineTranscription) and simply finishes the input stream when recording stops. Correct it and outline the full flow.",
|
|
8
|
+
"expected_output": "Replaces the nonexistent .offlineTranscription with a documented preset such as .timeIndexedProgressiveTranscription, checks SpeechTranscriber.isAvailable and supportedLocale(equivalentTo:), installs assets through AssetInventory.assetInstallationRequest(supporting:), converts microphone buffers to SpeechAnalyzer.bestAvailableAudioFormat(compatibleWith:), keeps volatile and final text apart, and ends the session explicitly with a finalize or cancel call rather than relying on the input stream closing.",
|
|
10
9
|
"assertions": [
|
|
11
|
-
"Uses
|
|
12
|
-
"Checks SpeechTranscriber.isAvailable and supportedLocale(equivalentTo:)
|
|
13
|
-
"Installs
|
|
14
|
-
"Converts
|
|
15
|
-
"
|
|
16
|
-
"
|
|
10
|
+
"Uses a documented preset such as .timeIndexedProgressiveTranscription and rejects .offlineTranscription",
|
|
11
|
+
"Checks SpeechTranscriber.isAvailable and supportedLocale(equivalentTo:)",
|
|
12
|
+
"Installs assets with AssetInventory.assetInstallationRequest(supporting:)",
|
|
13
|
+
"Converts live buffers to bestAvailableAudioFormat(compatibleWith:)",
|
|
14
|
+
"Replaces volatile results with final ones instead of duplicating text",
|
|
15
|
+
"Ends the analyzer explicitly with finalizeAndFinish, finalizeAndFinishThroughEndOfInput or cancelAndFinishNow"
|
|
17
16
|
]
|
|
18
17
|
},
|
|
19
18
|
{
|
|
20
19
|
"id": 1,
|
|
21
20
|
"name": "sfspeechrecognizer-live-review",
|
|
22
|
-
"prompt": "Review
|
|
23
|
-
"expected_output": "
|
|
24
|
-
"files": [],
|
|
21
|
+
"prompt": "Review our SFSpeechRecognizer voice-notes feature for an app that still supports iOS 16. We only add NSSpeechRecognitionUsageDescription, request speech permission after starting the audio engine, set requiresOnDeviceRecognition = true everywhere, and just call task.cancel() when the user taps Stop. Notes can run for several minutes.",
|
|
22
|
+
"expected_output": "Adds NSMicrophoneUsageDescription next to the speech key, requests both speech and microphone permission before activating the session and starting the engine, adopts SFSpeechRecognizerDelegate for availability changes, checks supportsOnDeviceRecognition before forcing on-device with a fallback or message, plans for the per-task duration limit by rolling over or chunking, and cleans up completely: stop the engine, remove the tap, call endAudio() and cancel the task.",
|
|
25
23
|
"assertions": [
|
|
26
|
-
"Requires both NSSpeechRecognitionUsageDescription and NSMicrophoneUsageDescription
|
|
27
|
-
"Requests speech
|
|
28
|
-
"
|
|
29
|
-
"Checks supportsOnDeviceRecognition before setting requiresOnDeviceRecognition
|
|
30
|
-
"Accounts for
|
|
31
|
-
"Stops
|
|
24
|
+
"Requires both NSSpeechRecognitionUsageDescription and NSMicrophoneUsageDescription",
|
|
25
|
+
"Requests speech and microphone permission before the session and engine start",
|
|
26
|
+
"Handles availability changes through the recognizer delegate",
|
|
27
|
+
"Checks supportsOnDeviceRecognition before setting requiresOnDeviceRecognition, with a fallback",
|
|
28
|
+
"Accounts for the task duration limit on multi-minute notes",
|
|
29
|
+
"Stops the engine, removes the tap, calls endAudio() and cancels the task"
|
|
32
30
|
]
|
|
33
31
|
},
|
|
34
32
|
{
|
|
35
33
|
"id": 2,
|
|
36
34
|
"name": "speech-boundary-routing",
|
|
37
|
-
"prompt": "
|
|
38
|
-
"expected_output": "
|
|
39
|
-
"files": [],
|
|
35
|
+
"prompt": "Our meeting app records audio, shows a live transcript, detects which language each speaker used, rates the mood of the meeting, translates the transcript, plays recordings back with captions, and writes an AI summary. Which pieces does the speech skill own?",
|
|
36
|
+
"expected_output": "Keeps audio capture, speech and microphone permission, transcription and result handling in the speech skill. Sends language detection, mood or sentiment, embeddings and translation of the transcript to natural-language, playback with captions and AVPlayer to avkit, and Apple Intelligence or Foundation Models summaries to apple-on-device-ai. Does not blur NaturalLanguage and Speech together.",
|
|
40
37
|
"assertions": [
|
|
41
|
-
"Keeps
|
|
42
|
-
"
|
|
43
|
-
"
|
|
44
|
-
"
|
|
45
|
-
"
|
|
38
|
+
"Keeps capture, authorization, transcription and result handling in this skill",
|
|
39
|
+
"Sends language detection, sentiment, embeddings and translation to natural-language",
|
|
40
|
+
"Sends playback, captions and AVPlayer work to avkit",
|
|
41
|
+
"Sends generated summaries to apple-on-device-ai",
|
|
42
|
+
"Keeps the NaturalLanguage and Speech frameworks distinct"
|
|
46
43
|
]
|
|
47
44
|
}
|
|
48
45
|
]
|
package/pipeline/skills/shared/external/speech-recognition/references/speechanalyzer-patterns.md
CHANGED
|
@@ -1,171 +1,179 @@
|
|
|
1
|
-
# SpeechAnalyzer
|
|
1
|
+
# SpeechAnalyzer patterns (iOS 26+)
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
or `AssetInventory`.
|
|
3
|
+
Companion to the `speech-recognition` skill ([../SKILL.md](../SKILL.md)).
|
|
4
|
+
Every API here needs iOS 26 or later.
|
|
6
5
|
|
|
7
|
-
##
|
|
8
|
-
|
|
9
|
-
- [Choosing Modules](#choosing-modules)
|
|
10
|
-
- [Preparing Assets](#preparing-assets)
|
|
11
|
-
- [Transcribing Files](#transcribing-files)
|
|
12
|
-
- [Live Audio](#live-audio)
|
|
13
|
-
- [Handling Results](#handling-results)
|
|
14
|
-
- [Finishing Sessions](#finishing-sessions)
|
|
15
|
-
- [References](#references)
|
|
16
|
-
|
|
17
|
-
## Choosing Modules
|
|
18
|
-
|
|
19
|
-
Prefer `SpeechTranscriber` for the newer general-purpose on-device model.
|
|
20
|
-
Before building UI around it, check both device and locale support:
|
|
6
|
+
## Picking modules
|
|
21
7
|
|
|
22
8
|
```swift
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
9
|
+
import Speech
|
|
10
|
+
|
|
11
|
+
func makeModule(for locale: Locale) async -> (any SpeechModule)? {
|
|
12
|
+
if SpeechTranscriber.isAvailable,
|
|
13
|
+
let matched = await SpeechTranscriber.supportedLocale(equivalentTo: locale) {
|
|
14
|
+
return SpeechTranscriber(locale: matched, preset: .progressiveTranscription)
|
|
15
|
+
}
|
|
16
|
+
if let matched = await DictationTranscriber.supportedLocale(equivalentTo: locale) {
|
|
17
|
+
return DictationTranscriber(locale: matched, preset: .progressiveLongDictation)
|
|
18
|
+
}
|
|
19
|
+
return nil // disable the feature for this device and locale
|
|
28
20
|
}
|
|
29
21
|
```
|
|
30
22
|
|
|
31
|
-
|
|
23
|
+
### SpeechTranscriber presets
|
|
32
24
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
25
|
+
| Preset | Use it for |
|
|
26
|
+
|---|---|
|
|
27
|
+
| `.transcription` | Plain, accurate text |
|
|
28
|
+
| `.transcriptionWithAlternatives` | Editing UI that offers other candidate words |
|
|
29
|
+
| `.timeIndexedTranscriptionWithAlternatives` | Alternatives plus timing for each span |
|
|
30
|
+
| `.progressiveTranscription` | Low-latency live captions |
|
|
31
|
+
| `.timeIndexedProgressiveTranscription` | Live captions that also carry time ranges |
|
|
38
32
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
dropping speech-like audio.
|
|
33
|
+
`SpeechDetector` never works alone; attach it next to a transcriber, and only
|
|
34
|
+
when skipping silence saves enough to justify occasionally dropping audio
|
|
35
|
+
that sounded like noise.
|
|
43
36
|
|
|
44
|
-
##
|
|
37
|
+
## Model assets
|
|
45
38
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
module configuration it plans to use.
|
|
39
|
+
Speech models are not in your bundle. The system downloads and shares them
|
|
40
|
+
between apps, and your app asks for the ones its configuration needs:
|
|
49
41
|
|
|
50
42
|
```swift
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
) {
|
|
56
|
-
try await request.downloadAndInstall()
|
|
43
|
+
func ensureAssets(for transcriber: SpeechTranscriber) async throws {
|
|
44
|
+
if let install = try await AssetInventory.assetInstallationRequest(supporting: [transcriber]) {
|
|
45
|
+
try await install.downloadAndInstall()
|
|
46
|
+
}
|
|
57
47
|
}
|
|
58
48
|
```
|
|
59
49
|
|
|
60
|
-
For language
|
|
61
|
-
`
|
|
62
|
-
|
|
63
|
-
|
|
50
|
+
For a language picker, combine `await SpeechTranscriber.installedLocales`,
|
|
51
|
+
`await SpeechTranscriber.supportedLocales` and
|
|
52
|
+
`AssetInventory.status(forModules:)`, which reports `.installed`,
|
|
53
|
+
`.downloading`, `.supported` (can be downloaded) or `.unsupported`.
|
|
64
54
|
|
|
65
|
-
|
|
55
|
+
An app can reserve only a limited number of locales. Give one back with
|
|
56
|
+
`AssetInventory.release(reservedLocale:)` when the user drops a language.
|
|
66
57
|
|
|
67
|
-
|
|
68
|
-
the session after the file is consumed.
|
|
58
|
+
## Transcribing a file
|
|
69
59
|
|
|
70
|
-
|
|
71
|
-
func transcribeFile(at url: URL, locale: Locale) async throws -> AttributedString {
|
|
72
|
-
guard let supportedLocale = SpeechTranscriber.supportedLocale(equivalentTo: locale) else {
|
|
73
|
-
throw SpeechError.unsupportedLocale
|
|
74
|
-
}
|
|
60
|
+
The analyzer converts the file's audio format on its own.
|
|
75
61
|
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
)
|
|
62
|
+
```swift
|
|
63
|
+
import AVFoundation
|
|
64
|
+
import Speech
|
|
80
65
|
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
try await request.downloadAndInstall()
|
|
66
|
+
func transcript(of recording: URL, locale: Locale) async throws -> AttributedString {
|
|
67
|
+
guard let matched = await SpeechTranscriber.supportedLocale(equivalentTo: locale) else {
|
|
68
|
+
throw CocoaError(.featureUnsupported)
|
|
85
69
|
}
|
|
70
|
+
let transcriber = SpeechTranscriber(locale: matched, preset: .transcription)
|
|
71
|
+
try await ensureAssets(for: transcriber)
|
|
86
72
|
|
|
87
73
|
let analyzer = SpeechAnalyzer(modules: [transcriber])
|
|
88
|
-
async let
|
|
89
|
-
text
|
|
90
|
-
text.append(result.text)
|
|
74
|
+
async let collected = transcriber.results.reduce(into: AttributedString()) { text, piece in
|
|
75
|
+
text.append(piece.text)
|
|
91
76
|
}
|
|
92
77
|
|
|
93
|
-
let
|
|
94
|
-
let
|
|
95
|
-
|
|
96
|
-
try await analyzer.finalizeAndFinish(through: lastSampleTime)
|
|
78
|
+
let audio = try AVAudioFile(forReading: recording)
|
|
79
|
+
if let lastSample = try await analyzer.analyzeSequence(from: audio) {
|
|
80
|
+
try await analyzer.finalizeAndFinish(through: lastSample)
|
|
97
81
|
} else {
|
|
98
|
-
|
|
82
|
+
await analyzer.cancelAndFinishNow()
|
|
99
83
|
}
|
|
100
|
-
|
|
101
|
-
return try await transcript
|
|
84
|
+
return try await collected
|
|
102
85
|
}
|
|
103
86
|
```
|
|
104
87
|
|
|
105
|
-
## Live
|
|
106
|
-
|
|
107
|
-
For live audio, create an `AsyncStream<AnalyzerInput>`, convert microphone
|
|
108
|
-
buffers to the analyzer-compatible format, yield them, and consume results in a
|
|
109
|
-
separate task.
|
|
88
|
+
## Live audio
|
|
110
89
|
|
|
111
90
|
```swift
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
91
|
+
import AVFoundation
|
|
92
|
+
import Speech
|
|
93
|
+
|
|
94
|
+
@MainActor
|
|
95
|
+
final class LiveTranscript {
|
|
96
|
+
private(set) var settled = AttributedString()
|
|
97
|
+
private(set) var pending = AttributedString()
|
|
98
|
+
private var analyzer: SpeechAnalyzer?
|
|
99
|
+
private var feed: AsyncStream<AnalyzerInput>.Continuation?
|
|
100
|
+
private var reader: Task<Void, Never>?
|
|
101
|
+
|
|
102
|
+
func start(locale: Locale) async throws -> AVAudioFormat? {
|
|
103
|
+
let transcriber = SpeechTranscriber(locale: locale, preset: .timeIndexedProgressiveTranscription)
|
|
104
|
+
try await ensureAssets(for: transcriber)
|
|
105
|
+
let analyzer = SpeechAnalyzer(modules: [transcriber])
|
|
106
|
+
let format = await SpeechAnalyzer.bestAvailableAudioFormat(compatibleWith: [transcriber])
|
|
107
|
+
|
|
108
|
+
let (inputs, feed) = AsyncStream.makeStream(of: AnalyzerInput.self)
|
|
109
|
+
self.feed = feed
|
|
110
|
+
self.analyzer = analyzer
|
|
111
|
+
|
|
112
|
+
reader = Task { [weak self] in
|
|
113
|
+
do {
|
|
114
|
+
for try await piece in transcriber.results {
|
|
115
|
+
self?.absorb(piece)
|
|
116
|
+
}
|
|
117
|
+
} catch {
|
|
118
|
+
// surface the error in the UI
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
try await analyzer.start(inputSequence: inputs)
|
|
122
|
+
return format // convert microphone buffers to this before yielding
|
|
123
|
+
}
|
|
131
124
|
|
|
132
|
-
|
|
133
|
-
|
|
125
|
+
func push(_ converted: AVAudioPCMBuffer) {
|
|
126
|
+
feed?.yield(AnalyzerInput(buffer: converted))
|
|
127
|
+
}
|
|
134
128
|
|
|
135
|
-
|
|
136
|
-
|
|
129
|
+
func stop() async throws {
|
|
130
|
+
feed?.finish()
|
|
131
|
+
try await analyzer?.finalizeAndFinishThroughEndOfInput()
|
|
132
|
+
await reader?.value
|
|
133
|
+
}
|
|
137
134
|
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
135
|
+
private func absorb(_ piece: SpeechTranscriber.Result) {
|
|
136
|
+
if piece.isFinal {
|
|
137
|
+
settled.append(piece.text)
|
|
138
|
+
pending = AttributedString()
|
|
139
|
+
} else {
|
|
140
|
+
pending = piece.text
|
|
141
|
+
}
|
|
145
142
|
}
|
|
146
143
|
}
|
|
147
144
|
```
|
|
148
145
|
|
|
149
|
-
|
|
146
|
+
Convert tap buffers with `AVAudioConverter` (or an audio pipeline you
|
|
147
|
+
already have) into the format returned by `bestAvailableAudioFormat`. Do not
|
|
148
|
+
feed raw input-node buffers unless their format already matches.
|
|
149
|
+
|
|
150
|
+
## Reading results
|
|
150
151
|
|
|
151
|
-
|
|
152
|
-
|
|
152
|
+
`SpeechTranscriber.Result.text` is an `AttributedString`. With a
|
|
153
|
+
time-indexed preset its runs carry audio time-range attributes, which is how
|
|
154
|
+
playback can highlight the word being spoken. Progressive presets deliver
|
|
155
|
+
volatile results that a later final result replaces, so keep the volatile
|
|
156
|
+
text in its own state, as `pending` does above.
|
|
153
157
|
|
|
154
|
-
|
|
158
|
+
## Ending a session
|
|
155
159
|
|
|
156
|
-
-
|
|
157
|
-
|
|
158
|
-
- `
|
|
160
|
+
- An analyzer processes one input sequence at a time, and finishing your
|
|
161
|
+
input stream does not end the session.
|
|
162
|
+
- After `analyzeSequence(_:)` returns the last sample time, call
|
|
163
|
+
`finalizeAndFinish(through:)`.
|
|
164
|
+
- After starting with `start(inputSequence:)`, call
|
|
165
|
+
`finalizeAndFinishThroughEndOfInput()` once input is complete.
|
|
166
|
+
- `cancelAndFinishNow()` stops immediately and discards pending work.
|
|
159
167
|
|
|
160
|
-
|
|
161
|
-
|
|
168
|
+
Once finished, the module result streams end and the analyzer refuses most
|
|
169
|
+
further calls. Create a new analyzer for the next session.
|
|
162
170
|
|
|
163
|
-
##
|
|
171
|
+
## Further reading
|
|
164
172
|
|
|
165
|
-
-
|
|
166
|
-
-
|
|
167
|
-
-
|
|
168
|
-
-
|
|
169
|
-
-
|
|
170
|
-
-
|
|
171
|
-
-
|
|
173
|
+
- https://developer.apple.com/documentation/speech/speechanalyzer
|
|
174
|
+
- https://developer.apple.com/documentation/speech/speechtranscriber
|
|
175
|
+
- https://developer.apple.com/documentation/speech/speechtranscriber/preset
|
|
176
|
+
- https://developer.apple.com/documentation/speech/dictationtranscriber
|
|
177
|
+
- https://developer.apple.com/documentation/speech/speechdetector
|
|
178
|
+
- https://developer.apple.com/documentation/speech/assetinventory
|
|
179
|
+
- WWDC25 session 277 on SpeechAnalyzer
|