@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
|
@@ -3,43 +3,47 @@
|
|
|
3
3
|
"evals": [
|
|
4
4
|
{
|
|
5
5
|
"id": 1,
|
|
6
|
-
"
|
|
7
|
-
"
|
|
6
|
+
"name": "language-app-full-plan",
|
|
7
|
+
"prompt": "We are launching a language-learning flashcard app in English, German and Japanese. Build us an ASO plan: what goes in the name, subtitle and keyword field, how the product page should convert, which Custom Product Pages and events make sense, how we should test the page, and when the app should ask for a rating.",
|
|
8
|
+
"expected_output": "Organizes the plan into visibility and conversion. Picks relevant, high-intent keywords over popular unrelated ones and lists name, subtitle, keyword field, primary category, ratings, Custom Product Page keywords and event cards as visibility levers without stuffing the description. For conversion covers the opening description lines, benefit-led first screenshots, current promotional text and research per locale. Maps Custom Product Pages to audiences or channels and mentions the 70-page capacity or assigned keywords. Proposes a test with one hypothesis, at most three treatments and chosen localizations. Places review prompts after positive moments and notes StoreKit may not show them.",
|
|
8
9
|
"files": [],
|
|
9
10
|
"expectations": [
|
|
10
|
-
"
|
|
11
|
-
"
|
|
12
|
-
"
|
|
13
|
-
"
|
|
14
|
-
"
|
|
15
|
-
"
|
|
11
|
+
"Splits the plan into a visibility part and a conversion part",
|
|
12
|
+
"Puts relevance and intent ahead of raw search volume",
|
|
13
|
+
"Names name, subtitle, keyword field, category, ratings, Custom Product Page keywords and event cards as visibility levers, and keeps keywords out of the description",
|
|
14
|
+
"Covers the description opening, benefit-first screenshots, up-to-date promotional text and keyword research per locale",
|
|
15
|
+
"Ties Custom Product Pages to audiences or channels and mentions the 70-page limit or assigned search keywords",
|
|
16
|
+
"Designs a test with one hypothesis, up to three treatments and selected localizations",
|
|
17
|
+
"Asks for reviews after positive moments and says StoreKit decides whether the prompt appears"
|
|
16
18
|
]
|
|
17
19
|
},
|
|
18
20
|
{
|
|
19
21
|
"id": 2,
|
|
20
|
-
"
|
|
21
|
-
"
|
|
22
|
+
"name": "correct-aso-notes",
|
|
23
|
+
"prompt": "Fix this internal ASO note: 'We can make 35 Custom Product Pages and they only work through links. Product page tests allow one treatment for all locales and give no confidence data. Words at the start of the keyword field rank higher. Add keywords to the description too. Event names are a hidden keyword field. Japan and Korea index the English keyword field, and a rating under 4.0 always kills conversion.'",
|
|
24
|
+
"expected_output": "Raises the Custom Product Page limit to 70 and adds that assigned keywords let pages appear in search as well as via links. Says a test can have up to three treatments, localizations are selectable and App Analytics reports confidence. Rejects the idea that keyword position inside the field changes ranking, removes keywords from the description, and describes event names and short descriptions as visible card copy. Drops the unsupported claims about cross-locale indexing and a hard 4.0 threshold, while keeping research per market and treating ratings as a real signal.",
|
|
22
25
|
"files": [],
|
|
23
26
|
"expectations": [
|
|
24
|
-
"Corrects
|
|
25
|
-
"
|
|
26
|
-
"Rejects
|
|
27
|
-
"
|
|
28
|
-
"
|
|
29
|
-
"Removes unsupported cross-locale
|
|
27
|
+
"Corrects the limit to 70 Custom Product Pages and adds assigned-keyword search visibility",
|
|
28
|
+
"States up to three treatments, selectable localizations and confidence reporting in App Analytics",
|
|
29
|
+
"Rejects the claim that position within the keyword field affects ranking",
|
|
30
|
+
"Advises against adding keywords to the description",
|
|
31
|
+
"Describes event metadata as visible card copy rather than a keyword field",
|
|
32
|
+
"Removes the unsupported cross-locale indexing and fixed-threshold rating claims while keeping per-market research and ratings as signals"
|
|
30
33
|
]
|
|
31
34
|
},
|
|
32
35
|
{
|
|
33
36
|
"id": 3,
|
|
34
|
-
"
|
|
35
|
-
"
|
|
37
|
+
"name": "ownership-boundary",
|
|
38
|
+
"prompt": "Our growth, compliance and payments teams keep arguing over who owns what on the App Store listing and the paywall. Split the work between ASO, App Store review and StoreKit, and say what ASO should still double-check.",
|
|
39
|
+
"expected_output": "ASO keeps keywords, name and subtitle, description copy, screenshots and captions, promotional text, Custom Product Pages, events, page tests, listing localization and ratings. Rejection risk, screenshot compliance, PrivacyInfo.xcprivacy, metadata policy and ATT go to app-store-review. Paywall code, purchase handling, entitlements and product setup go to storekit. ASO still reviews listing copy and screenshots for accuracy and conversion, and never recommends competitor names, unrelated keywords or misleading screenshots.",
|
|
36
40
|
"files": [],
|
|
37
41
|
"expectations": [
|
|
38
|
-
"
|
|
39
|
-
"
|
|
40
|
-
"
|
|
41
|
-
"
|
|
42
|
-
"
|
|
42
|
+
"Assigns keywords, name, subtitle, description, screenshots, captions, promotional text, Custom Product Pages, events, tests, listing localization and ratings to ASO",
|
|
43
|
+
"Sends rejection risk, screenshot compliance, PrivacyInfo.xcprivacy, metadata policy and ATT to app-store-review",
|
|
44
|
+
"Sends paywall code, purchase handling, entitlements and product setup to storekit",
|
|
45
|
+
"Keeps an ASO cross-check of listing copy and screenshots for accuracy and conversion",
|
|
46
|
+
"Never suggests competitor names, unrelated keywords or misleading screenshots"
|
|
43
47
|
]
|
|
44
48
|
}
|
|
45
49
|
]
|
|
@@ -1,174 +1,157 @@
|
|
|
1
1
|
# Keyword Research Methodology
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
## What App Store search reads
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
Apple documents two kinds of search signal: text relevance from the name,
|
|
6
|
+
subtitle, keyword field and primary category, and user behavior such as
|
|
7
|
+
downloads, ratings and reviews. The table below is a planning aid, not a list
|
|
8
|
+
of ranking weights.
|
|
6
9
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
10
|
+
| Field | Role in search | Limit | Changing it | Guidance |
|
|
11
|
+
|---|---|---|---|---|
|
|
12
|
+
| App name | Indexed | 30 characters | With a new version, when status allows | Distinctive, and hints at what the app does |
|
|
13
|
+
| Subtitle | Indexed | 30 characters | With a new version | Short statement of the value or main use |
|
|
14
|
+
| Keyword field | Indexed | 100 bytes | With a new version | Commas between terms, no spaces after them |
|
|
15
|
+
| Primary category | Counts toward relevance | One choice | With a new version | Never repeat its name in keywords |
|
|
16
|
+
| Custom Product Page keywords | Indexed for approved, visible pages | Set per page | In App Store Connect | Sends matching searches to that page |
|
|
17
|
+
| In-App Event name and short description | Shown on cards in Search | Set per event | Per event | Visible copy, not a hidden keyword field |
|
|
18
|
+
| Description | Conversion | 4,000 characters | With a new version | Apple's product page guidance says not to add keywords for search here |
|
|
19
|
+
| Promotional text | No effect on ranking, per Apple | 170 characters | Any time | Timely conversion message |
|
|
20
|
+
| Ratings and reviews | Behavior signal | Ongoing | Earned | Mine for vocabulary; never a place to stuff terms |
|
|
13
21
|
|
|
14
|
-
|
|
22
|
+
Additional rules:
|
|
15
23
|
|
|
16
|
-
|
|
24
|
+
- Singular and plural of a word already present count as the same word.
|
|
25
|
+
- Use a space only inside a real multi-word phrase.
|
|
26
|
+
- Two different words that are both searched, such as "photo" and
|
|
27
|
+
"photography", may both earn a place.
|
|
28
|
+
- Latin-script characters take one byte each; many other scripts take two or
|
|
29
|
+
three, so the field holds fewer of them.
|
|
17
30
|
|
|
18
|
-
|
|
19
|
-
|-------|---------------------|--------------------------|-------|
|
|
20
|
-
| App name | Yes | Yes (with new version/status permitting) | 30 characters. Choose a distinctive name that hints at what the app does. |
|
|
21
|
-
| Subtitle | Yes | Yes (with new version/status permitting) | 30 characters. Summarize value or typical use in a concise phrase. |
|
|
22
|
-
| Keyword field | Yes | Yes (with new version/status permitting) | Up to 100 bytes. Use comma-separated terms with no spaces after commas. |
|
|
23
|
-
| Primary category | Yes | Yes (with new version/status permitting) | Apple includes the primary category in search relevance. Do not repeat the category name in keywords. |
|
|
24
|
-
| Custom Product Page assigned keywords | Yes, for approved visible pages | Yes (in App Store Connect) | Can route matching searches to a custom page instead of the default product page. |
|
|
25
|
-
| In-app event name and short description | Visible in Search/event cards | Yes (per event) | Use query-relevant language for the event card, but avoid treating event copy as a hidden keyword field. |
|
|
26
|
-
| Description | Conversion-focused | Yes (with new version/status permitting) | Apple's product page guidance says not to add unnecessary keywords to improve search results. |
|
|
27
|
-
| Promotional text | No ranking effect | Yes (anytime) | Apple says promotional text does not affect search ranking. Use it for timely conversion messaging. |
|
|
28
|
-
| Ratings and reviews | Behavior/search signal | Ongoing | Ratings and reviews influence search and conversion, but review text should be used as customer research rather than keyword stuffing. |
|
|
31
|
+
## Research process
|
|
29
32
|
|
|
30
|
-
###
|
|
33
|
+
### 1. Competitors
|
|
31
34
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
- Use spaces only inside real keyword phrases; do not add spaces after commas.
|
|
35
|
-
- Include separate related terms when both are genuine search terms, such as "photo" and "photography".
|
|
35
|
+
Pick the top 5 to 10 apps that rank for your category's main terms. For each,
|
|
36
|
+
record:
|
|
36
37
|
|
|
37
|
-
|
|
38
|
+
- the keywords in its name and subtitle,
|
|
39
|
+
- positioning words that recur across names, subtitles and screenshots,
|
|
40
|
+
- terms nobody covers.
|
|
38
41
|
|
|
39
|
-
|
|
42
|
+
Type partial queries into App Store search and note the autocomplete
|
|
43
|
+
suggestions; they come from what people actually search.
|
|
40
44
|
|
|
41
|
-
|
|
45
|
+
### 2. Brainstorm by type
|
|
42
46
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
47
|
+
| Type | Example for a hiking app |
|
|
48
|
+
|---|---|
|
|
49
|
+
| What it does | trail, map, route |
|
|
50
|
+
| What it is used for | hike, backpack, summit |
|
|
51
|
+
| Who uses it | beginner, family, solo |
|
|
52
|
+
| Nearby activities | camping, climbing, birding |
|
|
46
53
|
|
|
47
|
-
|
|
54
|
+
Terms that appear in many competitor names usually mean high volume and hard
|
|
55
|
+
competition. Terms that autocomplete offers but competitors ignore are the
|
|
56
|
+
openings.
|
|
48
57
|
|
|
49
|
-
###
|
|
58
|
+
### 3. Apple Ads discovery
|
|
50
59
|
|
|
51
|
-
|
|
60
|
+
Run a discovery campaign with broad match for two to four weeks. Export the
|
|
61
|
+
search terms report, sort by tap-through rate to find intent and by conversion
|
|
62
|
+
rate to find terms that lead to downloads, and move the winners into the
|
|
63
|
+
keyword field.
|
|
52
64
|
|
|
53
|
-
|
|
54
|
-
- Use case terms (why a user would want it)
|
|
55
|
-
- Audience terms (who the user is)
|
|
56
|
-
- Adjacent terms (related activities or workflows)
|
|
65
|
+
### 4. Every update
|
|
57
66
|
|
|
58
|
-
|
|
67
|
+
- Check impressions, tap-through rate and conversion in App Analytics.
|
|
68
|
+
- Swap out terms with low impressions or low tap-through.
|
|
69
|
+
- Try newly discovered terms.
|
|
70
|
+
- Note what competitors changed in their metadata.
|
|
59
71
|
|
|
60
|
-
|
|
72
|
+
## Scoring
|
|
61
73
|
|
|
62
|
-
|
|
74
|
+
Rate each candidate from 1 to 5 on three scales:
|
|
63
75
|
|
|
64
|
-
-
|
|
65
|
-
|
|
66
|
-
-
|
|
67
|
-
-
|
|
76
|
+
- **Relevance**: 5 means it describes the core function, 1 means it is
|
|
77
|
+
tangential.
|
|
78
|
+
- **Volume**: estimated from Apple Ads impressions.
|
|
79
|
+
- **Difficulty**: 5 means little competition, 1 means large apps dominate it.
|
|
68
80
|
|
|
69
|
-
|
|
81
|
+
Only terms with Relevance of 3 or more are considered. Priority is
|
|
82
|
+
`(Relevance x 2) + Volume + Difficulty`.
|
|
70
83
|
|
|
71
|
-
|
|
84
|
+
Rule a term out when:
|
|
72
85
|
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
86
|
+
- Relevance is below 3,
|
|
87
|
+
- it is another company's brand name, which breaks the guidelines,
|
|
88
|
+
- it already appears in the name or subtitle,
|
|
89
|
+
- it is the primary category's name.
|
|
77
90
|
|
|
78
|
-
##
|
|
91
|
+
## Filling the slots
|
|
79
92
|
|
|
80
|
-
|
|
93
|
+
Two worked examples. Lengths are counted exactly.
|
|
81
94
|
|
|
82
|
-
|
|
83
|
-
|-----------|-------------|---------------|
|
|
84
|
-
| **Relevance** | 1-5 | Does the keyword describe what the app actually does? 5 = core function, 1 = tangentially related |
|
|
85
|
-
| **Volume** | 1-5 | Is this term frequently searched? Use Search Ads impression data as a proxy. 5 = high impressions, 1 = minimal |
|
|
86
|
-
| **Difficulty** | 1-5 | How many established apps target this term? 5 = low competition (good), 1 = dominated by major apps |
|
|
95
|
+
**Meditation app**
|
|
87
96
|
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
- Do not describe the app's actual functionality (Relevance < 3)
|
|
92
|
-
- Are competitor brand names (violates App Store guidelines)
|
|
93
|
-
- Duplicate a word already in the title or subtitle
|
|
94
|
-
- Are the app's primary category name (Apple adds it automatically)
|
|
95
|
-
|
|
96
|
-
## Slot Allocation Strategy
|
|
97
|
-
|
|
98
|
-
The 100-character keyword field requires careful allocation. Here are allocation patterns for different app types:
|
|
99
|
-
|
|
100
|
-
### Example: Fitness tracking app
|
|
101
|
-
|
|
102
|
-
Title: `FitTrack -- Workout Log` (23 chars used)
|
|
103
|
-
Subtitle: `Exercise & Activity Stats` (25 chars used)
|
|
104
|
-
|
|
105
|
-
Keyword field strategy -- do not repeat: fittrack, workout, log, exercise, activity, stats
|
|
97
|
+
- Name: `Stillpoint - Meditation Timer`
|
|
98
|
+
- Subtitle: `Sleep Sounds & Calm Breathing`
|
|
99
|
+
- Keywords (15 terms, 98 bytes):
|
|
106
100
|
|
|
107
101
|
```
|
|
108
|
-
|
|
102
|
+
mindfulness,anxiety,stress,relax,focus,yoga,insomnia,nap,journal,mantra,zen,rain,noise,guided,mood
|
|
109
103
|
```
|
|
110
104
|
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
### Example: Photo editing app
|
|
105
|
+
**Recipe app**
|
|
114
106
|
|
|
115
|
-
|
|
116
|
-
Subtitle: `
|
|
117
|
-
|
|
118
|
-
Keyword field -- do not repeat: pixelpop, photo, editor, filter, retouch, tool
|
|
107
|
+
- Name: `Pantry Chef - Recipe Planner`
|
|
108
|
+
- Subtitle: `Meal Prep & Grocery Lists`
|
|
109
|
+
- Keywords (14 terms, 100 bytes):
|
|
119
110
|
|
|
120
111
|
```
|
|
121
|
-
|
|
112
|
+
cooking,dinner,vegan,keto,healthy,shopping,budget,family,easy,quick,bake,cookbook,leftover,nutrition
|
|
122
113
|
```
|
|
123
114
|
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
### Allocation principles
|
|
115
|
+
Notes:
|
|
127
116
|
|
|
128
|
-
-
|
|
129
|
-
|
|
130
|
-
-
|
|
117
|
+
- Every comma costs one byte. Search matches single words, so long keywords
|
|
118
|
+
are not better in themselves.
|
|
119
|
+
- Keep a phrase such as "meal prep" together when people search it that way;
|
|
120
|
+
split words that are valuable on their own.
|
|
121
|
+
- Hold back 5 to 10 bytes for experimental terms you rotate each release.
|
|
131
122
|
|
|
132
|
-
## Seasonal
|
|
123
|
+
## Seasonal rotation
|
|
133
124
|
|
|
134
|
-
|
|
125
|
+
| Season | Terms | Ship in |
|
|
126
|
+
|---|---|---|
|
|
127
|
+
| New year | resolution, goal, habit, new year | December release |
|
|
128
|
+
| Back to school | student, school, study, planner | July or August |
|
|
129
|
+
| Holiday shopping | gift, holiday, deal, wish list | October or November |
|
|
130
|
+
| Summer fitness | outdoor, running, summer, beach | April or May |
|
|
131
|
+
| Tax season | tax, receipt, expense, deduction | January or February |
|
|
135
132
|
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
| New Year | resolution,goal,habit,new year | December release |
|
|
139
|
-
| Back to school | student,school,study,planner | July/August release |
|
|
140
|
-
| Holiday shopping | gift,holiday,deal,wish list | October/November release |
|
|
141
|
-
| Summer fitness | outdoor,running,summer,beach | April/May release |
|
|
142
|
-
| Tax season | tax,receipt,expense,deduction | January/February release |
|
|
133
|
+
Swap two or three terms per season. Keep the core 70 to 80 bytes stable and use
|
|
134
|
+
the remaining 20 to 30 for seasonal experiments.
|
|
143
135
|
|
|
144
|
-
|
|
136
|
+
## Before and after
|
|
145
137
|
|
|
146
|
-
|
|
138
|
+
**Wasted bytes.** For a surf forecast app:
|
|
147
139
|
|
|
148
|
-
### Problem: Wasted characters
|
|
149
|
-
|
|
150
|
-
**Before:**
|
|
151
140
|
```
|
|
152
|
-
|
|
141
|
+
Before (66): best surf app, surf forecast, wave report, and tide times, surfing
|
|
142
|
+
After (48): wave,swell,tide,wind,beach,buoy,report,spot,reef
|
|
153
143
|
```
|
|
154
|
-
Issues: spaces after commas (-5 chars wasted), "fitness" and "tracker" may duplicate title, "best" and "app" have no search value, "and" is a stop word.
|
|
155
144
|
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
```
|
|
160
|
-
Fixes: no spaces, no duplicates of title/subtitle, no filler words, all terms are genuine search queries.
|
|
145
|
+
The first version pays for spaces after commas, filler ("best", "app"), a
|
|
146
|
+
stop word ("and") and words that belong in the name. The second holds nine real
|
|
147
|
+
terms in fewer bytes and leaves 52 bytes for more.
|
|
161
148
|
|
|
162
|
-
|
|
149
|
+
**Duplicates.** With the name `SwellWatch - Surf Forecast`:
|
|
163
150
|
|
|
164
|
-
**Before** (title is "RunMate -- Running Tracker"):
|
|
165
151
|
```
|
|
166
|
-
|
|
152
|
+
Before (65): surf,forecast,forecasts,swell,wave,tide,wind,buoy,beach,reef,spot
|
|
153
|
+
After (59): swell,wave,tide,wind,buoy,beach,reef,spot,kite,marine,chart
|
|
167
154
|
```
|
|
168
|
-
Issues: "running", "tracker", and "run" duplicate the title -- 17 characters wasted.
|
|
169
155
|
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
jog,marathon,5k,pace,distance,route,gps,heart,rate,training,fitness,health,stride,tempo,interval
|
|
173
|
-
```
|
|
174
|
-
Fixes: removed title duplicates, added 3 new high-value terms with the recovered space.
|
|
156
|
+
Removing "surf", "forecast" and "forecasts" frees 24 bytes; "kite", "marine"
|
|
157
|
+
and "chart" use 18 of them, and 41 bytes remain for further terms.
|