@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.
Files changed (264) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/LICENSE +0 -10
  3. package/docs/facts.json +1 -1
  4. package/manifest.json +266 -267
  5. package/package.json +2 -2
  6. package/pipeline/scripts/_notices.mjs +1 -1
  7. package/pipeline/skills/.skill-manifest.json +68 -68
  8. package/pipeline/skills/shared/README.md +70 -70
  9. package/pipeline/skills/shared/external/alarmkit/SKILL.md +373 -381
  10. package/pipeline/skills/shared/external/alarmkit/evals/evals.json +23 -18
  11. package/pipeline/skills/shared/external/alarmkit/references/alarmkit-patterns.md +328 -378
  12. package/pipeline/skills/shared/external/app-clips/SKILL.md +260 -160
  13. package/pipeline/skills/shared/external/app-clips/evals/evals.json +27 -27
  14. package/pipeline/skills/shared/external/app-clips/references/data-handoff-notifications-location.md +150 -83
  15. package/pipeline/skills/shared/external/app-clips/references/routing-and-experiences.md +135 -83
  16. package/pipeline/skills/shared/external/app-clips/references/size-capabilities-and-promotion.md +143 -85
  17. package/pipeline/skills/shared/external/app-intents/SKILL.md +302 -304
  18. package/pipeline/skills/shared/external/app-intents/evals/evals.json +21 -21
  19. package/pipeline/skills/shared/external/app-intents/references/appintents-advanced.md +594 -894
  20. package/pipeline/skills/shared/external/app-store-optimization/SKILL.md +339 -277
  21. package/pipeline/skills/shared/external/app-store-optimization/evals/evals.json +27 -23
  22. package/pipeline/skills/shared/external/app-store-optimization/references/keyword-research-methodology.md +105 -122
  23. package/pipeline/skills/shared/external/app-store-optimization/references/product-page-variants.md +143 -166
  24. package/pipeline/skills/shared/external/app-store-review/SKILL.md +307 -326
  25. package/pipeline/skills/shared/external/app-store-review/evals/evals.json +21 -21
  26. package/pipeline/skills/shared/external/app-store-review/references/privacy-manifest.md +105 -67
  27. package/pipeline/skills/shared/external/app-store-review/references/review-checklists.md +114 -101
  28. package/pipeline/skills/shared/external/apple-on-device-ai/SKILL.md +333 -360
  29. package/pipeline/skills/shared/external/apple-on-device-ai/evals/evals.json +24 -27
  30. package/pipeline/skills/shared/external/apple-on-device-ai/references/coreml-conversion.md +215 -322
  31. package/pipeline/skills/shared/external/apple-on-device-ai/references/coreml-optimization.md +161 -256
  32. package/pipeline/skills/shared/external/apple-on-device-ai/references/foundation-models.md +277 -387
  33. package/pipeline/skills/shared/external/apple-on-device-ai/references/mlx-swift.md +196 -210
  34. package/pipeline/skills/shared/external/authentication/SKILL.md +265 -381
  35. package/pipeline/skills/shared/external/authentication/evals/evals.json +25 -25
  36. package/pipeline/skills/shared/external/authentication/references/keychain-biometric.md +133 -178
  37. package/pipeline/skills/shared/external/authentication/references/passkeys.md +111 -147
  38. package/pipeline/skills/shared/external/avkit/SKILL.md +267 -364
  39. package/pipeline/skills/shared/external/avkit/evals/evals.json +26 -26
  40. package/pipeline/skills/shared/external/avkit/references/avkit-patterns.md +375 -493
  41. package/pipeline/skills/shared/external/background-processing/SKILL.md +270 -382
  42. package/pipeline/skills/shared/external/background-processing/evals/evals.json +22 -22
  43. package/pipeline/skills/shared/external/background-processing/references/background-task-patterns.md +169 -317
  44. package/pipeline/skills/shared/external/callkit-voip/SKILL.md +290 -371
  45. package/pipeline/skills/shared/external/callkit-voip/evals/evals.json +24 -24
  46. package/pipeline/skills/shared/external/callkit-voip/references/callkit-patterns.md +175 -343
  47. package/pipeline/skills/shared/external/cloudkit-sync/SKILL.md +292 -381
  48. package/pipeline/skills/shared/external/cloudkit-sync/evals/evals.json +33 -30
  49. package/pipeline/skills/shared/external/cloudkit-sync/references/cloudkit-patterns.md +227 -355
  50. package/pipeline/skills/shared/external/contacts-framework/SKILL.md +197 -346
  51. package/pipeline/skills/shared/external/contacts-framework/evals/evals.json +19 -21
  52. package/pipeline/skills/shared/external/contacts-framework/references/contacts-patterns.md +169 -308
  53. package/pipeline/skills/shared/external/core-bluetooth/SKILL.md +226 -376
  54. package/pipeline/skills/shared/external/core-bluetooth/evals/evals.json +25 -22
  55. package/pipeline/skills/shared/external/core-bluetooth/references/ble-patterns.md +257 -337
  56. package/pipeline/skills/shared/external/core-data/SKILL.md +292 -368
  57. package/pipeline/skills/shared/external/core-data/evals/evals.json +30 -27
  58. package/pipeline/skills/shared/external/core-motion/SKILL.md +235 -324
  59. package/pipeline/skills/shared/external/core-motion/evals/evals.json +31 -27
  60. package/pipeline/skills/shared/external/core-motion/references/motion-patterns.md +210 -310
  61. package/pipeline/skills/shared/external/core-nfc/SKILL.md +292 -366
  62. package/pipeline/skills/shared/external/core-nfc/evals/evals.json +22 -24
  63. package/pipeline/skills/shared/external/core-nfc/references/nfc-patterns.md +233 -329
  64. package/pipeline/skills/shared/external/coreml/SKILL.md +323 -367
  65. package/pipeline/skills/shared/external/coreml/evals/evals.json +24 -21
  66. package/pipeline/skills/shared/external/coreml/references/coreml-swift-integration.md +562 -565
  67. package/pipeline/skills/shared/external/cryptokit/SKILL.md +253 -394
  68. package/pipeline/skills/shared/external/cryptokit/evals/evals.json +20 -18
  69. package/pipeline/skills/shared/external/cryptokit/references/cryptokit-patterns.md +299 -488
  70. package/pipeline/skills/shared/external/debugging-instruments/SKILL.md +270 -323
  71. package/pipeline/skills/shared/external/debugging-instruments/evals/evals.json +27 -30
  72. package/pipeline/skills/shared/external/debugging-instruments/references/instruments-guide.md +167 -315
  73. package/pipeline/skills/shared/external/debugging-instruments/references/lldb-patterns.md +140 -193
  74. package/pipeline/skills/shared/external/device-integrity/SKILL.md +230 -353
  75. package/pipeline/skills/shared/external/device-integrity/evals/evals.json +25 -21
  76. package/pipeline/skills/shared/external/device-integrity/references/device-integrity-patterns.md +159 -197
  77. package/pipeline/skills/shared/external/energykit/SKILL.md +225 -392
  78. package/pipeline/skills/shared/external/energykit/evals/evals.json +29 -28
  79. package/pipeline/skills/shared/external/energykit/references/energykit-patterns.md +174 -470
  80. package/pipeline/skills/shared/external/eventkit-calendar/SKILL.md +261 -383
  81. package/pipeline/skills/shared/external/eventkit-calendar/evals/evals.json +25 -22
  82. package/pipeline/skills/shared/external/eventkit-calendar/references/eventkit-patterns.md +165 -268
  83. package/pipeline/skills/shared/external/healthkit/SKILL.md +252 -303
  84. package/pipeline/skills/shared/external/healthkit/evals/evals.json +24 -23
  85. package/pipeline/skills/shared/external/healthkit/references/healthkit-patterns.md +369 -523
  86. package/pipeline/skills/shared/external/homekit-matter/SKILL.md +233 -348
  87. package/pipeline/skills/shared/external/homekit-matter/evals/evals.json +27 -22
  88. package/pipeline/skills/shared/external/homekit-matter/references/matter-commissioning.md +199 -305
  89. package/pipeline/skills/shared/external/ios-accessibility/SKILL.md +368 -340
  90. package/pipeline/skills/shared/external/ios-accessibility/evals/evals.json +28 -27
  91. package/pipeline/skills/shared/external/ios-accessibility/references/a11y-patterns.md +314 -260
  92. package/pipeline/skills/shared/external/ios-accessibility/references/media-accessibility.md +97 -67
  93. package/pipeline/skills/shared/external/ios-accessibility/references/nutrition-labels.md +165 -101
  94. package/pipeline/skills/shared/external/ios-localization/SKILL.md +258 -371
  95. package/pipeline/skills/shared/external/ios-localization/evals/evals.json +23 -23
  96. package/pipeline/skills/shared/external/ios-localization/references/formatstyle-locale.md +283 -491
  97. package/pipeline/skills/shared/external/ios-localization/references/string-catalogs.md +313 -440
  98. package/pipeline/skills/shared/external/ios-networking/SKILL.md +265 -341
  99. package/pipeline/skills/shared/external/ios-networking/evals/evals.json +24 -24
  100. package/pipeline/skills/shared/external/ios-networking/references/background-websocket.md +425 -652
  101. package/pipeline/skills/shared/external/ios-networking/references/file-storage-patterns.md +143 -285
  102. package/pipeline/skills/shared/external/ios-networking/references/lightweight-clients.md +93 -53
  103. package/pipeline/skills/shared/external/ios-networking/references/network-framework.md +231 -456
  104. package/pipeline/skills/shared/external/ios-networking/references/urlsession-patterns.md +517 -784
  105. package/pipeline/skills/shared/external/ios-simulator/SKILL.md +265 -393
  106. package/pipeline/skills/shared/external/ios-simulator/evals/evals.json +21 -21
  107. package/pipeline/skills/shared/external/ios-simulator/references/simctl-commands.md +177 -270
  108. package/pipeline/skills/shared/external/live-activities/SKILL.md +318 -360
  109. package/pipeline/skills/shared/external/live-activities/evals/evals.json +21 -21
  110. package/pipeline/skills/shared/external/live-activities/references/activitykit-patterns.md +478 -710
  111. package/pipeline/skills/shared/external/mapkit-location/SKILL.md +295 -267
  112. package/pipeline/skills/shared/external/mapkit-location/evals/evals.json +28 -24
  113. package/pipeline/skills/shared/external/mapkit-location/references/mapkit-corelocation-patterns.md +378 -532
  114. package/pipeline/skills/shared/external/mapkit-location/references/mapkit-patterns.md +397 -499
  115. package/pipeline/skills/shared/external/metrickit-diagnostics/SKILL.md +165 -348
  116. package/pipeline/skills/shared/external/metrickit-diagnostics/evals/evals.json +26 -23
  117. package/pipeline/skills/shared/external/metrickit-diagnostics/references/metrickit-patterns.md +123 -130
  118. package/pipeline/skills/shared/external/musickit-audio/SKILL.md +189 -315
  119. package/pipeline/skills/shared/external/musickit-audio/evals/evals.json +22 -21
  120. package/pipeline/skills/shared/external/musickit-audio/references/musickit-patterns.md +181 -270
  121. package/pipeline/skills/shared/external/natural-language/SKILL.md +188 -340
  122. package/pipeline/skills/shared/external/natural-language/evals/evals.json +21 -21
  123. package/pipeline/skills/shared/external/natural-language/references/translation-patterns.md +171 -225
  124. package/pipeline/skills/shared/external/passkit-wallet/SKILL.md +258 -392
  125. package/pipeline/skills/shared/external/passkit-wallet/evals/evals.json +30 -29
  126. package/pipeline/skills/shared/external/passkit-wallet/references/wallet-passes.md +164 -231
  127. package/pipeline/skills/shared/external/pdfkit/SKILL.md +312 -344
  128. package/pipeline/skills/shared/external/pdfkit/evals/evals.json +19 -19
  129. package/pipeline/skills/shared/external/pdfkit/references/pdfkit-patterns.md +413 -624
  130. package/pipeline/skills/shared/external/pencilkit-drawing/SKILL.md +242 -358
  131. package/pipeline/skills/shared/external/pencilkit-drawing/evals/evals.json +25 -21
  132. package/pipeline/skills/shared/external/pencilkit-drawing/references/pencilkit-patterns.md +161 -226
  133. package/pipeline/skills/shared/external/permissionkit/SKILL.md +282 -400
  134. package/pipeline/skills/shared/external/permissionkit/evals/evals.json +27 -30
  135. package/pipeline/skills/shared/external/permissionkit/references/permissionkit-patterns.md +237 -350
  136. package/pipeline/skills/shared/external/photos-camera-media/SKILL.md +276 -325
  137. package/pipeline/skills/shared/external/photos-camera-media/references/av-playback.md +299 -545
  138. package/pipeline/skills/shared/external/photos-camera-media/references/camera-capture.md +344 -588
  139. package/pipeline/skills/shared/external/photos-camera-media/references/image-loading-caching.md +316 -660
  140. package/pipeline/skills/shared/external/photos-camera-media/references/photokit-patterns.md +270 -416
  141. package/pipeline/skills/shared/external/push-notifications/SKILL.md +312 -340
  142. package/pipeline/skills/shared/external/push-notifications/evals/evals.json +27 -26
  143. package/pipeline/skills/shared/external/push-notifications/references/notification-patterns.md +328 -485
  144. package/pipeline/skills/shared/external/push-notifications/references/rich-notifications.md +327 -560
  145. package/pipeline/skills/shared/external/realitykit-ar/SKILL.md +218 -410
  146. package/pipeline/skills/shared/external/realitykit-ar/evals/evals.json +24 -27
  147. package/pipeline/skills/shared/external/realitykit-ar/references/realitykit-patterns.md +221 -348
  148. package/pipeline/skills/shared/external/shareplay-activities/SKILL.md +222 -393
  149. package/pipeline/skills/shared/external/shareplay-activities/evals/evals.json +23 -24
  150. package/pipeline/skills/shared/external/shareplay-activities/references/shareplay-patterns.md +280 -420
  151. package/pipeline/skills/shared/external/speech-recognition/SKILL.md +217 -421
  152. package/pipeline/skills/shared/external/speech-recognition/evals/evals.json +23 -26
  153. package/pipeline/skills/shared/external/speech-recognition/references/speechanalyzer-patterns.md +133 -125
  154. package/pipeline/skills/shared/external/storekit/SKILL.md +228 -204
  155. package/pipeline/skills/shared/external/storekit/evals/evals.json +27 -24
  156. package/pipeline/skills/shared/external/storekit/references/app-review-guidelines.md +98 -109
  157. package/pipeline/skills/shared/external/storekit/references/core-patterns.md +298 -242
  158. package/pipeline/skills/shared/external/storekit/references/storekit-advanced.md +356 -649
  159. package/pipeline/skills/shared/external/swift-api-design-guidelines/SKILL.md +274 -399
  160. package/pipeline/skills/shared/external/swift-api-design-guidelines/evals/evals.json +22 -24
  161. package/pipeline/skills/shared/external/swift-api-design-guidelines/references/argument-labels-and-parameters.md +107 -108
  162. package/pipeline/skills/shared/external/swift-api-design-guidelines/references/conventions-and-special-rules.md +93 -165
  163. package/pipeline/skills/shared/external/swift-api-design-guidelines/references/naming-and-clarity.md +99 -137
  164. package/pipeline/skills/shared/external/swift-api-design-guidelines/references/side-effects-and-mutating-pairs.md +77 -120
  165. package/pipeline/skills/shared/external/swift-architecture/SKILL.md +334 -350
  166. package/pipeline/skills/shared/external/swift-architecture/evals/evals.json +22 -22
  167. package/pipeline/skills/shared/external/swift-charts/SKILL.md +208 -394
  168. package/pipeline/skills/shared/external/swift-charts/evals/evals.json +27 -30
  169. package/pipeline/skills/shared/external/swift-charts/references/charts-patterns.md +351 -762
  170. package/pipeline/skills/shared/external/swift-codable/SKILL.md +339 -343
  171. package/pipeline/skills/shared/external/swift-codable/evals/evals.json +20 -20
  172. package/pipeline/skills/shared/external/swift-concurrency/SKILL.md +303 -351
  173. package/pipeline/skills/shared/external/swift-concurrency/evals/evals.json +27 -24
  174. package/pipeline/skills/shared/external/swift-concurrency/references/approachable-concurrency.md +65 -80
  175. package/pipeline/skills/shared/external/swift-concurrency/references/async-algorithms.md +48 -84
  176. package/pipeline/skills/shared/external/swift-concurrency/references/bridging-interop.md +134 -79
  177. package/pipeline/skills/shared/external/swift-concurrency/references/concurrency-patterns.md +145 -167
  178. package/pipeline/skills/shared/external/swift-concurrency/references/diagnostics.md +62 -50
  179. package/pipeline/skills/shared/external/swift-concurrency/references/swiftui-concurrency.md +92 -121
  180. package/pipeline/skills/shared/external/swift-concurrency/references/synchronization-primitives.md +177 -241
  181. package/pipeline/skills/shared/external/swift-formatstyle/SKILL.md +258 -234
  182. package/pipeline/skills/shared/external/swift-language/SKILL.md +342 -382
  183. package/pipeline/skills/shared/external/swift-language/evals/evals.json +24 -27
  184. package/pipeline/skills/shared/external/swift-language/references/swift-attributes-interop.md +79 -56
  185. package/pipeline/skills/shared/external/swift-language/references/swift-patterns-extended.md +297 -340
  186. package/pipeline/skills/shared/external/swift-security/SKILL.md +180 -161
  187. package/pipeline/skills/shared/external/swift-security/evals/evals.json +25 -25
  188. package/pipeline/skills/shared/external/swift-security/references/biometric-authentication.md +314 -469
  189. package/pipeline/skills/shared/external/swift-security/references/certificate-trust.md +408 -476
  190. package/pipeline/skills/shared/external/swift-security/references/common-anti-patterns.md +260 -530
  191. package/pipeline/skills/shared/external/swift-security/references/compliance-owasp-mapping.md +270 -477
  192. package/pipeline/skills/shared/external/swift-security/references/credential-storage-patterns.md +573 -571
  193. package/pipeline/skills/shared/external/swift-security/references/cryptokit-public-key.md +370 -441
  194. package/pipeline/skills/shared/external/swift-security/references/cryptokit-symmetric.md +332 -433
  195. package/pipeline/skills/shared/external/swift-security/references/keychain-access-control.md +346 -468
  196. package/pipeline/skills/shared/external/swift-security/references/keychain-fundamentals.md +352 -472
  197. package/pipeline/skills/shared/external/swift-security/references/keychain-item-classes.md +431 -432
  198. package/pipeline/skills/shared/external/swift-security/references/keychain-sharing.md +328 -425
  199. package/pipeline/skills/shared/external/swift-security/references/migration-legacy-stores.md +341 -579
  200. package/pipeline/skills/shared/external/swift-security/references/secure-enclave.md +396 -457
  201. package/pipeline/skills/shared/external/swift-security/references/testing-security-code.md +354 -614
  202. package/pipeline/skills/shared/external/swift-testing/SKILL.md +188 -175
  203. package/pipeline/skills/shared/external/swift-testing/evals/evals.json +26 -24
  204. package/pipeline/skills/shared/external/swift-testing/references/testing-advanced.md +80 -84
  205. package/pipeline/skills/shared/external/swift-testing/references/testing-patterns.md +317 -433
  206. package/pipeline/skills/shared/external/swiftdata/SKILL.md +392 -256
  207. package/pipeline/skills/shared/external/swiftdata/evals/evals.json +24 -24
  208. package/pipeline/skills/shared/external/swiftdata/references/core-data-coexistence.md +206 -402
  209. package/pipeline/skills/shared/external/swiftdata/references/indexing.md +59 -52
  210. package/pipeline/skills/shared/external/swiftdata/references/predicate-pitfalls.md +57 -33
  211. package/pipeline/skills/shared/external/swiftdata/references/swiftdata-advanced.md +354 -747
  212. package/pipeline/skills/shared/external/swiftdata/references/swiftdata-queries.md +300 -508
  213. package/pipeline/skills/shared/external/swiftlint/SKILL.md +175 -226
  214. package/pipeline/skills/shared/external/swiftlint/references/adoption-and-configuration.md +141 -208
  215. package/pipeline/skills/shared/external/swiftlint/references/custom-rules-and-analyze.md +100 -109
  216. package/pipeline/skills/shared/external/swiftlint/references/plugins-run-scripts-and-integrations.md +159 -179
  217. package/pipeline/skills/shared/external/swiftlint/references/rule-reference.md +383 -18
  218. package/pipeline/skills/shared/external/swiftlint/references/rules-suppressions-and-baselines.md +143 -229
  219. package/pipeline/skills/shared/external/swiftui-animation/SKILL.md +283 -366
  220. package/pipeline/skills/shared/external/swiftui-animation/references/animation-advanced.md +396 -608
  221. package/pipeline/skills/shared/external/swiftui-animation/references/core-animation-bridge.md +336 -385
  222. package/pipeline/skills/shared/external/swiftui-gestures/SKILL.md +239 -349
  223. package/pipeline/skills/shared/external/swiftui-gestures/references/gesture-patterns.md +228 -310
  224. package/pipeline/skills/shared/external/swiftui-layout-components/SKILL.md +260 -249
  225. package/pipeline/skills/shared/external/swiftui-layout-components/references/form.md +92 -74
  226. package/pipeline/skills/shared/external/swiftui-layout-components/references/grids.md +112 -177
  227. package/pipeline/skills/shared/external/swiftui-layout-components/references/list.md +61 -64
  228. package/pipeline/skills/shared/external/swiftui-layout-components/references/scrollview.md +94 -134
  229. package/pipeline/skills/shared/external/swiftui-liquid-glass/SKILL.md +193 -225
  230. package/pipeline/skills/shared/external/swiftui-liquid-glass/references/liquid-glass.md +173 -327
  231. package/pipeline/skills/shared/external/swiftui-navigation/SKILL.md +193 -168
  232. package/pipeline/skills/shared/external/swiftui-navigation/references/deeplinks.md +127 -150
  233. package/pipeline/skills/shared/external/swiftui-navigation/references/navigationstack.md +132 -133
  234. package/pipeline/skills/shared/external/swiftui-navigation/references/sheets.md +152 -117
  235. package/pipeline/skills/shared/external/swiftui-navigation/references/tabview.md +106 -140
  236. package/pipeline/skills/shared/external/swiftui-patterns/SKILL.md +316 -252
  237. package/pipeline/skills/shared/external/swiftui-patterns/references/architecture-patterns.md +341 -332
  238. package/pipeline/skills/shared/external/swiftui-patterns/references/deprecated-migration.md +547 -854
  239. package/pipeline/skills/shared/external/swiftui-patterns/references/design-polish.md +485 -537
  240. package/pipeline/skills/shared/external/swiftui-patterns/references/platform-and-sharing.md +417 -499
  241. package/pipeline/skills/shared/external/swiftui-performance/SKILL.md +213 -376
  242. package/pipeline/skills/shared/external/swiftui-performance/references/demystify-swiftui-performance-wwdc23.md +86 -175
  243. package/pipeline/skills/shared/external/swiftui-performance/references/optimizing-swiftui-performance-instruments.md +89 -195
  244. package/pipeline/skills/shared/external/swiftui-performance/references/understanding-hangs-in-your-app.md +95 -182
  245. package/pipeline/skills/shared/external/swiftui-performance/references/understanding-improving-swiftui-performance.md +71 -149
  246. package/pipeline/skills/shared/external/swiftui-performance/references/wwdc-session-sources.md +21 -27
  247. package/pipeline/skills/shared/external/swiftui-uikit-interop/SKILL.md +303 -295
  248. package/pipeline/skills/shared/external/swiftui-uikit-interop/references/hosting-migration.md +204 -387
  249. package/pipeline/skills/shared/external/swiftui-uikit-interop/references/representable-recipes.md +469 -683
  250. package/pipeline/skills/shared/external/swiftui-webkit/SKILL.md +140 -186
  251. package/pipeline/skills/shared/external/swiftui-webkit/references/loading-and-observation.md +75 -86
  252. package/pipeline/skills/shared/external/swiftui-webkit/references/local-content-and-custom-schemes.md +63 -60
  253. package/pipeline/skills/shared/external/swiftui-webkit/references/migration-and-fallbacks.md +69 -137
  254. package/pipeline/skills/shared/external/swiftui-webkit/references/navigation-and-javascript.md +95 -67
  255. package/pipeline/skills/shared/external/tipkit/SKILL.md +220 -335
  256. package/pipeline/skills/shared/external/tipkit/references/tipkit-patterns.md +356 -494
  257. package/pipeline/skills/shared/external/vision-framework/SKILL.md +260 -375
  258. package/pipeline/skills/shared/external/vision-framework/references/vision-requests.md +393 -515
  259. package/pipeline/skills/shared/external/vision-framework/references/visionkit-scanner.md +363 -539
  260. package/pipeline/skills/shared/external/weatherkit/SKILL.md +152 -310
  261. package/pipeline/skills/shared/external/weatherkit/references/weatherkit-patterns.md +288 -407
  262. package/pipeline/skills/shared/external/widgetkit/SKILL.md +216 -288
  263. package/pipeline/skills/shared/external/widgetkit/references/widgetkit-advanced.md +414 -719
  264. 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: "Optimize App Store product pages for search visibility and conversion. Use for App Store Optimization (ASO), keyword research, app name/subtitle/keyword-field strategy, conversion-focused descriptions and promotional text, screenshot captions and ordering, Custom Product Pages with assigned search keywords, In-App Events, Product Page Optimization tests, localized metadata, ratings/review strategy, and in-app review prompt timing with RequestReviewAction or AppStore.requestReview. Also use when routing ASO vs App Store review, privacy/ATT, or StoreKit implementation boundaries."
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: "dpearson2699/swift-ios-skills (PolyForm Perimeter 1.0.0)"
5
+ source: multi-agent-pipeline
6
6
  ---
7
7
 
8
- # App Store Optimization (ASO)
8
+ # App Store Optimization
9
9
 
10
- Search visibility and conversion optimization for App Store product pages. This skill covers strategic metadata decisions -- which keywords to target, how to structure descriptions for conversion, and how to use Custom Product Pages and in-app events for discoverability. For metadata compliance rules (character limits, screenshot device requirements, rejection triggers), see the `app-store-review` skill.
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
- - [Title and Subtitle Strategy](#title-and-subtitle-strategy)
16
- - [Keyword Field Strategy](#keyword-field-strategy)
17
- - [Description Structure](#description-structure)
18
- - [Promotional Text](#promotional-text)
19
- - [Screenshot and Preview Optimization](#screenshot-and-preview-optimization)
20
- - [In-App Review Prompts](#in-app-review-prompts)
21
- - [Custom Product Pages](#custom-product-pages)
22
- - [In-App Events](#in-app-events)
23
- - [Product Page Optimization](#product-page-optimization)
24
- - [Ratings and Review Management](#ratings-and-review-management)
25
- - [Localized Metadata Optimization](#localized-metadata-optimization)
26
- - [Common Mistakes](#common-mistakes)
27
- - [Review Checklist](#review-checklist)
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 pillars:
33
-
34
- 1. **Search visibility** -- ranking for relevant queries so users find the app.
35
- 2. **Conversion rate** -- convincing users who land on the product page to download.
36
-
37
- Apply this skill when a developer asks about improving discoverability, keyword strategy, download conversion, or any product page element that affects either pillar.
38
-
39
- For metadata format rules and compliance guardrails, see the `app-store-review` skill. This skill assumes the developer is working within those constraints and focuses on strategy.
40
-
41
- When producing an ASO plan or ownership split, explicitly separate **Visibility** from **Conversion**. Visibility covers search and browse discoverability: app name, subtitle, keyword field, primary category, localization, ratings and reviews, relevant In-App Events, and Custom Product Pages. Conversion covers the product-page decision path: screenshots, app previews, description, promotional text, Custom Product Page messaging, Product Page Optimization tests, and alignment between public claims, screenshots, and the real in-app UI.
42
-
43
- Boundary rule: ASO owns listing strategy, keyword/message fit, screenshots, promotional text, Custom Product Pages, Product Page Optimization, localization, In-App Event positioning, ratings strategy, and lightweight review-prompt timing. `app-store-review` owns review compliance, PrivacyInfo.xcprivacy, ATT wording, and submission guardrails; ASO only cross-checks that public claims and screenshots are accurate. `storekit` owns purchase implementation, subscription paywall code, entitlement checks, and monetization mechanics.
44
-
45
- For any full ASO plan, include these explicit checklist items so important App Store mechanics do not get dropped:
46
-
47
- - Visibility: app name, subtitle, keyword field, primary category, localization, ratings/reviews, In-App Events if relevant, and Custom Product Pages with assigned keyword search visibility.
48
- - Conversion: description hook, first screenshots or app preview, promotional text, Custom Product Page message fit, Product Page Optimization, and public-claim/screenshot accuracy.
49
- - Experimentation: one PPO hypothesis, up to three treatments, selected localizations, target metric, and decision rule.
50
- - Review prompts: positive trigger, bad-trigger avoidance, and the note that StoreKit decides whether a request displays a prompt.
51
-
52
- Do not leave these implicit: reject high-volume keywords, state CPP capacity as 70 pages, list up to three PPO treatments, and mark In-App Events and ratings ASO-owned.
53
-
54
- ## Title and Subtitle Strategy
55
-
56
- Apple indexes the app name and subtitle for search. Together they provide 60 characters (30 + 30) of indexed, high-visibility keyword real estate.
57
-
58
- ### Positioning framework
59
-
60
- Use **Brand -- Keyword** when the brand already has recognition, **Keyword -- Brand** when a new app must compete on category terms, and a blended name when the brand naturally contains a relevant keyword.
61
-
62
- ### Rules
63
-
64
- - Do not repeat words between the name and subtitle -- Apple indexes both, so duplicates waste characters.
65
- - Front-load the highest-value keyword in whichever field has more room.
66
- - Avoid generic filler words ("the", "best", "app") -- they consume space without search value.
67
- - The subtitle should communicate the primary value proposition, not a tagline.
68
-
69
- ## Keyword Field Strategy
70
-
71
- The keyword field is 100 characters, comma-separated, no spaces after commas. See the `app-store-review` skill for the full format rules. This section focuses on which keywords to choose and how to prioritize them.
72
-
73
- ### Research process
74
-
75
- 1. **Competitor audit** -- identify the top 5-10 competitors in the category and note which keywords appear in their titles, subtitles, and descriptions.
76
- 2. **Category analysis** -- identify terms users associate with the app's category that competitors may be missing.
77
- 3. **Search Ads signals** -- run Apple Search Ads discovery campaigns to surface high-intent queries with actual impression and tap data.
78
- 4. **Iterate each release** -- update keywords based on Search Ads performance, App Analytics impressions, and conversion data.
79
-
80
- ### Prioritization
81
-
82
- Rank candidate keywords by three factors:
83
-
84
- | Factor | Weight | Signal |
85
- |--------|--------|--------|
86
- | **Relevance** | Highest | Does the keyword describe what the app actually does? |
87
- | **Search volume** | Medium | Are users actually searching for this term? |
88
- | **Competition** | Lower | How many apps target this keyword? |
89
-
90
- Relevance always wins. A high-volume keyword that does not describe the app will get impressions but not conversions.
91
-
92
- For search relevance, prioritize user intent first, then metadata fit. Always account for the primary category alongside the app name, subtitle, and keyword field; do not repeat category terms in the keyword field.
93
-
94
- ### Tactical rules
95
-
96
- - Deduplicate against title and subtitle -- Apple already indexes those words.
97
- - Use singular forms only -- Apple matches both singular and plural from singular.
98
- - Omit the category name -- Apple adds the app's primary category to search automatically.
99
- - Omit spaces after commas -- they count against the 100-character limit.
100
- - Consider abbreviations and common misspellings if they are genuine search terms.
101
- - Reserve space for the most relevant, highest-intent terms; do not spend characters on terms that only weakly describe the app.
102
-
103
- **See:** [references/keyword-research-methodology.md](references/keyword-research-methodology.md) for the full research process, scoring framework, and indexing details.
104
-
105
- ## Description Structure
106
-
107
- Apple's search guidance centers text relevance on the app name, subtitle, keywords, and primary category, plus behavior signals such as downloads, ratings, and reviews. Treat the description as conversion copy, not a place to stuff extra search terms: users who expand it are evaluating whether to download.
108
-
109
- ### Four-part structure
110
-
111
- 1. **Hook** (first 1-3 lines) -- the only text visible before the "more" fold. Lead with the strongest benefit or differentiator. This is the most important copy on the page.
112
- 2. **Feature highlights** -- 4-6 short feature descriptions. Use Unicode bullet characters (•) since the App Store does not render markdown. Focus on outcomes, not technical details.
113
- 3. **Social proof** -- awards, press quotes, user count milestones, or notable ratings. One or two lines.
114
- 4. **Call to action** -- a closing line encouraging the download. Keep it short and benefit-focused.
115
-
116
- ### Formatting notes
117
-
118
- - The App Store does not render markdown, HTML, or rich text. Use plain text with Unicode characters for structure.
119
- - Short paragraphs with line breaks between them. Walls of text kill conversion.
120
- - Write per locale -- translate the structure, not the words. See [Localized Metadata Optimization](#localized-metadata-optimization).
121
-
122
- ## Promotional Text
123
-
124
- Promotional text appears above the description, is limited to 170 characters, and can be updated at any time without submitting a new app version.
125
-
126
- ### Rotation strategy
127
-
128
- Update promotional text for feature launches, seasonal moments, awards or press, promotions, and in-app events. Do not leave it static across releases; if there is nothing timely to promote, rotate between the app's strongest selling points.
129
-
130
- ## Screenshot and Preview Optimization
131
-
132
- Most users never scroll past the first 3 visible screenshots. These slots determine whether a user engages with the full product page or moves on.
133
-
134
- ### First 3 screenshots
135
-
136
- - Lead with the primary value proposition -- the screen that best demonstrates why someone should download.
137
- - Never place onboarding, splash, or loading screens in the first 3 slots.
138
- - Each screenshot should demonstrate a different benefit or feature.
139
-
140
- ### Caption writing
141
-
142
- - Write benefit-oriented captions, not feature labels. "Never miss a deadline" converts better than "Calendar View".
143
- - Keep captions to 2-5 words above the screenshot and one short line below.
144
- - Use action verbs: "Track", "Share", "Discover", "Build".
145
-
146
- ### Ordering strategy
147
-
148
- Use slot 1 for the primary value proposition, slot 2 for the core differentiator, slot 3 for the next strongest feature, and later slots for supporting features, social proof, or edge cases.
149
-
150
- ### App preview video
151
-
152
- If a preview video is present, it occupies the first slot. The first frame becomes the poster image when autoplay is disabled -- choose a frame that works as a standalone screenshot.
153
-
154
- For screenshot device requirements and compliance rules, see the `app-store-review` skill.
155
-
156
- ## In-App Review Prompts
157
-
158
- StoreKit provides `RequestReviewAction` for SwiftUI and `AppStore.requestReview(in:)` for UIKit. Use this section for timing strategy; for the full StoreKit API surface, see the `storekit` skill.
159
-
160
- ### System behavior
161
-
162
- - The system enforces a maximum of 3 prompts per 365-day period per device for users who have not yet rated the app.
163
- - The API is a request, not a guarantee -- StoreKit decides whether to show the prompt.
164
- - During development, the prompt always appears. In TestFlight, it never appears.
165
-
166
- ### Prompt timing
167
-
168
- Good triggers include completing a meaningful task, achieving a milestone or streak, a positive in-app moment, or several active sessions. Bad triggers include first launch, onboarding, errors, crashes, failed transactions, or direct button-tap pre-screens. Do not gate the prompt behind a "Rate this app?" dialog -- Apple discourages intercepting the system prompt and may reject apps that pre-screen.
169
-
170
- ### Persistent review link
171
-
172
- For a settings screen or "Rate us" option, link directly to the App Store review page using the URL format:
173
-
174
- ```
175
- https://apps.apple.com/app/id{APP_ID}?action=write-review
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
- This opens the review writing screen directly and is not subject to the 3x/year system limit.
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
- Custom Product Pages allow up to 70 variant product pages per app. Each variant can have different screenshots, app preview videos, promotional text, and assigned search keywords -- tailored to a specific audience or acquisition channel.
183
-
184
- When recommending Custom Product Pages, explicitly mention both the 70-page capacity and assigned-keyword search visibility, then map each page to a distinct audience, message, keyword/ad intent, and measurement plan.
185
-
186
- ### Use cases
187
-
188
- Use separate pages for paid search ad groups, social campaigns, feature-specific landings, seasonal campaigns, and other acquisition paths where the first screenshot or promotional text should match a distinct user intent.
189
-
190
- ### Setup
191
-
192
- - Each Custom Product Page gets a unique App Store URL usable in ad campaigns, deep links, and web pages.
193
- - Approved pages can also appear in App Store search for assigned keywords from the latest approved app version.
194
- - Pages can be localized independently.
195
- - Create pages in App Store Connect under the Custom Product Pages tab.
196
- - Name pages descriptively for internal tracking (e.g., "Search-FitnessTracking", "Social-HolidayCampaign").
197
-
198
- **See:** [references/product-page-variants.md](references/product-page-variants.md) for setup details, URL structure, and campaign mapping strategy.
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
- In-app events surface in App Store search results, on the Today tab, and in personalized recommendations. They increase visibility during the event window and can re-engage lapsed users.
203
-
204
- ### Event types
205
-
206
- Choose the Apple event badge that matches the actual in-app experience: Challenge, Competition, Live Event, Major Update, New Season, Premiere, or Special Event. Do not manufacture events without real time-bound content.
207
-
208
- ### Metadata limits
209
-
210
- Event name is 30 characters, short description 50, long description 120, and the event card image is required at 16:9 (1920x1080 or similar).
211
-
212
- ### Strategy
213
-
214
- - Schedule events around feature releases, seasonal moments, or content drops.
215
- - Write the event name and short description with search-result context in mind; they appear on event cards in surfaces such as Search and the Today tab.
216
- - Events appear on the product page and can appear in search results, giving the app a visual card that can increase tap-through rate when the event is timely and relevant.
217
- - Overlap events strategically: end the current event as the next one begins to maintain continuous search visibility.
218
-
219
- **See:** [references/product-page-variants.md](references/product-page-variants.md) for event scheduling templates.
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 provides native testing for product page elements.
224
-
225
- ### What can be tested
226
-
227
- - App icon (alternate icons)
228
- - Screenshots (order, content, captions)
229
- - App preview video
230
-
231
- Each test can include up to three treatments against the original product page, which serves as the default baseline.
232
-
233
- ### Test design
234
-
235
- - Run tests for a minimum of 7 days to account for day-of-week variation.
236
- - Ensure sufficient traffic for statistical significance -- low-traffic apps may need longer test durations.
237
- - Test one hypothesis at a time as a methodology choice (e.g., screenshot order OR caption copy, not both simultaneously), even when App Store Connect allows multiple treatments.
238
- - Select the localizations included in the test; all supported localizations are selected by default.
239
- - A test runs for up to 90 days or until manually stopped. Results appear in App Analytics after at least five first-time downloads are associated with the test.
240
- - PPO recommendations should name the hypothesis, up to three treatments, selected localizations, target metric, and decision rule.
241
-
242
- ### Interpreting results
243
-
244
- - Focus on conversion rate lift (impressions-to-downloads), not absolute download numbers.
245
- - App Store Connect reports conversion rate, lift, and confidence. Treat 90%+ confidence as the threshold for "Performing Better" or "Performing Worse" decisions.
246
- - After applying a winner, wait before starting the next test to establish a clean baseline.
247
-
248
- ## Ratings and Review Management
249
-
250
- Ratings and reviews appear on the product page and in search results, influence App Store search ranking, and affect conversion. The strategy is to earn more positive, recent feedback by prompting only after successful user moments and by responding constructively to issues.
251
-
252
- ### Review response strategy
253
-
254
- - Respond to negative reviews in App Store Connect -- a professional response improves perceived quality even without changing the rating number.
255
- - Acknowledge the issue, state what is being done (or has been fixed), and keep the tone neutral.
256
- - Use review language as customer research: users often describe their goals, frustrations, and category vocabulary in words that can improve future metadata and screenshot messaging.
257
-
258
- ### Rating reset
259
-
260
- When submitting a new version, you can choose to reset the displayed rating. Use this strategically:
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
- Localizing ASO is not the same as translating the app UI. Keyword strategy, descriptions, and screenshot captions must be researched and written per market, not machine-translated from the primary locale.
267
-
268
- ### Key principles
269
-
270
- - **Research keywords per market.** The most-searched term for "photo editor" in Japanese is not a direct translation of "photo editor."
271
- - **Rewrite descriptions per locale.** Adapt the hook-features-proof-CTA structure to local conventions and selling points.
272
- - **Localize each metadata surface.** App Store guidance explicitly calls out localized descriptions, keywords, app previews, and screenshots; do not assume direct translations or unsupported cross-locale indexing behavior.
273
- - **Localize screenshot captions.** Captions in the user's language convert better than untranslated English.
274
-
275
- For in-app string localization (String Catalogs, FormatStyle, right-to-left layout), see the `ios-localization` skill.
276
-
277
- ## Common Mistakes
278
-
279
- 1. **Duplicating title/subtitle/category words in the keyword field.**
280
- 2. **Writing feature-descriptive captions instead of benefit-oriented screenshot copy.**
281
- 3. **Translating keywords instead of researching per-market search terms.**
282
- 4. **Prompting for reviews after onboarding, errors, crashes, or failed transactions.**
283
- 5. **Ignoring the first three screenshot slots or leading with onboarding/splash screens.**
284
- 6. **Leaving promotional text static across releases and campaigns.**
285
- 7. **Running PPO tests without enough duration, traffic, or a single clear hypothesis.**
286
- 8. **Adding spaces after commas in the keyword field.**
287
- 9. **Reusing identical assets across all Custom Product Pages.**
288
- 10. **Ignoring negative App Store reviews instead of responding and learning from customer language.**
289
-
290
- ## Review Checklist
291
-
292
- - [ ] Title uses high-value keyword alongside brand name; no words repeated in subtitle
293
- - [ ] Subtitle communicates primary value proposition within 30 characters
294
- - [ ] Keyword field uses all 100 characters; no spaces after commas; no duplicates of title/subtitle words; singular forms only
295
- - [ ] Description follows hook-features-proof-CTA structure; first 3 lines compelling before the fold
296
- - [ ] Promotional text is current and relevant to the latest release or event
297
- - [ ] First 3 screenshots show highest-value screens with benefit-oriented captions
298
- - [ ] App preview video (if present) leads with the core feature in the first 5 seconds
299
- - [ ] `requestReview()` is placed after a positive user moment, not on first launch or after errors
300
- - [ ] Custom Product Pages created for distinct acquisition channels with tailored screenshots
301
- - [ ] In-app events configured for upcoming launches, seasons, or feature releases
302
- - [ ] Metadata localized with per-market keyword research for all supported locales
303
- - [ ] Compliance cross-check: all metadata passes the `app-store-review` skill checklist before submission
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 methodology: [references/keyword-research-methodology.md](references/keyword-research-methodology.md)
308
- - Custom Product Pages, A/B testing, and in-app events: [references/product-page-variants.md](references/product-page-variants.md)
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.