@mmerterden/multi-agent-pipeline 20.7.0 → 20.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +9 -0
- package/LICENSE +0 -10
- package/docs/facts.json +1 -1
- package/manifest.json +266 -267
- package/package.json +2 -2
- package/pipeline/scripts/_notices.mjs +1 -1
- package/pipeline/skills/.skill-manifest.json +68 -68
- package/pipeline/skills/shared/README.md +70 -70
- package/pipeline/skills/shared/external/alarmkit/SKILL.md +373 -381
- package/pipeline/skills/shared/external/alarmkit/evals/evals.json +23 -18
- package/pipeline/skills/shared/external/alarmkit/references/alarmkit-patterns.md +328 -378
- package/pipeline/skills/shared/external/app-clips/SKILL.md +260 -160
- package/pipeline/skills/shared/external/app-clips/evals/evals.json +27 -27
- package/pipeline/skills/shared/external/app-clips/references/data-handoff-notifications-location.md +150 -83
- package/pipeline/skills/shared/external/app-clips/references/routing-and-experiences.md +135 -83
- package/pipeline/skills/shared/external/app-clips/references/size-capabilities-and-promotion.md +143 -85
- package/pipeline/skills/shared/external/app-intents/SKILL.md +302 -304
- package/pipeline/skills/shared/external/app-intents/evals/evals.json +21 -21
- package/pipeline/skills/shared/external/app-intents/references/appintents-advanced.md +594 -894
- package/pipeline/skills/shared/external/app-store-optimization/SKILL.md +339 -277
- package/pipeline/skills/shared/external/app-store-optimization/evals/evals.json +27 -23
- package/pipeline/skills/shared/external/app-store-optimization/references/keyword-research-methodology.md +105 -122
- package/pipeline/skills/shared/external/app-store-optimization/references/product-page-variants.md +143 -166
- package/pipeline/skills/shared/external/app-store-review/SKILL.md +307 -326
- package/pipeline/skills/shared/external/app-store-review/evals/evals.json +21 -21
- package/pipeline/skills/shared/external/app-store-review/references/privacy-manifest.md +105 -67
- package/pipeline/skills/shared/external/app-store-review/references/review-checklists.md +114 -101
- package/pipeline/skills/shared/external/apple-on-device-ai/SKILL.md +333 -360
- package/pipeline/skills/shared/external/apple-on-device-ai/evals/evals.json +24 -27
- package/pipeline/skills/shared/external/apple-on-device-ai/references/coreml-conversion.md +215 -322
- package/pipeline/skills/shared/external/apple-on-device-ai/references/coreml-optimization.md +161 -256
- package/pipeline/skills/shared/external/apple-on-device-ai/references/foundation-models.md +277 -387
- package/pipeline/skills/shared/external/apple-on-device-ai/references/mlx-swift.md +196 -210
- package/pipeline/skills/shared/external/authentication/SKILL.md +265 -381
- package/pipeline/skills/shared/external/authentication/evals/evals.json +25 -25
- package/pipeline/skills/shared/external/authentication/references/keychain-biometric.md +133 -178
- package/pipeline/skills/shared/external/authentication/references/passkeys.md +111 -147
- package/pipeline/skills/shared/external/avkit/SKILL.md +267 -364
- package/pipeline/skills/shared/external/avkit/evals/evals.json +26 -26
- package/pipeline/skills/shared/external/avkit/references/avkit-patterns.md +375 -493
- package/pipeline/skills/shared/external/background-processing/SKILL.md +270 -382
- package/pipeline/skills/shared/external/background-processing/evals/evals.json +22 -22
- package/pipeline/skills/shared/external/background-processing/references/background-task-patterns.md +169 -317
- package/pipeline/skills/shared/external/callkit-voip/SKILL.md +290 -371
- package/pipeline/skills/shared/external/callkit-voip/evals/evals.json +24 -24
- package/pipeline/skills/shared/external/callkit-voip/references/callkit-patterns.md +175 -343
- package/pipeline/skills/shared/external/cloudkit-sync/SKILL.md +292 -381
- package/pipeline/skills/shared/external/cloudkit-sync/evals/evals.json +33 -30
- package/pipeline/skills/shared/external/cloudkit-sync/references/cloudkit-patterns.md +227 -355
- package/pipeline/skills/shared/external/contacts-framework/SKILL.md +197 -346
- package/pipeline/skills/shared/external/contacts-framework/evals/evals.json +19 -21
- package/pipeline/skills/shared/external/contacts-framework/references/contacts-patterns.md +169 -308
- package/pipeline/skills/shared/external/core-bluetooth/SKILL.md +226 -376
- package/pipeline/skills/shared/external/core-bluetooth/evals/evals.json +25 -22
- package/pipeline/skills/shared/external/core-bluetooth/references/ble-patterns.md +257 -337
- package/pipeline/skills/shared/external/core-data/SKILL.md +292 -368
- package/pipeline/skills/shared/external/core-data/evals/evals.json +30 -27
- package/pipeline/skills/shared/external/core-motion/SKILL.md +235 -324
- package/pipeline/skills/shared/external/core-motion/evals/evals.json +31 -27
- package/pipeline/skills/shared/external/core-motion/references/motion-patterns.md +210 -310
- package/pipeline/skills/shared/external/core-nfc/SKILL.md +292 -366
- package/pipeline/skills/shared/external/core-nfc/evals/evals.json +22 -24
- package/pipeline/skills/shared/external/core-nfc/references/nfc-patterns.md +233 -329
- package/pipeline/skills/shared/external/coreml/SKILL.md +323 -367
- package/pipeline/skills/shared/external/coreml/evals/evals.json +24 -21
- package/pipeline/skills/shared/external/coreml/references/coreml-swift-integration.md +562 -565
- package/pipeline/skills/shared/external/cryptokit/SKILL.md +253 -394
- package/pipeline/skills/shared/external/cryptokit/evals/evals.json +20 -18
- package/pipeline/skills/shared/external/cryptokit/references/cryptokit-patterns.md +299 -488
- package/pipeline/skills/shared/external/debugging-instruments/SKILL.md +270 -323
- package/pipeline/skills/shared/external/debugging-instruments/evals/evals.json +27 -30
- package/pipeline/skills/shared/external/debugging-instruments/references/instruments-guide.md +167 -315
- package/pipeline/skills/shared/external/debugging-instruments/references/lldb-patterns.md +140 -193
- package/pipeline/skills/shared/external/device-integrity/SKILL.md +230 -353
- package/pipeline/skills/shared/external/device-integrity/evals/evals.json +25 -21
- package/pipeline/skills/shared/external/device-integrity/references/device-integrity-patterns.md +159 -197
- package/pipeline/skills/shared/external/energykit/SKILL.md +225 -392
- package/pipeline/skills/shared/external/energykit/evals/evals.json +29 -28
- package/pipeline/skills/shared/external/energykit/references/energykit-patterns.md +174 -470
- package/pipeline/skills/shared/external/eventkit-calendar/SKILL.md +261 -383
- package/pipeline/skills/shared/external/eventkit-calendar/evals/evals.json +25 -22
- package/pipeline/skills/shared/external/eventkit-calendar/references/eventkit-patterns.md +165 -268
- package/pipeline/skills/shared/external/healthkit/SKILL.md +252 -303
- package/pipeline/skills/shared/external/healthkit/evals/evals.json +24 -23
- package/pipeline/skills/shared/external/healthkit/references/healthkit-patterns.md +369 -523
- package/pipeline/skills/shared/external/homekit-matter/SKILL.md +233 -348
- package/pipeline/skills/shared/external/homekit-matter/evals/evals.json +27 -22
- package/pipeline/skills/shared/external/homekit-matter/references/matter-commissioning.md +199 -305
- package/pipeline/skills/shared/external/ios-accessibility/SKILL.md +368 -340
- package/pipeline/skills/shared/external/ios-accessibility/evals/evals.json +28 -27
- package/pipeline/skills/shared/external/ios-accessibility/references/a11y-patterns.md +314 -260
- package/pipeline/skills/shared/external/ios-accessibility/references/media-accessibility.md +97 -67
- package/pipeline/skills/shared/external/ios-accessibility/references/nutrition-labels.md +165 -101
- package/pipeline/skills/shared/external/ios-localization/SKILL.md +258 -371
- package/pipeline/skills/shared/external/ios-localization/evals/evals.json +23 -23
- package/pipeline/skills/shared/external/ios-localization/references/formatstyle-locale.md +283 -491
- package/pipeline/skills/shared/external/ios-localization/references/string-catalogs.md +313 -440
- package/pipeline/skills/shared/external/ios-networking/SKILL.md +265 -341
- package/pipeline/skills/shared/external/ios-networking/evals/evals.json +24 -24
- package/pipeline/skills/shared/external/ios-networking/references/background-websocket.md +425 -652
- package/pipeline/skills/shared/external/ios-networking/references/file-storage-patterns.md +143 -285
- package/pipeline/skills/shared/external/ios-networking/references/lightweight-clients.md +93 -53
- package/pipeline/skills/shared/external/ios-networking/references/network-framework.md +231 -456
- package/pipeline/skills/shared/external/ios-networking/references/urlsession-patterns.md +517 -784
- package/pipeline/skills/shared/external/ios-simulator/SKILL.md +265 -393
- package/pipeline/skills/shared/external/ios-simulator/evals/evals.json +21 -21
- package/pipeline/skills/shared/external/ios-simulator/references/simctl-commands.md +177 -270
- package/pipeline/skills/shared/external/live-activities/SKILL.md +318 -360
- package/pipeline/skills/shared/external/live-activities/evals/evals.json +21 -21
- package/pipeline/skills/shared/external/live-activities/references/activitykit-patterns.md +478 -710
- package/pipeline/skills/shared/external/mapkit-location/SKILL.md +295 -267
- package/pipeline/skills/shared/external/mapkit-location/evals/evals.json +28 -24
- package/pipeline/skills/shared/external/mapkit-location/references/mapkit-corelocation-patterns.md +378 -532
- package/pipeline/skills/shared/external/mapkit-location/references/mapkit-patterns.md +397 -499
- package/pipeline/skills/shared/external/metrickit-diagnostics/SKILL.md +165 -348
- package/pipeline/skills/shared/external/metrickit-diagnostics/evals/evals.json +26 -23
- package/pipeline/skills/shared/external/metrickit-diagnostics/references/metrickit-patterns.md +123 -130
- package/pipeline/skills/shared/external/musickit-audio/SKILL.md +189 -315
- package/pipeline/skills/shared/external/musickit-audio/evals/evals.json +22 -21
- package/pipeline/skills/shared/external/musickit-audio/references/musickit-patterns.md +181 -270
- package/pipeline/skills/shared/external/natural-language/SKILL.md +188 -340
- package/pipeline/skills/shared/external/natural-language/evals/evals.json +21 -21
- package/pipeline/skills/shared/external/natural-language/references/translation-patterns.md +171 -225
- package/pipeline/skills/shared/external/passkit-wallet/SKILL.md +258 -392
- package/pipeline/skills/shared/external/passkit-wallet/evals/evals.json +30 -29
- package/pipeline/skills/shared/external/passkit-wallet/references/wallet-passes.md +164 -231
- package/pipeline/skills/shared/external/pdfkit/SKILL.md +312 -344
- package/pipeline/skills/shared/external/pdfkit/evals/evals.json +19 -19
- package/pipeline/skills/shared/external/pdfkit/references/pdfkit-patterns.md +413 -624
- package/pipeline/skills/shared/external/pencilkit-drawing/SKILL.md +242 -358
- package/pipeline/skills/shared/external/pencilkit-drawing/evals/evals.json +25 -21
- package/pipeline/skills/shared/external/pencilkit-drawing/references/pencilkit-patterns.md +161 -226
- package/pipeline/skills/shared/external/permissionkit/SKILL.md +282 -400
- package/pipeline/skills/shared/external/permissionkit/evals/evals.json +27 -30
- package/pipeline/skills/shared/external/permissionkit/references/permissionkit-patterns.md +237 -350
- package/pipeline/skills/shared/external/photos-camera-media/SKILL.md +276 -325
- package/pipeline/skills/shared/external/photos-camera-media/references/av-playback.md +299 -545
- package/pipeline/skills/shared/external/photos-camera-media/references/camera-capture.md +344 -588
- package/pipeline/skills/shared/external/photos-camera-media/references/image-loading-caching.md +316 -660
- package/pipeline/skills/shared/external/photos-camera-media/references/photokit-patterns.md +270 -416
- package/pipeline/skills/shared/external/push-notifications/SKILL.md +312 -340
- package/pipeline/skills/shared/external/push-notifications/evals/evals.json +27 -26
- package/pipeline/skills/shared/external/push-notifications/references/notification-patterns.md +328 -485
- package/pipeline/skills/shared/external/push-notifications/references/rich-notifications.md +327 -560
- package/pipeline/skills/shared/external/realitykit-ar/SKILL.md +218 -410
- package/pipeline/skills/shared/external/realitykit-ar/evals/evals.json +24 -27
- package/pipeline/skills/shared/external/realitykit-ar/references/realitykit-patterns.md +221 -348
- package/pipeline/skills/shared/external/shareplay-activities/SKILL.md +222 -393
- package/pipeline/skills/shared/external/shareplay-activities/evals/evals.json +23 -24
- package/pipeline/skills/shared/external/shareplay-activities/references/shareplay-patterns.md +280 -420
- package/pipeline/skills/shared/external/speech-recognition/SKILL.md +217 -421
- package/pipeline/skills/shared/external/speech-recognition/evals/evals.json +23 -26
- package/pipeline/skills/shared/external/speech-recognition/references/speechanalyzer-patterns.md +133 -125
- package/pipeline/skills/shared/external/storekit/SKILL.md +228 -204
- package/pipeline/skills/shared/external/storekit/evals/evals.json +27 -24
- package/pipeline/skills/shared/external/storekit/references/app-review-guidelines.md +98 -109
- package/pipeline/skills/shared/external/storekit/references/core-patterns.md +298 -242
- package/pipeline/skills/shared/external/storekit/references/storekit-advanced.md +356 -649
- package/pipeline/skills/shared/external/swift-api-design-guidelines/SKILL.md +274 -399
- package/pipeline/skills/shared/external/swift-api-design-guidelines/evals/evals.json +22 -24
- package/pipeline/skills/shared/external/swift-api-design-guidelines/references/argument-labels-and-parameters.md +107 -108
- package/pipeline/skills/shared/external/swift-api-design-guidelines/references/conventions-and-special-rules.md +93 -165
- package/pipeline/skills/shared/external/swift-api-design-guidelines/references/naming-and-clarity.md +99 -137
- package/pipeline/skills/shared/external/swift-api-design-guidelines/references/side-effects-and-mutating-pairs.md +77 -120
- package/pipeline/skills/shared/external/swift-architecture/SKILL.md +334 -350
- package/pipeline/skills/shared/external/swift-architecture/evals/evals.json +22 -22
- package/pipeline/skills/shared/external/swift-charts/SKILL.md +208 -394
- package/pipeline/skills/shared/external/swift-charts/evals/evals.json +27 -30
- package/pipeline/skills/shared/external/swift-charts/references/charts-patterns.md +351 -762
- package/pipeline/skills/shared/external/swift-codable/SKILL.md +339 -343
- package/pipeline/skills/shared/external/swift-codable/evals/evals.json +20 -20
- package/pipeline/skills/shared/external/swift-concurrency/SKILL.md +303 -351
- package/pipeline/skills/shared/external/swift-concurrency/evals/evals.json +27 -24
- package/pipeline/skills/shared/external/swift-concurrency/references/approachable-concurrency.md +65 -80
- package/pipeline/skills/shared/external/swift-concurrency/references/async-algorithms.md +48 -84
- package/pipeline/skills/shared/external/swift-concurrency/references/bridging-interop.md +134 -79
- package/pipeline/skills/shared/external/swift-concurrency/references/concurrency-patterns.md +145 -167
- package/pipeline/skills/shared/external/swift-concurrency/references/diagnostics.md +62 -50
- package/pipeline/skills/shared/external/swift-concurrency/references/swiftui-concurrency.md +92 -121
- package/pipeline/skills/shared/external/swift-concurrency/references/synchronization-primitives.md +177 -241
- package/pipeline/skills/shared/external/swift-formatstyle/SKILL.md +258 -234
- package/pipeline/skills/shared/external/swift-language/SKILL.md +342 -382
- package/pipeline/skills/shared/external/swift-language/evals/evals.json +24 -27
- package/pipeline/skills/shared/external/swift-language/references/swift-attributes-interop.md +79 -56
- package/pipeline/skills/shared/external/swift-language/references/swift-patterns-extended.md +297 -340
- package/pipeline/skills/shared/external/swift-security/SKILL.md +180 -161
- package/pipeline/skills/shared/external/swift-security/evals/evals.json +25 -25
- package/pipeline/skills/shared/external/swift-security/references/biometric-authentication.md +314 -469
- package/pipeline/skills/shared/external/swift-security/references/certificate-trust.md +408 -476
- package/pipeline/skills/shared/external/swift-security/references/common-anti-patterns.md +260 -530
- package/pipeline/skills/shared/external/swift-security/references/compliance-owasp-mapping.md +270 -477
- package/pipeline/skills/shared/external/swift-security/references/credential-storage-patterns.md +573 -571
- package/pipeline/skills/shared/external/swift-security/references/cryptokit-public-key.md +370 -441
- package/pipeline/skills/shared/external/swift-security/references/cryptokit-symmetric.md +332 -433
- package/pipeline/skills/shared/external/swift-security/references/keychain-access-control.md +346 -468
- package/pipeline/skills/shared/external/swift-security/references/keychain-fundamentals.md +352 -472
- package/pipeline/skills/shared/external/swift-security/references/keychain-item-classes.md +431 -432
- package/pipeline/skills/shared/external/swift-security/references/keychain-sharing.md +328 -425
- package/pipeline/skills/shared/external/swift-security/references/migration-legacy-stores.md +341 -579
- package/pipeline/skills/shared/external/swift-security/references/secure-enclave.md +396 -457
- package/pipeline/skills/shared/external/swift-security/references/testing-security-code.md +354 -614
- package/pipeline/skills/shared/external/swift-testing/SKILL.md +188 -175
- package/pipeline/skills/shared/external/swift-testing/evals/evals.json +26 -24
- package/pipeline/skills/shared/external/swift-testing/references/testing-advanced.md +80 -84
- package/pipeline/skills/shared/external/swift-testing/references/testing-patterns.md +317 -433
- package/pipeline/skills/shared/external/swiftdata/SKILL.md +392 -256
- package/pipeline/skills/shared/external/swiftdata/evals/evals.json +24 -24
- package/pipeline/skills/shared/external/swiftdata/references/core-data-coexistence.md +206 -402
- package/pipeline/skills/shared/external/swiftdata/references/indexing.md +59 -52
- package/pipeline/skills/shared/external/swiftdata/references/predicate-pitfalls.md +57 -33
- package/pipeline/skills/shared/external/swiftdata/references/swiftdata-advanced.md +354 -747
- package/pipeline/skills/shared/external/swiftdata/references/swiftdata-queries.md +300 -508
- package/pipeline/skills/shared/external/swiftlint/SKILL.md +175 -226
- package/pipeline/skills/shared/external/swiftlint/references/adoption-and-configuration.md +141 -208
- package/pipeline/skills/shared/external/swiftlint/references/custom-rules-and-analyze.md +100 -109
- package/pipeline/skills/shared/external/swiftlint/references/plugins-run-scripts-and-integrations.md +159 -179
- package/pipeline/skills/shared/external/swiftlint/references/rule-reference.md +383 -18
- package/pipeline/skills/shared/external/swiftlint/references/rules-suppressions-and-baselines.md +143 -229
- package/pipeline/skills/shared/external/swiftui-animation/SKILL.md +283 -366
- package/pipeline/skills/shared/external/swiftui-animation/references/animation-advanced.md +396 -608
- package/pipeline/skills/shared/external/swiftui-animation/references/core-animation-bridge.md +336 -385
- package/pipeline/skills/shared/external/swiftui-gestures/SKILL.md +239 -349
- package/pipeline/skills/shared/external/swiftui-gestures/references/gesture-patterns.md +228 -310
- package/pipeline/skills/shared/external/swiftui-layout-components/SKILL.md +260 -249
- package/pipeline/skills/shared/external/swiftui-layout-components/references/form.md +92 -74
- package/pipeline/skills/shared/external/swiftui-layout-components/references/grids.md +112 -177
- package/pipeline/skills/shared/external/swiftui-layout-components/references/list.md +61 -64
- package/pipeline/skills/shared/external/swiftui-layout-components/references/scrollview.md +94 -134
- package/pipeline/skills/shared/external/swiftui-liquid-glass/SKILL.md +193 -225
- package/pipeline/skills/shared/external/swiftui-liquid-glass/references/liquid-glass.md +173 -327
- package/pipeline/skills/shared/external/swiftui-navigation/SKILL.md +193 -168
- package/pipeline/skills/shared/external/swiftui-navigation/references/deeplinks.md +127 -150
- package/pipeline/skills/shared/external/swiftui-navigation/references/navigationstack.md +132 -133
- package/pipeline/skills/shared/external/swiftui-navigation/references/sheets.md +152 -117
- package/pipeline/skills/shared/external/swiftui-navigation/references/tabview.md +106 -140
- package/pipeline/skills/shared/external/swiftui-patterns/SKILL.md +316 -252
- package/pipeline/skills/shared/external/swiftui-patterns/references/architecture-patterns.md +341 -332
- package/pipeline/skills/shared/external/swiftui-patterns/references/deprecated-migration.md +547 -854
- package/pipeline/skills/shared/external/swiftui-patterns/references/design-polish.md +485 -537
- package/pipeline/skills/shared/external/swiftui-patterns/references/platform-and-sharing.md +417 -499
- package/pipeline/skills/shared/external/swiftui-performance/SKILL.md +213 -376
- package/pipeline/skills/shared/external/swiftui-performance/references/demystify-swiftui-performance-wwdc23.md +86 -175
- package/pipeline/skills/shared/external/swiftui-performance/references/optimizing-swiftui-performance-instruments.md +89 -195
- package/pipeline/skills/shared/external/swiftui-performance/references/understanding-hangs-in-your-app.md +95 -182
- package/pipeline/skills/shared/external/swiftui-performance/references/understanding-improving-swiftui-performance.md +71 -149
- package/pipeline/skills/shared/external/swiftui-performance/references/wwdc-session-sources.md +21 -27
- package/pipeline/skills/shared/external/swiftui-uikit-interop/SKILL.md +303 -295
- package/pipeline/skills/shared/external/swiftui-uikit-interop/references/hosting-migration.md +204 -387
- package/pipeline/skills/shared/external/swiftui-uikit-interop/references/representable-recipes.md +469 -683
- package/pipeline/skills/shared/external/swiftui-webkit/SKILL.md +140 -186
- package/pipeline/skills/shared/external/swiftui-webkit/references/loading-and-observation.md +75 -86
- package/pipeline/skills/shared/external/swiftui-webkit/references/local-content-and-custom-schemes.md +63 -60
- package/pipeline/skills/shared/external/swiftui-webkit/references/migration-and-fallbacks.md +69 -137
- package/pipeline/skills/shared/external/swiftui-webkit/references/navigation-and-javascript.md +95 -67
- package/pipeline/skills/shared/external/tipkit/SKILL.md +220 -335
- package/pipeline/skills/shared/external/tipkit/references/tipkit-patterns.md +356 -494
- package/pipeline/skills/shared/external/vision-framework/SKILL.md +260 -375
- package/pipeline/skills/shared/external/vision-framework/references/vision-requests.md +393 -515
- package/pipeline/skills/shared/external/vision-framework/references/visionkit-scanner.md +363 -539
- package/pipeline/skills/shared/external/weatherkit/SKILL.md +152 -310
- package/pipeline/skills/shared/external/weatherkit/references/weatherkit-patterns.md +288 -407
- package/pipeline/skills/shared/external/widgetkit/SKILL.md +216 -288
- package/pipeline/skills/shared/external/widgetkit/references/widgetkit-advanced.md +414 -719
- package/pipeline/skills/shared/external/NOTICE-swift-ios-skills.md +0 -39
|
@@ -1,169 +1,269 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: app-clips
|
|
3
|
-
description: "
|
|
3
|
+
description: "iOS App Clips: target setup, invocation from NFC, App Clip Codes, QR, Messages, Maps and Safari banners, App Store Connect experiences, size limits and capability constraints, NSUserActivity routing, SKOverlay promotion, App Group or keychain handoff, ephemeral notifications, location confirmation, migration to the full app. Use when building a clip, wiring invocation, configuring experiences or handing off to the full app."
|
|
4
4
|
metadata:
|
|
5
|
-
source:
|
|
5
|
+
source: multi-agent-pipeline
|
|
6
6
|
---
|
|
7
7
|
|
|
8
8
|
# App Clips
|
|
9
9
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
##
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
```text
|
|
85
|
-
App Clip target:
|
|
86
|
-
com.apple.developer.on-demand-install-capable
|
|
87
|
-
com.apple.developer.parent-application-identifiers
|
|
88
|
-
|
|
89
|
-
Full app target:
|
|
90
|
-
com.apple.developer.associated-appclip-app-identifiers
|
|
10
|
+
A clip is a tiny, instantly launched piece of an app. Someone scans a code,
|
|
11
|
+
taps a tag or follows a link, finishes one job, and leaves without installing
|
|
12
|
+
anything. This skill is about building one, sending people to the right
|
|
13
|
+
screen, staying under its limits, and passing them on to the full app.
|
|
14
|
+
Baseline: iOS 26 and Swift 6.3; lower floors are noted where they apply.
|
|
15
|
+
|
|
16
|
+
Deeper material:
|
|
17
|
+
|
|
18
|
+
- `references/routing-and-experiences.md`: URL handling in SwiftUI and UIKit,
|
|
19
|
+
the three kinds of App Store Connect experience, every launch source, Smart
|
|
20
|
+
App Banners, and testing locally.
|
|
21
|
+
- `references/data-handoff-notifications-location.md`: shared containers,
|
|
22
|
+
keychain direction, Sign in with Apple, the 8-hour notification window, and
|
|
23
|
+
proving a physical visit.
|
|
24
|
+
- `references/size-capabilities-and-promotion.md`: an outline for feasibility
|
|
25
|
+
answers, the size tiers, Background Assets, `SKOverlay`, and what the
|
|
26
|
+
platform switches off.
|
|
27
|
+
|
|
28
|
+
## Setting up the target
|
|
29
|
+
|
|
30
|
+
Add the clip through File > New > Target > App Clip, inside the project that
|
|
31
|
+
already holds the full app. Xcode creates the target, gives the full app an
|
|
32
|
+
"Embed App Clip" build phase, and fills in the entitlements that link the two.
|
|
33
|
+
|
|
34
|
+
The clip's bundle identifier must extend the parent's: `org.example.Tickets`
|
|
35
|
+
pairs with `org.example.Tickets.Clip`.
|
|
36
|
+
|
|
37
|
+
When archiving, signing or App Store Connect validation fails, look at the raw
|
|
38
|
+
keys rather than Xcode's display names:
|
|
39
|
+
|
|
40
|
+
| Holder | Raw entitlement |
|
|
41
|
+
|---|---|
|
|
42
|
+
| Clip | `com.apple.developer.on-demand-install-capable` |
|
|
43
|
+
| Clip | `com.apple.developer.parent-application-identifiers` |
|
|
44
|
+
| Full app | `com.apple.developer.associated-appclip-app-identifiers` |
|
|
45
|
+
|
|
46
|
+
Share logic through Swift packages or source files that both targets compile,
|
|
47
|
+
and fence clip-only code with `#if APPCLIP`. Frameworks that only the full app
|
|
48
|
+
uses stay out of the clip's link phase.
|
|
49
|
+
|
|
50
|
+
## Routing an invocation
|
|
51
|
+
|
|
52
|
+
Launches arrive as an `NSUserActivity` whose type is
|
|
53
|
+
`NSUserActivityTypeBrowsingWeb`; its `webpageURL` identifies what to show.
|
|
54
|
+
Keep that parsing in shared code. After installation the full app takes the
|
|
55
|
+
clip's place, and the very same links then open the full app.
|
|
56
|
+
|
|
57
|
+
| UI stack | Where the URL shows up |
|
|
58
|
+
|---|---|
|
|
59
|
+
| SwiftUI | `.onContinueUserActivity(NSUserActivityTypeBrowsingWeb)` |
|
|
60
|
+
| UIKit, first launch | `connectionOptions.userActivities`, read in `scene(_:willConnectTo:options:)` |
|
|
61
|
+
| UIKit, already running | the activity passed to `scene(_:continue:)` |
|
|
62
|
+
|
|
63
|
+
The callback `scene(_:willContinueUserActivityWithType:)` is merely a heads-up that an
|
|
64
|
+
activity is on its way; it has no URL, so nothing should route from it.
|
|
65
|
+
|
|
66
|
+
```swift
|
|
67
|
+
import SwiftUI
|
|
68
|
+
|
|
69
|
+
@main
|
|
70
|
+
struct TicketsClip: App {
|
|
71
|
+
@State private var router = VisitRouter()
|
|
72
|
+
|
|
73
|
+
var body: some Scene {
|
|
74
|
+
WindowGroup {
|
|
75
|
+
VisitScreen(router: router)
|
|
76
|
+
.onContinueUserActivity(NSUserActivityTypeBrowsingWeb) { launch in
|
|
77
|
+
if let link = launch.webpageURL {
|
|
78
|
+
router.open(link)
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
91
84
|
```
|
|
92
85
|
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
-
|
|
122
|
-
|
|
123
|
-
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
-
|
|
129
|
-
|
|
130
|
-
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
-
|
|
143
|
-
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
-
|
|
151
|
-
-
|
|
152
|
-
|
|
153
|
-
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
-
|
|
86
|
+
`VisitRouter` and `VisitScreen` are shared types; see the routing reference.
|
|
87
|
+
|
|
88
|
+
App Store Connect side:
|
|
89
|
+
|
|
90
|
+
- Every clip needs a default experience.
|
|
91
|
+
- Advanced experiences exist for Maps placement, tying the clip to a place,
|
|
92
|
+
App Clip Codes used in production, a card per location, and precise routing
|
|
93
|
+
at a venue.
|
|
94
|
+
- Demo App Clip Codes are generated from the short variant of the demo link.
|
|
95
|
+
- For your own domain, list `appclips:example.com` under Associated Domains in
|
|
96
|
+
the clip and in the full app, and publish an `apple-app-site-association`
|
|
97
|
+
file there that names the clip.
|
|
98
|
+
- A Safari banner's meta tag names the app through `app-id`, the clip through
|
|
99
|
+
`app-clip-bundle-id`, and asks for the card with `app-clip-display=card`.
|
|
100
|
+
`app-argument` is defined for full-app banners, so clip routing cannot
|
|
101
|
+
depend on it.
|
|
102
|
+
|
|
103
|
+
## Size and capability decisions
|
|
104
|
+
|
|
105
|
+
Size:
|
|
106
|
+
|
|
107
|
+
- Read the number from the App Thinning Size Report; never estimate.
|
|
108
|
+
- In a feasibility answer, say which limit applies and why, based on the
|
|
109
|
+
oldest supported iOS version, the launch sources, and whether the setting
|
|
110
|
+
offers dependable internet.
|
|
111
|
+
- 100 MB is available only on iOS 17 and later, for clips launched digitally
|
|
112
|
+
where a good connection is expected. Physical launch sources or iOS 16
|
|
113
|
+
support shrink the budget, and iOS 15 support shrinks it further.
|
|
114
|
+
- Through the demo link, a clip may still use 100 MB and accept NFC and QR
|
|
115
|
+
tests; demo codes must be generated from the short demo link.
|
|
116
|
+
- These figures have moved before. Re-read the current App Clip and App Store
|
|
117
|
+
Connect pages before a size ruling holds up a release.
|
|
118
|
+
|
|
119
|
+
Downloads:
|
|
120
|
+
|
|
121
|
+
- Background Assets are for material that can land after launch while the
|
|
122
|
+
task proceeds, and the clip may not flag any of it as essential.
|
|
123
|
+
- Big bundled media, ML models, product catalogs, and anything required before
|
|
124
|
+
the task can begin are a bad match. State plainly that a mandatory download
|
|
125
|
+
in front of the task is not acceptable, and check both how large downloads
|
|
126
|
+
are and whether one blocks the task. Serve that content from a server or
|
|
127
|
+
stream, fetch it after the task, or leave it to the full app.
|
|
128
|
+
|
|
129
|
+
Promotion: show `SKOverlay.AppClipConfiguration` (UIKit) or `appStoreOverlay`
|
|
130
|
+
(SwiftUI) once the task has succeeded. It must never stand between the person
|
|
131
|
+
and the task.
|
|
132
|
+
|
|
133
|
+
Platform boundaries:
|
|
134
|
+
|
|
135
|
+
- CloudKit: from iOS 16 the clip may read the public database using the
|
|
136
|
+
`CloudKit-Anonymous` service. Writing to it, document storage in iCloud,
|
|
137
|
+
the iCloud key-value store, and private or shared containers are all
|
|
138
|
+
unavailable.
|
|
139
|
+
- Live Activities: supported from iOS 16 (ActivityKit's own APIs start at
|
|
140
|
+
16.1) through a widget extension embedded only in the clip. That extension
|
|
141
|
+
holds Live Activities and nothing else, and it must carry the App Clip
|
|
142
|
+
Extension capability; in a review, name its raw key,
|
|
143
|
+
`com.apple.developer.on-demand-install-capable`.
|
|
144
|
+
- In any feasibility answer, list as unavailable: App Intents,
|
|
145
|
+
`SKAdNetwork`, custom URL schemes, `App Tracking Transparency`, Background
|
|
146
|
+
Tasks, in-app purchase, background URL sessions, state that must persist
|
|
147
|
+
locally, and anything that assumes background or long-lived execution.
|
|
148
|
+
|
|
149
|
+
Depth for product reviews:
|
|
150
|
+
|
|
151
|
+
- Send these elsewhere without implementation detail: Live Activity code
|
|
152
|
+
(ActivityKit, WidgetKit), purchasing and monetization (StoreKit), background
|
|
153
|
+
work (BackgroundTasks), CloudKit schema or sync past public reads, long-lived
|
|
154
|
+
credentials and long-term state (the full app).
|
|
155
|
+
- A PM feasibility answer covers capability fit, which size tier and why,
|
|
156
|
+
invocation limits, and who owns each handoff. Confirming location, promoting
|
|
157
|
+
the install, App Group or keychain handoff and Live Activities are explained
|
|
158
|
+
as concepts.
|
|
159
|
+
- Such an answer leaves out package structure, type names like
|
|
160
|
+
`APActivationPayload`, `CLCircularRegion` and
|
|
161
|
+
`SKOverlay.AppClipConfiguration`, App Group or keychain code, and other
|
|
162
|
+
API-level material, unless someone asks for the implementation.
|
|
163
|
+
|
|
164
|
+
## Data, notifications, location
|
|
165
|
+
|
|
166
|
+
- **Shared container.** App Groups carry only data that may be read by anyone
|
|
167
|
+
holding the group entitlement, because every such target can read and write
|
|
168
|
+
both the container and the shared defaults suite. It is a convenience, not a
|
|
169
|
+
security boundary: no passwords, refresh tokens, payment data or other
|
|
170
|
+
secrets.
|
|
171
|
+
- **Keychain.** Items the clip wrote become readable by the full app on iOS
|
|
172
|
+
15.4 and later, as long as the linking entitlements are in place (on the
|
|
173
|
+
full app's side that means `com.apple.developer.associated-appclip-app-identifiers`). The reverse
|
|
174
|
+
never works: the clip cannot see the full app's items.
|
|
175
|
+
- **Sign in with Apple.** Keep the credential's `user` identifier
|
|
176
|
+
(`ASAuthorizationAppleIDCredential.user`) in the shared container; the full
|
|
177
|
+
app asks `ASAuthorizationAppleIDProvider.getCredentialState(forUserID:)` and
|
|
178
|
+
proceeds only on `.authorized`.
|
|
179
|
+
- **Ephemeral notifications.** Put `NSAppClipRequestEphemeralUserNotification`
|
|
180
|
+
inside the `NSAppClip` dictionary of the clip's Info.plist. The permission
|
|
181
|
+
covers a window of up to 8 hours following every launch, and the person may
|
|
182
|
+
disable it from the card, so read the settings and require `.ephemeral`
|
|
183
|
+
before scheduling anything.
|
|
184
|
+
- **Relaunch from a notification.** The clip comes back with no invocation
|
|
185
|
+
URL. To steer to the correct experience, give remote pushes a
|
|
186
|
+
`target-content-id` and local ones a
|
|
187
|
+
`UNNotificationContent.targetContentIdentifier` whose value is a URL
|
|
188
|
+
matching an advanced experience, never a made-up identifier.
|
|
189
|
+
- **Location confirmation.** Read `NSUserActivity.appClipActivationPayload`,
|
|
190
|
+
build a `CLCircularRegion`, and pass it to
|
|
191
|
+
`APActivationPayload.confirmAcquired(in:)`; the region's radius is 500 m or less. The flag
|
|
192
|
+
`NSAppClipRequestLocationConfirmation` belongs in the clip target's
|
|
193
|
+
`NSAppClip` dictionary, never the full app's. The check verifies that an
|
|
194
|
+
eligible physical launch happened at the place; it does not grant ongoing
|
|
195
|
+
location access.
|
|
196
|
+
|
|
197
|
+
## Common mistakes
|
|
198
|
+
|
|
199
|
+
1. **Exceeding the budget.** A clip launched from physical codes that still
|
|
200
|
+
runs on iOS 16 has a fraction of the room of an iOS 17+, link-only clip.
|
|
201
|
+
Measure again after every substantial change.
|
|
202
|
+
2. **Confusing entitlements.** Xcode's labels hide the raw keys. Two belong on
|
|
203
|
+
the clip (install-capable, parent identifiers) and one on the full app
|
|
204
|
+
(associated clip identifiers); see the table above.
|
|
205
|
+
3. **Routing from the advance notice.**
|
|
206
|
+
`scene(_:willContinueUserActivityWithType:)` has no activity to read.
|
|
207
|
+
4. **Never testing a real invocation.** Running the scheme straight from
|
|
208
|
+
Xcode may bypass the launch path and mask routing faults. Use the
|
|
209
|
+
`_XCAppClipURL` scheme variable or a Local Experience (Settings > Developer
|
|
210
|
+
> Local Experiences).
|
|
211
|
+
5. **Ignoring the replacement.** Once installed, the full app answers the
|
|
212
|
+
clip's links; give it the same router.
|
|
213
|
+
6. **Secrets in the group container.** Credentials go to the keychain or are
|
|
214
|
+
verified on the server.
|
|
215
|
+
7. **A clip that only advertises.** People should complete a focused task, or
|
|
216
|
+
try a complete demo, without installing. Skip ads, splash screens,
|
|
217
|
+
downloads that hold up launch, repeated install nags, and flows that are
|
|
218
|
+
really a website in a web view.
|
|
219
|
+
8. **No associated domains.** Custom URLs and advanced experiences fail
|
|
220
|
+
without an `appclips:` entry in each target and a published association
|
|
221
|
+
file (path `/.well-known/apple-app-site-association`) naming the clip.
|
|
222
|
+
|
|
223
|
+
## Review checklist
|
|
224
|
+
|
|
225
|
+
- [ ] Clip bundle ID extends the parent app's bundle ID
|
|
226
|
+
- [ ] Both clip entitlements and the full app's association entitlement present (table above)
|
|
227
|
+
- [ ] Shared logic lives in packages or behind `APPCLIP`
|
|
228
|
+
- [ ] SwiftUI uses `.onContinueUserActivity(NSUserActivityTypeBrowsingWeb)`
|
|
229
|
+
- [ ] UIKit covers cold launch via `connectionOptions.userActivities` and warm launch via `scene(_:continue:)`
|
|
230
|
+
- [ ] Every clip URL also opens correctly in the full app
|
|
231
|
+
- [ ] Size confirmed in the thinning report for the chosen OS floor and launch sources; the answer names all three tiers (10, 15 and 100 MB)
|
|
232
|
+
- [ ] `appclips:` domain entry in both targets when custom URLs are used
|
|
233
|
+
- [ ] Association file served from `/.well-known/apple-app-site-association`
|
|
234
|
+
- [ ] Default experience set up in App Store Connect
|
|
235
|
+
- [ ] Advanced experiences behind production codes, Maps and per-place cards; demo codes built from the short demo link
|
|
236
|
+
- [ ] Any Live Activity lives in a clip-only widget extension containing only Live Activities, with the install-capable key
|
|
237
|
+
- [ ] Group container holds nothing secret
|
|
238
|
+
- [ ] Keychain direction spelled out (full app reads clip items from iOS 15.4 with the entitlements; never the other way)
|
|
239
|
+
- [ ] Full app checks the Apple ID credential state before trusting a clip sign-in
|
|
240
|
+
- [ ] Install overlay shown only after success, never as a gate
|
|
241
|
+
- [ ] Location-confirmation flag only in the clip's Info.plist
|
|
242
|
+
- [ ] Notification code requires `.ephemeral` before scheduling
|
|
243
|
+
- [ ] Notification relaunches without a URL are routed correctly
|
|
244
|
+
- [ ] Design review turns down marketing-only, ad-filled, web-view, install-first and launch-blocking flows
|
|
245
|
+
- [ ] Unavailable runtime features listed, including local persistence and background or long-running assumptions
|
|
246
|
+
- [ ] Nothing relies on background execution, restricted frameworks, custom schemes, IAP or durable local storage
|
|
247
|
+
- [ ] Feasibility answers keep sibling work at the boundary (no code for ActivityKit, StoreKit, BackgroundTasks, CloudKit, packages, App Groups, keychain, location checks or overlays)
|
|
248
|
+
- [ ] Verified with a Local Experience and with `_XCAppClipURL`
|
|
249
|
+
|
|
250
|
+
## Apple documentation
|
|
251
|
+
|
|
252
|
+
All under https://developer.apple.com/documentation/appclip unless noted:
|
|
253
|
+
|
|
254
|
+
- `creating-an-app-clip-with-xcode` (target setup)
|
|
255
|
+
- `configuring-the-launch-experience-of-your-app-clip` (experiences)
|
|
256
|
+
- `responding-to-invocations` (URL handling)
|
|
257
|
+
- `choosing-the-right-functionality-for-your-app-clip` (limits and frameworks)
|
|
258
|
+
- `confirming-a-person-s-physical-location` (activation payload)
|
|
259
|
+
- `sharing-data-between-your-app-clip-and-your-full-app` (containers, keychain)
|
|
260
|
+
- `enabling-notifications-in-app-clips` (8-hour window)
|
|
261
|
+
- `supporting-invocations-from-your-website-and-the-messages-app` (banners)
|
|
262
|
+
- `offering-live-activities-with-your-app-clip` (widget extension)
|
|
263
|
+
- `recommending-your-app-to-app-clip-users` (overlay)
|
|
264
|
+
- `apactivationpayload` (API)
|
|
265
|
+
- `creating-app-clip-codes` (codes)
|
|
266
|
+
- `distributing-your-app-clip` (release)
|
|
267
|
+
- https://developer.apple.com/documentation/storekit/skoverlay/appclipconfiguration
|
|
268
|
+
- https://developer.apple.com/documentation/foundation/nsuseractivitytypebrowsingweb
|
|
269
|
+
- HIG: https://developer.apple.com/design/human-interface-guidelines/app-clips
|
|
@@ -3,47 +3,47 @@
|
|
|
3
3
|
"evals": [
|
|
4
4
|
{
|
|
5
5
|
"id": 0,
|
|
6
|
-
"name": "
|
|
7
|
-
"prompt": "
|
|
8
|
-
"expected_output": "
|
|
6
|
+
"name": "entitlements-and-routing",
|
|
7
|
+
"prompt": "Check our App Clip setup before we build it. Parent app: com.example.bakery; clip: com.example.bakery.Clip. Experiences: the default one, plus an advanced one for each shop. Clip screens are SwiftUI; the URL routing sits in a UIKit module shared with the parent app. Which entitlements, domain settings and URL entry points do we need?",
|
|
8
|
+
"expected_output": "Lists the three raw entitlements and which target holds each, confirms the bundle ID prefix rule, shows SwiftUI and UIKit routing entry points correctly, requires the full app to handle every clip URL, and covers associated domains on both targets plus the association file.",
|
|
9
9
|
"files": [],
|
|
10
10
|
"expectations": [
|
|
11
|
-
"
|
|
12
|
-
"
|
|
13
|
-
"
|
|
14
|
-
"
|
|
15
|
-
"
|
|
16
|
-
"
|
|
11
|
+
"Assigns two raw keys to the clip (on-demand-install-capable and parent-application-identifiers, with their com.apple.developer. prefix) and associated-appclip-app-identifiers to the parent app",
|
|
12
|
+
"Says the clip identifier has to begin with the parent's identifier, which com.example.bakery.Clip does",
|
|
13
|
+
"Names .onContinueUserActivity(NSUserActivityTypeBrowsingWeb) as the SwiftUI hook",
|
|
14
|
+
"For the UIKit module, takes the cold-launch URL from connectionOptions.userActivities and the warm-launch URL from scene(_:continue:), and explains that the willContinueUserActivityWithType callback carries no URL",
|
|
15
|
+
"Requires the parent app to open every clip link, since it takes the clip's place once installed",
|
|
16
|
+
"Adds appclips: to Associated Domains in both targets and hosts the association file on the domain with the clip listed"
|
|
17
17
|
]
|
|
18
18
|
},
|
|
19
19
|
{
|
|
20
20
|
"id": 1,
|
|
21
|
-
"name": "
|
|
22
|
-
"prompt": "We
|
|
23
|
-
"expected_output": "
|
|
21
|
+
"name": "handoff-notify-locate",
|
|
22
|
+
"prompt": "We are building a parking-meter App Clip. People pay at a meter by tapping an NFC tag, we want to remind them before the meter runs out, sign-in is via Sign in with Apple, and when they install the full app their account and active session should carry over. We also want to be sure they are really at the meter. How should this work?",
|
|
23
|
+
"expected_output": "Uses App Groups only for non-secret data, migrates Sign in with Apple via the stored user ID and a credential-state check, explains the one-way keychain rule, configures ephemeral notifications correctly, handles relaunch without a URL, and uses location confirmation rather than continuous tracking.",
|
|
24
24
|
"files": [],
|
|
25
25
|
"expectations": [
|
|
26
|
-
"
|
|
27
|
-
"
|
|
28
|
-
"
|
|
29
|
-
"
|
|
30
|
-
"
|
|
31
|
-
"
|
|
26
|
+
"Keeps only non-sensitive values in the App Group and rules out credentials or secrets there in so many words",
|
|
27
|
+
"Saves the Apple ID user identifier for the parent app, which calls getCredentialState(forUserID:) and proceeds only when the result is .authorized",
|
|
28
|
+
"Explains the keychain is one-directional: the parent app reads items the clip wrote (iOS 15.4 and later, with the linking entitlements), never the reverse",
|
|
29
|
+
"Configures NSAppClipRequestEphemeralUserNotification in the clip's NSAppClip dictionary, notes the permission lasts at most 8 hours from each launch, and tests for .ephemeral status first",
|
|
30
|
+
"Handles relaunches from a notification, which carry no URL, using target-content-id for pushes or targetContentIdentifier for local notifications",
|
|
31
|
+
"Verifies presence at the meter with NSAppClipRequestLocationConfirmation plus the activation payload (appClipActivationPayload, APActivationPayload) rather than tracking location continuously"
|
|
32
32
|
]
|
|
33
33
|
},
|
|
34
34
|
{
|
|
35
35
|
"id": 2,
|
|
36
|
-
"name": "
|
|
37
|
-
"prompt": "
|
|
38
|
-
"expected_output": "A feasibility
|
|
36
|
+
"name": "feasibility-boundaries",
|
|
37
|
+
"prompt": "PM question about an event check-in App Clip: people scan a QR code on a poster, view the day's schedule and check in. We'd like a Live Activity for the event and some cloud-hosted data; a few people also want in-app upgrade purchases and background refresh. Can this work? Please stay non-technical.",
|
|
38
|
+
"expected_output": "A boundary-level feasibility answer: size tier by iOS version and invocation type, measurement and download warnings, CloudKit read-only scope, Live Activities via a clip-only extension, the excluded capabilities named, and sibling work routed elsewhere without implementation detail.",
|
|
39
39
|
"files": [],
|
|
40
40
|
"expectations": [
|
|
41
|
-
"
|
|
42
|
-
"
|
|
43
|
-
"
|
|
44
|
-
"
|
|
45
|
-
"
|
|
46
|
-
"
|
|
41
|
+
"Walks through the size tiers by iOS version and explains that a QR launch counts as physical, so the 100 MB tier (iOS 17+, digital launches only) does not apply unless the demo link is used",
|
|
42
|
+
"Asks for a thinning-report measurement and cautions against bundling heavy media or requiring downloads before check-in",
|
|
43
|
+
"Keeps CloudKit to reading the public database (iOS 16+, CloudKit-Anonymous) and rules out writes, document or key-value iCloud storage, and private or shared containers",
|
|
44
|
+
"Permits a Live Activity only via a clip-owned widget extension that holds nothing else and has the App Clip Extension capability, naming the on-demand-install-capable key",
|
|
45
|
+
"Lists as unavailable: in-app purchases, Background Tasks, App Intents, custom URL schemes, SKAdNetwork, App Tracking Transparency, and any persistent or background behavior",
|
|
46
|
+
"Hands ActivityKit, WidgetKit, StoreKit, BackgroundTasks, CloudKit and full-app work to their owners with no API names or code"
|
|
47
47
|
]
|
|
48
48
|
}
|
|
49
49
|
]
|