@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,308 +1,370 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: app-store-optimization
|
|
3
|
-
description: "
|
|
3
|
+
description: "App Store Optimization (ASO) for ranking and conversion: keyword research; app name, subtitle and 100-byte keyword field; description and promotional text that convert; screenshot captions and slot order; Custom Product Pages and their assigned search keywords; In-App Events; Product Page Optimization A/B tests; localized metadata; ratings, review replies, and when to call RequestReviewAction or AppStore.requestReview. Use when improving App Store ranking or conversion, or deciding what belongs to ASO versus App Store review, privacy and ATT, or StoreKit implementation."
|
|
4
4
|
metadata:
|
|
5
|
-
source:
|
|
5
|
+
source: multi-agent-pipeline
|
|
6
6
|
---
|
|
7
7
|
|
|
8
|
-
# App Store Optimization
|
|
8
|
+
# App Store Optimization
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
This skill decides what to say on the product page and where: which keywords,
|
|
11
|
+
how the copy converts, which custom pages and events to run. Compliance
|
|
12
|
+
questions such as field limits enforced at submission, screenshot device sizes
|
|
13
|
+
and rejection risks belong to `app-store-review`.
|
|
11
14
|
|
|
12
15
|
## Contents
|
|
13
16
|
|
|
14
17
|
- [Overview](#overview)
|
|
15
|
-
- [
|
|
16
|
-
- [Keyword
|
|
17
|
-
- [Description
|
|
18
|
-
- [Promotional
|
|
19
|
-
- [
|
|
20
|
-
- [
|
|
21
|
-
- [Custom
|
|
22
|
-
- [
|
|
23
|
-
- [
|
|
24
|
-
- [Ratings and
|
|
25
|
-
- [
|
|
26
|
-
- [
|
|
27
|
-
- [Review
|
|
18
|
+
- [Name and subtitle](#name-and-subtitle)
|
|
19
|
+
- [Keyword field](#keyword-field)
|
|
20
|
+
- [Description](#description)
|
|
21
|
+
- [Promotional text](#promotional-text)
|
|
22
|
+
- [Screenshots and previews](#screenshots-and-previews)
|
|
23
|
+
- [Asking for reviews in the app](#asking-for-reviews-in-the-app)
|
|
24
|
+
- [Custom pages](#custom-product-pages)
|
|
25
|
+
- [Events](#in-app-events)
|
|
26
|
+
- [Page tests](#product-page-optimization)
|
|
27
|
+
- [Ratings and reviews](#ratings-and-reviews)
|
|
28
|
+
- [Localizing the listing](#localized-metadata-optimization)
|
|
29
|
+
- [Mistakes to catch](#mistakes-to-catch)
|
|
30
|
+
- [Review checklist](#review-checklist)
|
|
28
31
|
- [References](#references)
|
|
29
32
|
|
|
30
33
|
## Overview
|
|
31
34
|
|
|
32
|
-
ASO has two
|
|
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
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
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
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
35
|
+
ASO has two goals that use different parts of the page:
|
|
36
|
+
|
|
37
|
+
- **Visibility**: appearing for relevant searches. Surfaces: app name,
|
|
38
|
+
subtitle, keyword field, primary category, localizations, ratings and
|
|
39
|
+
reviews, In-App Events when they fit, and custom pages that carry their own
|
|
40
|
+
search keywords.
|
|
41
|
+
- **Conversion**: turning a page view into a download. Surfaces: screenshots,
|
|
42
|
+
app previews, description, promotional text, the message on each Custom
|
|
43
|
+
Product Page, Product Page Optimization tests, and making sure public claims
|
|
44
|
+
and screenshots match the real app.
|
|
45
|
+
|
|
46
|
+
Use this skill for questions about discoverability, keywords, download rate or
|
|
47
|
+
any page element that moves either goal. It assumes the listing already obeys
|
|
48
|
+
`app-store-review` rules. Every plan or division of work names the two goals
|
|
49
|
+
separately.
|
|
50
|
+
|
|
51
|
+
**Who owns what**
|
|
52
|
+
|
|
53
|
+
| Area | Owner |
|
|
54
|
+
|---|---|
|
|
55
|
+
| What the listing says and to whom, which keywords match which message, screenshots, promotional text, custom pages, page tests, per-market listings, how events are pitched, rating strategy, the moment to request a review | This skill |
|
|
56
|
+
| Review compliance, PrivacyInfo.xcprivacy, ATT prompt wording, submission guardrails | `app-store-review` |
|
|
57
|
+
| Purchase code, subscription paywalls, entitlement checks, monetization mechanics | `storekit` |
|
|
58
|
+
|
|
59
|
+
**A complete plan covers**
|
|
60
|
+
|
|
61
|
+
- Visibility: the name and subtitle, the keyword field, the primary category, localizations,
|
|
62
|
+
ratings and reviews, In-App Events if there is real timed content, Custom
|
|
63
|
+
Product Pages and their assigned search keywords.
|
|
64
|
+
- Conversion: the description's opening lines, the first screenshots or the
|
|
65
|
+
preview, promotional text, message fit on each custom page, a test plan, and
|
|
66
|
+
a check that claims and screenshots are accurate.
|
|
67
|
+
- Experiment: one hypothesis, at most three treatments, the localizations in
|
|
68
|
+
the test, the metric, and the rule for calling a winner.
|
|
69
|
+
- Review prompts: the positive moment that triggers them, the moments that
|
|
70
|
+
never do, and a note that StoreKit decides whether anything appears.
|
|
71
|
+
|
|
72
|
+
Always state explicitly: popular but irrelevant keywords are rejected; the
|
|
73
|
+
custom page allowance is 70 per app; a test has up to three treatments; In-App
|
|
74
|
+
Events and ratings are ASO work.
|
|
75
|
+
|
|
76
|
+
## Name and subtitle
|
|
77
|
+
|
|
78
|
+
Search indexes both the name (30 characters) and the subtitle (30 characters),
|
|
79
|
+
so together they offer 60 indexed characters.
|
|
80
|
+
|
|
81
|
+
| Situation | Pattern |
|
|
82
|
+
|---|---|
|
|
83
|
+
| Brand already known | `Brand - Keyword` |
|
|
84
|
+
| New app competing on category terms | `Keyword - Brand` |
|
|
85
|
+
| Brand already contains a relevant word | A blended name |
|
|
86
|
+
|
|
87
|
+
- A word used in the name is wasted if repeated in the subtitle.
|
|
88
|
+
- The strongest keyword goes first in the field that still has spare room.
|
|
89
|
+
- Filler such as "the", "best" or "app" earns nothing in search.
|
|
90
|
+
- The subtitle states what the app does for the user, not a slogan.
|
|
91
|
+
|
|
92
|
+
## Keyword field
|
|
93
|
+
|
|
94
|
+
The keyword field holds 100 bytes of comma-separated terms. For Latin script
|
|
95
|
+
that is 100 characters; scripts such as Japanese, Chinese or Korean use more
|
|
96
|
+
bytes per character, so they fit fewer. Formatting rules at submission live in
|
|
97
|
+
`app-store-review`.
|
|
98
|
+
|
|
99
|
+
**Finding candidates**
|
|
100
|
+
|
|
101
|
+
1. Audit the 5 to 10 strongest apps in the category: which words appear in
|
|
102
|
+
their names, subtitles and descriptions?
|
|
103
|
+
2. Map the category for related terms those competitors leave out.
|
|
104
|
+
3. Run Apple Ads discovery campaigns to see real high-intent queries with
|
|
105
|
+
impression and tap data.
|
|
106
|
+
4. Revisit the set with every release using Apple Ads, App Analytics
|
|
107
|
+
impressions and conversion data.
|
|
108
|
+
|
|
109
|
+
**Ranking candidates.** Relevance carries the most weight, then search volume,
|
|
110
|
+
then competition. Relevance wins every tie: an unrelated high-volume term
|
|
111
|
+
brings impressions that never convert. Think about what the searcher intends
|
|
112
|
+
first and how well the term fits the metadata second. Treat the primary
|
|
113
|
+
category as part of the keyword budget and never spend field space on it.
|
|
114
|
+
|
|
115
|
+
**Packing the field**
|
|
116
|
+
|
|
117
|
+
- Drop anything already in the name or subtitle.
|
|
118
|
+
- Keep one grammatical number per word; singular and plural of the same word
|
|
119
|
+
count as duplicates.
|
|
120
|
+
- Leave out the category name; the primary category already counts.
|
|
121
|
+
- No space after commas; spaces use up bytes.
|
|
122
|
+
- Abbreviations and common misspellings are fine when people really type them.
|
|
123
|
+
- Spend bytes on high-intent, clearly relevant terms, not loosely descriptive
|
|
124
|
+
ones.
|
|
125
|
+
|
|
126
|
+
Scoring, slot allocation and seasonal rotation are in the
|
|
127
|
+
[keyword research reference](references/keyword-research-methodology.md).
|
|
128
|
+
|
|
129
|
+
## Description
|
|
130
|
+
|
|
131
|
+
Search relevance is computed from the name, the subtitle, the keyword field and
|
|
132
|
+
the primary category, together with how users behave: downloads, ratings,
|
|
133
|
+
reviews. The description exists
|
|
134
|
+
to convert, so do not load it with keywords.
|
|
135
|
+
|
|
136
|
+
1. **Opening lines.** Only the first one to three lines show before "more". Put
|
|
137
|
+
the strongest benefit or differentiator there; nothing else on the page
|
|
138
|
+
matters as much.
|
|
139
|
+
2. **Features.** Four to six short lines starting with the Unicode bullet character (U+2022),
|
|
140
|
+
because the store does not render Markdown. Describe outcomes, not internals.
|
|
141
|
+
3. **Proof.** One or two lines of awards, press quotes, user milestones or
|
|
142
|
+
ratings.
|
|
143
|
+
4. **Close.** A short line naming the benefit and inviting the download.
|
|
144
|
+
|
|
145
|
+
The store shows plain text only: no Markdown, HTML or rich formatting, so use
|
|
146
|
+
Unicode characters for structure. Keep paragraphs short and separated by blank
|
|
147
|
+
lines; a wall of text loses readers. Each locale gets its own version that
|
|
148
|
+
keeps the structure rather than the literal wording.
|
|
149
|
+
|
|
150
|
+
## Promotional text
|
|
151
|
+
|
|
152
|
+
Promotional text sits on top of the description, holds up to 170 characters,
|
|
153
|
+
and can be edited whenever you like without shipping a build. Refresh it when a
|
|
154
|
+
feature ships, for a season, after an award or press mention, during a sale,
|
|
155
|
+
and while an In-App Event runs. It
|
|
156
|
+
should never sit unchanged across releases; when nothing is timely, cycle
|
|
157
|
+
through the strongest selling points.
|
|
158
|
+
|
|
159
|
+
## Screenshots and previews
|
|
160
|
+
|
|
161
|
+
Most visitors look at the first three screenshots and no further.
|
|
162
|
+
|
|
163
|
+
- Open with the main value proposition.
|
|
164
|
+
- Keep onboarding, splash and loading screens out of those three slots.
|
|
165
|
+
- Give each of the three a different benefit.
|
|
166
|
+
|
|
167
|
+
**Captions** describe what the user gets, not the name of the screen:
|
|
168
|
+
"Never miss a deadline" rather than "Calendar View". Keep a two-to-five-word
|
|
169
|
+
headline above the screenshot and at most one short line below, and start with
|
|
170
|
+
a verb such as Plan, Share, Find or Build.
|
|
171
|
+
|
|
172
|
+
**Order**
|
|
173
|
+
|
|
174
|
+
| Slot | Content |
|
|
175
|
+
|---|---|
|
|
176
|
+
| 1 | Main value proposition |
|
|
177
|
+
| 2 | The key differentiator |
|
|
178
|
+
| 3 | The next strongest feature |
|
|
179
|
+
| 4 and later | Supporting features, social proof, edge cases |
|
|
180
|
+
|
|
181
|
+
An app preview video, when present, takes the first position. For viewers with
|
|
182
|
+
autoplay off, its poster frame is all they see, so pick a frame that could stand
|
|
183
|
+
alone as a screenshot. Device sizes and other screenshot requirements are in
|
|
184
|
+
`app-store-review`.
|
|
185
|
+
|
|
186
|
+
## Asking for reviews in the app
|
|
187
|
+
|
|
188
|
+
Use the SwiftUI environment value `RequestReviewAction` or, from UIKit,
|
|
189
|
+
`AppStore.requestReview(in:)`. The full StoreKit surface is covered in
|
|
190
|
+
`storekit`.
|
|
191
|
+
|
|
192
|
+
```swift
|
|
193
|
+
import StoreKit
|
|
194
|
+
import SwiftUI
|
|
195
|
+
|
|
196
|
+
struct TripSummaryView: View {
|
|
197
|
+
@Environment(\.requestReview) private var requestReview
|
|
198
|
+
let completedTrips: Int
|
|
199
|
+
|
|
200
|
+
var body: some View {
|
|
201
|
+
TripSummaryContent()
|
|
202
|
+
.onAppear {
|
|
203
|
+
if completedTrips == 5 { requestReview() }
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
}
|
|
176
207
|
```
|
|
177
208
|
|
|
178
|
-
|
|
209
|
+
- The system shows the prompt at most three times in 365 days per device for
|
|
210
|
+
someone who has not rated the app.
|
|
211
|
+
- Calling the API is a request; StoreKit decides whether anything appears.
|
|
212
|
+
- Development builds always show it; TestFlight builds never do.
|
|
213
|
+
- Good moments: a meaningful task just finished, a milestone or streak, a
|
|
214
|
+
visible success, several active sessions.
|
|
215
|
+
- Bad moments: the very first launch, the onboarding flow, any error or crash,
|
|
216
|
+
a purchase that failed, or directly after a button tap.
|
|
217
|
+
- Do not put a "Do you like this app?" dialog in front of the system prompt.
|
|
218
|
+
Apple discourages intercepting it and may reject apps that do.
|
|
219
|
+
|
|
220
|
+
For a permanent "Write a review" row in settings, open
|
|
221
|
+
`https://apps.apple.com/app/id{APP_ID}?action=write-review`. It goes straight
|
|
222
|
+
to the review sheet and does not count against the three-per-year limit.
|
|
179
223
|
|
|
180
224
|
## Custom Product Pages
|
|
181
225
|
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
- Each
|
|
193
|
-
-
|
|
194
|
-
|
|
195
|
-
-
|
|
196
|
-
-
|
|
197
|
-
|
|
198
|
-
|
|
226
|
+
Each app gets an allowance of 70 Custom Product Pages. A page may swap in its
|
|
227
|
+
own screenshots, preview videos and promotional text, and carry its own search
|
|
228
|
+
keywords.
|
|
229
|
+
|
|
230
|
+
- A recommendation to use them always says two things: the allowance is 70
|
|
231
|
+
pages, and keywords assigned to a page let it surface in search. Map every page to an
|
|
232
|
+
audience, a message, a keyword or ad intent, and a measurement plan.
|
|
233
|
+
- Typical uses: ad groups in Apple Ads, social campaigns, landings for one
|
|
234
|
+
feature, seasonal pushes, and any path that needs a matching first screenshot
|
|
235
|
+
and promotional text.
|
|
236
|
+
- Each page has its own App Store URL for ads, deep links and websites.
|
|
237
|
+
- An approved page can surface in search for its assigned keywords; those are
|
|
238
|
+
chosen from the keywords of the most recently approved app version.
|
|
239
|
+
- Each page can be localized on its own.
|
|
240
|
+
- Create them in App Store Connect on the Custom Product Pages tab, with
|
|
241
|
+
descriptive internal names such as `Search-TrailMaps` or
|
|
242
|
+
`Social-SummerLaunch`.
|
|
243
|
+
|
|
244
|
+
URL format, channel mapping and maintenance are in the
|
|
245
|
+
[page variants reference](references/product-page-variants.md).
|
|
199
246
|
|
|
200
247
|
## In-App Events
|
|
201
248
|
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
-
|
|
215
|
-
|
|
216
|
-
-
|
|
217
|
-
-
|
|
218
|
-
|
|
219
|
-
|
|
249
|
+
Events are shown in search, on Today and in recommendations tailored to
|
|
250
|
+
each user. They raise visibility while they run and can bring lapsed
|
|
251
|
+
users back.
|
|
252
|
+
|
|
253
|
+
- Badges (seven): Challenge, Competition, Live Event, Major Update, New
|
|
254
|
+
Season, Premiere, Special Event. Pick the one that matches what actually happens in
|
|
255
|
+
the app, and never create an event without real time-bound content.
|
|
256
|
+
- Text limits in characters: 30 for the name, 50 for the short description,
|
|
257
|
+
120 for the long one.
|
|
258
|
+
- Media: an event card image or video at 16:9 (1920 x 1080) and an event
|
|
259
|
+
details page image or video at 9:16 (1080 x 1920).
|
|
260
|
+
- Time them with feature releases, seasonal moments and content drops.
|
|
261
|
+
- Write the name and short description for someone scanning search results;
|
|
262
|
+
they appear on the event cards in Search and Today.
|
|
263
|
+
- The card is shown on the product page as well, and a well-timed card lifts
|
|
264
|
+
tap-through.
|
|
265
|
+
- Line events up so a new one starts as the previous one ends, keeping a card
|
|
266
|
+
in search at all times.
|
|
220
267
|
|
|
221
268
|
## Product Page Optimization
|
|
222
269
|
|
|
223
|
-
App Store Connect
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
-
|
|
229
|
-
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
-
|
|
236
|
-
|
|
237
|
-
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
Reset only when the displayed rating is significantly below the app's current quality after major improvements. Do not reset a strong, representative rating; do not reset for ordinary bug fixes; and wait for stabilization after a risky redesign.
|
|
270
|
+
Product Page Optimization is the built-in App Store Connect A/B test for the
|
|
271
|
+
default product page.
|
|
272
|
+
|
|
273
|
+
- Testable: the app icon (using alternate icons), screenshots (order, content,
|
|
274
|
+
captions) and the preview video.
|
|
275
|
+
- Up to three treatments run against the original page.
|
|
276
|
+
- Plan at least seven days so every weekday is included, and longer for apps
|
|
277
|
+
with little traffic, until the result is significant.
|
|
278
|
+
- Keep a single hypothesis per test, even when using all three treatments.
|
|
279
|
+
- Choose which localizations take part; all supported ones are selected by
|
|
280
|
+
default.
|
|
281
|
+
- The longest a test runs is 90 days; you can end it sooner.
|
|
282
|
+
- App Analytics shows results once the test has been credited with five or
|
|
283
|
+
more first-time downloads.
|
|
284
|
+
- Any test you propose spells out the hypothesis, its (at most three)
|
|
285
|
+
treatments, which localizations take part, the metric, and how a winner is
|
|
286
|
+
declared.
|
|
287
|
+
- Decide on the change in conversion rate from impressions to downloads, never
|
|
288
|
+
on download totals. App Store Connect shows each variant's conversion rate,
|
|
289
|
+
its lift and a confidence level; require at least 90% before accepting a
|
|
290
|
+
"Performing Better" or "Performing Worse" label.
|
|
291
|
+
- Once a winner is applied, pause testing long enough for a fresh baseline.
|
|
292
|
+
|
|
293
|
+
## Ratings and reviews
|
|
294
|
+
|
|
295
|
+
Star ratings and written reviews are visible on the product page and in
|
|
296
|
+
search, and they move both ranking and conversion.
|
|
297
|
+
|
|
298
|
+
- Earn more recent positive reviews: prompt after successes and answer
|
|
299
|
+
complaints constructively.
|
|
300
|
+
- Answer critical reviews from App Store Connect. A calm, specific reply
|
|
301
|
+
improves how the app looks even when the rating does not change: acknowledge
|
|
302
|
+
the problem, say what is fixed or in progress, keep the tone neutral.
|
|
303
|
+
- Read reviews as research into what users want, what frustrates them and the
|
|
304
|
+
words they use, then feed that into metadata and captions.
|
|
305
|
+
- Submitting a new version offers the option of resetting the summary rating. Do it only
|
|
306
|
+
when the shown rating is far below current quality after major fixes. Keep a
|
|
307
|
+
good rating that reflects the app fairly, skip the reset for routine fixes, and after
|
|
308
|
+
a risky redesign wait until it has settled.
|
|
263
309
|
|
|
264
310
|
## Localized Metadata Optimization
|
|
265
311
|
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
-
|
|
272
|
-
|
|
273
|
-
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
-
|
|
293
|
-
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
- [ ]
|
|
298
|
-
|
|
299
|
-
- [ ]
|
|
300
|
-
- [ ]
|
|
301
|
-
|
|
302
|
-
- [ ]
|
|
303
|
-
|
|
312
|
+
A localized listing is a separate job from translating the app's screens.
|
|
313
|
+
Keywords, descriptions and captions are researched and written per market.
|
|
314
|
+
|
|
315
|
+
- Research keywords in each market. The term people use to find a photo editor
|
|
316
|
+
in Japanese is not a word-for-word translation of the English one.
|
|
317
|
+
- Rewrite the description per locale, adapting opening lines, features, proof
|
|
318
|
+
and close to local expectations.
|
|
319
|
+
- Localize every surface (description, keywords, previews, screenshots), and do
|
|
320
|
+
not count on literal translations or on one locale's keywords being indexed
|
|
321
|
+
elsewhere.
|
|
322
|
+
- Caption screenshots in the market's language; native captions convert better
|
|
323
|
+
than English ones.
|
|
324
|
+
- Localizing strings inside the app (String Catalogs, `FormatStyle`,
|
|
325
|
+
right-to-left layout) is covered by `ios-localization`.
|
|
326
|
+
|
|
327
|
+
## Mistakes to catch
|
|
328
|
+
|
|
329
|
+
- Words from the name, subtitle or category repeated in the keyword field.
|
|
330
|
+
- Captions that name features instead of promising benefits.
|
|
331
|
+
- Keywords translated instead of researched per market.
|
|
332
|
+
- Review requests fired during onboarding or after an error, crash or failed
|
|
333
|
+
purchase.
|
|
334
|
+
- Weak first three screenshots, or onboarding and splash screens in them.
|
|
335
|
+
- Promotional text that never changes between releases or campaigns.
|
|
336
|
+
- Tests stopped too early, run without enough traffic, or mixing hypotheses.
|
|
337
|
+
- A space typed after each comma in the keyword field.
|
|
338
|
+
- Every Custom Product Page using the same assets.
|
|
339
|
+
- Negative reviews left unanswered and unread.
|
|
340
|
+
|
|
341
|
+
## Review checklist
|
|
342
|
+
|
|
343
|
+
- [ ] The name pairs the brand with a high-value keyword, and the subtitle
|
|
344
|
+
repeats none of its words.
|
|
345
|
+
- [ ] The subtitle states the main value within 30 characters.
|
|
346
|
+
- [ ] The keyword field uses its full 100 bytes, has no spaces after commas, no
|
|
347
|
+
words from the name or subtitle, and one form per word.
|
|
348
|
+
- [ ] The description follows opening, features, proof, close, and its first
|
|
349
|
+
three lines work before the fold.
|
|
350
|
+
- [ ] Promotional text reflects the latest release or event.
|
|
351
|
+
- [ ] The first three screenshots show the strongest screens with benefit
|
|
352
|
+
captions.
|
|
353
|
+
- [ ] Any preview video shows the core feature within its first five seconds.
|
|
354
|
+
- [ ] `requestReview()` follows a positive moment, never first launch or an
|
|
355
|
+
error.
|
|
356
|
+
- [ ] Each major acquisition channel has a Custom Product Page with its own
|
|
357
|
+
screenshots.
|
|
358
|
+
- [ ] In-App Events are planned for upcoming launches, seasons and releases.
|
|
359
|
+
- [ ] Every supported locale has metadata based on its own keyword research.
|
|
360
|
+
- [ ] Before submitting, every metadata field clears the `app-store-review`
|
|
361
|
+
checklist.
|
|
304
362
|
|
|
305
363
|
## References
|
|
306
364
|
|
|
307
|
-
- Keyword research
|
|
308
|
-
|
|
365
|
+
- [Keyword research](references/keyword-research-methodology.md):
|
|
366
|
+
what search indexes, the research process, scoring, slot allocation, seasonal
|
|
367
|
+
rotation, before and after examples.
|
|
368
|
+
- [Page variants](references/product-page-variants.md): custom
|
|
369
|
+
page setup and channel mapping, test patterns and limits, In-App
|
|
370
|
+
Event configuration, caption writing.
|