@mmerterden/multi-agent-pipeline 20.6.0 → 20.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (326) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/LICENSE +0 -10
  3. package/docs/facts.json +1 -1
  4. package/manifest.json +328 -329
  5. package/package.json +2 -2
  6. package/pipeline/multi-agent-refs/features/design-conformance.md +62 -64
  7. package/pipeline/scripts/_notices.mjs +12 -1
  8. package/pipeline/scripts/gen-skills-index.mjs +1 -1
  9. package/pipeline/skills/.skill-manifest.json +106 -106
  10. package/pipeline/skills/shared/README.md +71 -71
  11. package/pipeline/skills/shared/external/agent-introspection-debugging/SKILL.md +1 -0
  12. package/pipeline/skills/shared/external/alarmkit/SKILL.md +373 -381
  13. package/pipeline/skills/shared/external/alarmkit/evals/evals.json +23 -18
  14. package/pipeline/skills/shared/external/alarmkit/references/alarmkit-patterns.md +328 -378
  15. package/pipeline/skills/shared/external/android-architecture/SKILL.md +2 -0
  16. package/pipeline/skills/shared/external/android-performance/SKILL.md +2 -0
  17. package/pipeline/skills/shared/external/android-security/SKILL.md +2 -0
  18. package/pipeline/skills/shared/external/app-clips/SKILL.md +260 -160
  19. package/pipeline/skills/shared/external/app-clips/evals/evals.json +27 -27
  20. package/pipeline/skills/shared/external/app-clips/references/data-handoff-notifications-location.md +150 -83
  21. package/pipeline/skills/shared/external/app-clips/references/routing-and-experiences.md +135 -83
  22. package/pipeline/skills/shared/external/app-clips/references/size-capabilities-and-promotion.md +143 -85
  23. package/pipeline/skills/shared/external/app-intents/SKILL.md +302 -304
  24. package/pipeline/skills/shared/external/app-intents/evals/evals.json +21 -21
  25. package/pipeline/skills/shared/external/app-intents/references/appintents-advanced.md +594 -894
  26. package/pipeline/skills/shared/external/app-store-optimization/SKILL.md +339 -277
  27. package/pipeline/skills/shared/external/app-store-optimization/evals/evals.json +27 -23
  28. package/pipeline/skills/shared/external/app-store-optimization/references/keyword-research-methodology.md +105 -122
  29. package/pipeline/skills/shared/external/app-store-optimization/references/product-page-variants.md +143 -166
  30. package/pipeline/skills/shared/external/app-store-review/SKILL.md +307 -326
  31. package/pipeline/skills/shared/external/app-store-review/evals/evals.json +21 -21
  32. package/pipeline/skills/shared/external/app-store-review/references/privacy-manifest.md +105 -67
  33. package/pipeline/skills/shared/external/app-store-review/references/review-checklists.md +114 -101
  34. package/pipeline/skills/shared/external/apple-on-device-ai/SKILL.md +333 -360
  35. package/pipeline/skills/shared/external/apple-on-device-ai/evals/evals.json +24 -27
  36. package/pipeline/skills/shared/external/apple-on-device-ai/references/coreml-conversion.md +215 -322
  37. package/pipeline/skills/shared/external/apple-on-device-ai/references/coreml-optimization.md +161 -256
  38. package/pipeline/skills/shared/external/apple-on-device-ai/references/foundation-models.md +277 -387
  39. package/pipeline/skills/shared/external/apple-on-device-ai/references/mlx-swift.md +196 -210
  40. package/pipeline/skills/shared/external/authentication/SKILL.md +265 -381
  41. package/pipeline/skills/shared/external/authentication/evals/evals.json +25 -25
  42. package/pipeline/skills/shared/external/authentication/references/keychain-biometric.md +133 -178
  43. package/pipeline/skills/shared/external/authentication/references/passkeys.md +111 -147
  44. package/pipeline/skills/shared/external/avkit/SKILL.md +267 -364
  45. package/pipeline/skills/shared/external/avkit/evals/evals.json +26 -26
  46. package/pipeline/skills/shared/external/avkit/references/avkit-patterns.md +375 -493
  47. package/pipeline/skills/shared/external/background-processing/SKILL.md +270 -382
  48. package/pipeline/skills/shared/external/background-processing/evals/evals.json +22 -22
  49. package/pipeline/skills/shared/external/background-processing/references/background-task-patterns.md +169 -317
  50. package/pipeline/skills/shared/external/backlog/BACKLOG.md +1 -1
  51. package/pipeline/skills/shared/external/backlog/SKILL.md +56 -33
  52. package/pipeline/skills/shared/external/callkit-voip/SKILL.md +290 -371
  53. package/pipeline/skills/shared/external/callkit-voip/evals/evals.json +24 -24
  54. package/pipeline/skills/shared/external/callkit-voip/references/callkit-patterns.md +175 -343
  55. package/pipeline/skills/shared/external/ci-cd-pipelines/SKILL.md +1 -0
  56. package/pipeline/skills/shared/external/cloudkit-sync/SKILL.md +292 -381
  57. package/pipeline/skills/shared/external/cloudkit-sync/evals/evals.json +33 -30
  58. package/pipeline/skills/shared/external/cloudkit-sync/references/cloudkit-patterns.md +227 -355
  59. package/pipeline/skills/shared/external/compose-components/SKILL.md +2 -0
  60. package/pipeline/skills/shared/external/compose-navigation/SKILL.md +3 -2
  61. package/pipeline/skills/shared/external/compose-testing/SKILL.md +2 -0
  62. package/pipeline/skills/shared/external/contacts-framework/SKILL.md +197 -346
  63. package/pipeline/skills/shared/external/contacts-framework/evals/evals.json +19 -21
  64. package/pipeline/skills/shared/external/contacts-framework/references/contacts-patterns.md +169 -308
  65. package/pipeline/skills/shared/external/core-bluetooth/SKILL.md +226 -376
  66. package/pipeline/skills/shared/external/core-bluetooth/evals/evals.json +25 -22
  67. package/pipeline/skills/shared/external/core-bluetooth/references/ble-patterns.md +257 -337
  68. package/pipeline/skills/shared/external/core-data/SKILL.md +292 -368
  69. package/pipeline/skills/shared/external/core-data/evals/evals.json +30 -27
  70. package/pipeline/skills/shared/external/core-motion/SKILL.md +235 -324
  71. package/pipeline/skills/shared/external/core-motion/evals/evals.json +31 -27
  72. package/pipeline/skills/shared/external/core-motion/references/motion-patterns.md +210 -310
  73. package/pipeline/skills/shared/external/core-nfc/SKILL.md +292 -366
  74. package/pipeline/skills/shared/external/core-nfc/evals/evals.json +22 -24
  75. package/pipeline/skills/shared/external/core-nfc/references/nfc-patterns.md +233 -329
  76. package/pipeline/skills/shared/external/coreml/SKILL.md +323 -367
  77. package/pipeline/skills/shared/external/coreml/evals/evals.json +24 -21
  78. package/pipeline/skills/shared/external/coreml/references/coreml-swift-integration.md +562 -565
  79. package/pipeline/skills/shared/external/council/SKILL.md +1 -0
  80. package/pipeline/skills/shared/external/cryptokit/SKILL.md +253 -394
  81. package/pipeline/skills/shared/external/cryptokit/evals/evals.json +20 -18
  82. package/pipeline/skills/shared/external/cryptokit/references/cryptokit-patterns.md +299 -488
  83. package/pipeline/skills/shared/external/css-modern/SKILL.md +1 -0
  84. package/pipeline/skills/shared/external/database-patterns/SKILL.md +1 -0
  85. package/pipeline/skills/shared/external/debugging-instruments/SKILL.md +270 -323
  86. package/pipeline/skills/shared/external/debugging-instruments/evals/evals.json +27 -30
  87. package/pipeline/skills/shared/external/debugging-instruments/references/instruments-guide.md +167 -315
  88. package/pipeline/skills/shared/external/debugging-instruments/references/lldb-patterns.md +140 -193
  89. package/pipeline/skills/shared/external/device-integrity/SKILL.md +230 -353
  90. package/pipeline/skills/shared/external/device-integrity/evals/evals.json +25 -21
  91. package/pipeline/skills/shared/external/device-integrity/references/device-integrity-patterns.md +159 -197
  92. package/pipeline/skills/shared/external/energykit/SKILL.md +225 -392
  93. package/pipeline/skills/shared/external/energykit/evals/evals.json +29 -28
  94. package/pipeline/skills/shared/external/energykit/references/energykit-patterns.md +174 -470
  95. package/pipeline/skills/shared/external/eventkit-calendar/SKILL.md +261 -383
  96. package/pipeline/skills/shared/external/eventkit-calendar/evals/evals.json +25 -22
  97. package/pipeline/skills/shared/external/eventkit-calendar/references/eventkit-patterns.md +165 -268
  98. package/pipeline/skills/shared/external/evidence-github/SKILL.md +2 -0
  99. package/pipeline/skills/shared/external/evidence-registry/SKILL.md +2 -0
  100. package/pipeline/skills/shared/external/gradle-kotlin-dsl/SKILL.md +2 -0
  101. package/pipeline/skills/shared/external/healthkit/SKILL.md +252 -303
  102. package/pipeline/skills/shared/external/healthkit/evals/evals.json +24 -23
  103. package/pipeline/skills/shared/external/healthkit/references/healthkit-patterns.md +369 -523
  104. package/pipeline/skills/shared/external/homekit-matter/SKILL.md +233 -348
  105. package/pipeline/skills/shared/external/homekit-matter/evals/evals.json +27 -22
  106. package/pipeline/skills/shared/external/homekit-matter/references/matter-commissioning.md +199 -305
  107. package/pipeline/skills/shared/external/html-semantic/SKILL.md +1 -0
  108. package/pipeline/skills/shared/external/humanizer/SKILL.md +1 -0
  109. package/pipeline/skills/shared/external/ios-accessibility/SKILL.md +368 -340
  110. package/pipeline/skills/shared/external/ios-accessibility/evals/evals.json +28 -27
  111. package/pipeline/skills/shared/external/ios-accessibility/references/a11y-patterns.md +314 -260
  112. package/pipeline/skills/shared/external/ios-accessibility/references/media-accessibility.md +97 -67
  113. package/pipeline/skills/shared/external/ios-accessibility/references/nutrition-labels.md +165 -101
  114. package/pipeline/skills/shared/external/ios-coding-standard/SKILL.md +1 -0
  115. package/pipeline/skills/shared/external/ios-localization/SKILL.md +258 -371
  116. package/pipeline/skills/shared/external/ios-localization/evals/evals.json +23 -23
  117. package/pipeline/skills/shared/external/ios-localization/references/formatstyle-locale.md +283 -491
  118. package/pipeline/skills/shared/external/ios-localization/references/string-catalogs.md +313 -440
  119. package/pipeline/skills/shared/external/ios-module-structure/SKILL.md +1 -0
  120. package/pipeline/skills/shared/external/ios-networking/SKILL.md +265 -341
  121. package/pipeline/skills/shared/external/ios-networking/evals/evals.json +24 -24
  122. package/pipeline/skills/shared/external/ios-networking/references/background-websocket.md +425 -652
  123. package/pipeline/skills/shared/external/ios-networking/references/file-storage-patterns.md +143 -285
  124. package/pipeline/skills/shared/external/ios-networking/references/lightweight-clients.md +93 -53
  125. package/pipeline/skills/shared/external/ios-networking/references/network-framework.md +231 -456
  126. package/pipeline/skills/shared/external/ios-networking/references/urlsession-patterns.md +517 -784
  127. package/pipeline/skills/shared/external/ios-security/SKILL.md +2 -0
  128. package/pipeline/skills/shared/external/ios-simulator/SKILL.md +265 -393
  129. package/pipeline/skills/shared/external/ios-simulator/evals/evals.json +21 -21
  130. package/pipeline/skills/shared/external/ios-simulator/references/simctl-commands.md +177 -270
  131. package/pipeline/skills/shared/external/live-activities/SKILL.md +318 -360
  132. package/pipeline/skills/shared/external/live-activities/evals/evals.json +21 -21
  133. package/pipeline/skills/shared/external/live-activities/references/activitykit-patterns.md +478 -710
  134. package/pipeline/skills/shared/external/localization-reuse-map/SKILL.md +91 -283
  135. package/pipeline/skills/shared/external/localization-reuse-map/reference/format-and-output.md +119 -151
  136. package/pipeline/skills/shared/external/localization-reuse-map/reference/publish-and-snapshot.md +60 -90
  137. package/pipeline/skills/shared/external/localization-reuse-map/reference/sources-and-recipes.md +119 -156
  138. package/pipeline/skills/shared/external/localization-reuse-map/scripts/build-artifact.py +726 -787
  139. package/pipeline/skills/shared/external/localization-reuse-map/scripts/build-spreadsheet.py +253 -288
  140. package/pipeline/skills/shared/external/localization-reuse-map/scripts/fetch-annotations.py +243 -304
  141. package/pipeline/skills/shared/external/localization-reuse-map/scripts/fetch-legacy-labels.py +88 -104
  142. package/pipeline/skills/shared/external/localization-reuse-map/scripts/publish-confluence.py +181 -235
  143. package/pipeline/skills/shared/external/localization-reuse-map/scripts/render-key-shots.py +198 -263
  144. package/pipeline/skills/shared/external/localization-reuse-map/scripts/render-overlay.py +461 -466
  145. package/pipeline/skills/shared/external/localization-reuse-map/scripts/resolve-legacy-values.py +145 -151
  146. package/pipeline/skills/shared/external/localization-reuse-map/scripts/resolve-new-values.py +123 -141
  147. package/pipeline/skills/shared/external/localization-reuse-map/scripts/scan-screen-keys.py +146 -157
  148. package/pipeline/skills/shared/external/localization-reuse-map/scripts/snapshot-resources.sh +22 -19
  149. package/pipeline/skills/shared/external/localization-reuse-map/scripts/verify-map.py +156 -140
  150. package/pipeline/skills/shared/external/mapkit-location/SKILL.md +295 -267
  151. package/pipeline/skills/shared/external/mapkit-location/evals/evals.json +28 -24
  152. package/pipeline/skills/shared/external/mapkit-location/references/mapkit-corelocation-patterns.md +378 -532
  153. package/pipeline/skills/shared/external/mapkit-location/references/mapkit-patterns.md +397 -499
  154. package/pipeline/skills/shared/external/metrickit-diagnostics/SKILL.md +165 -348
  155. package/pipeline/skills/shared/external/metrickit-diagnostics/evals/evals.json +26 -23
  156. package/pipeline/skills/shared/external/metrickit-diagnostics/references/metrickit-patterns.md +123 -130
  157. package/pipeline/skills/shared/external/musickit-audio/SKILL.md +189 -315
  158. package/pipeline/skills/shared/external/musickit-audio/evals/evals.json +22 -21
  159. package/pipeline/skills/shared/external/musickit-audio/references/musickit-patterns.md +181 -270
  160. package/pipeline/skills/shared/external/natural-language/SKILL.md +188 -340
  161. package/pipeline/skills/shared/external/natural-language/evals/evals.json +21 -21
  162. package/pipeline/skills/shared/external/natural-language/references/translation-patterns.md +171 -225
  163. package/pipeline/skills/shared/external/nextjs-app-router/SKILL.md +1 -0
  164. package/pipeline/skills/shared/external/passkit-wallet/SKILL.md +258 -392
  165. package/pipeline/skills/shared/external/passkit-wallet/evals/evals.json +30 -29
  166. package/pipeline/skills/shared/external/passkit-wallet/references/wallet-passes.md +164 -231
  167. package/pipeline/skills/shared/external/pdfkit/SKILL.md +312 -344
  168. package/pipeline/skills/shared/external/pdfkit/evals/evals.json +19 -19
  169. package/pipeline/skills/shared/external/pdfkit/references/pdfkit-patterns.md +413 -624
  170. package/pipeline/skills/shared/external/pencilkit-drawing/SKILL.md +242 -358
  171. package/pipeline/skills/shared/external/pencilkit-drawing/evals/evals.json +25 -21
  172. package/pipeline/skills/shared/external/pencilkit-drawing/references/pencilkit-patterns.md +161 -226
  173. package/pipeline/skills/shared/external/permissionkit/SKILL.md +282 -400
  174. package/pipeline/skills/shared/external/permissionkit/evals/evals.json +27 -30
  175. package/pipeline/skills/shared/external/permissionkit/references/permissionkit-patterns.md +237 -350
  176. package/pipeline/skills/shared/external/photos-camera-media/SKILL.md +276 -325
  177. package/pipeline/skills/shared/external/photos-camera-media/references/av-playback.md +299 -545
  178. package/pipeline/skills/shared/external/photos-camera-media/references/camera-capture.md +344 -588
  179. package/pipeline/skills/shared/external/photos-camera-media/references/image-loading-caching.md +316 -660
  180. package/pipeline/skills/shared/external/photos-camera-media/references/photokit-patterns.md +270 -416
  181. package/pipeline/skills/shared/external/play-store-review/SKILL.md +2 -0
  182. package/pipeline/skills/shared/external/push-notifications/SKILL.md +312 -340
  183. package/pipeline/skills/shared/external/push-notifications/evals/evals.json +27 -26
  184. package/pipeline/skills/shared/external/push-notifications/references/notification-patterns.md +328 -485
  185. package/pipeline/skills/shared/external/push-notifications/references/rich-notifications.md +327 -560
  186. package/pipeline/skills/shared/external/python-patterns/SKILL.md +1 -0
  187. package/pipeline/skills/shared/external/react-best-practices/SKILL.md +1 -0
  188. package/pipeline/skills/shared/external/realitykit-ar/SKILL.md +218 -410
  189. package/pipeline/skills/shared/external/realitykit-ar/evals/evals.json +24 -27
  190. package/pipeline/skills/shared/external/realitykit-ar/references/realitykit-patterns.md +221 -348
  191. package/pipeline/skills/shared/external/rest-api-design/SKILL.md +1 -0
  192. package/pipeline/skills/shared/external/retrofit-networking/SKILL.md +2 -0
  193. package/pipeline/skills/shared/external/room-database/SKILL.md +2 -0
  194. package/pipeline/skills/shared/external/search-first/SKILL.md +1 -0
  195. package/pipeline/skills/shared/external/shareplay-activities/SKILL.md +222 -393
  196. package/pipeline/skills/shared/external/shareplay-activities/evals/evals.json +23 -24
  197. package/pipeline/skills/shared/external/shareplay-activities/references/shareplay-patterns.md +280 -420
  198. package/pipeline/skills/shared/external/signal-community/SKILL.md +2 -0
  199. package/pipeline/skills/shared/external/skill-creator/SKILL.md +80 -41
  200. package/pipeline/skills/shared/external/skill-creator/audit.md +63 -59
  201. package/pipeline/skills/shared/external/skill-creator/checklist.md +28 -20
  202. package/pipeline/skills/shared/external/skill-creator/examples.md +40 -40
  203. package/pipeline/skills/shared/external/skill-creator/label-check.md +48 -36
  204. package/pipeline/skills/shared/external/skill-creator/scripts/audit-panel.js +91 -100
  205. package/pipeline/skills/shared/external/skill-creator/template.md +51 -39
  206. package/pipeline/skills/shared/external/speech-recognition/SKILL.md +217 -421
  207. package/pipeline/skills/shared/external/speech-recognition/evals/evals.json +23 -26
  208. package/pipeline/skills/shared/external/speech-recognition/references/speechanalyzer-patterns.md +133 -125
  209. package/pipeline/skills/shared/external/storekit/SKILL.md +228 -204
  210. package/pipeline/skills/shared/external/storekit/evals/evals.json +27 -24
  211. package/pipeline/skills/shared/external/storekit/references/app-review-guidelines.md +98 -109
  212. package/pipeline/skills/shared/external/storekit/references/core-patterns.md +298 -242
  213. package/pipeline/skills/shared/external/storekit/references/storekit-advanced.md +356 -649
  214. package/pipeline/skills/shared/external/swift-api-design-guidelines/SKILL.md +274 -399
  215. package/pipeline/skills/shared/external/swift-api-design-guidelines/evals/evals.json +22 -24
  216. package/pipeline/skills/shared/external/swift-api-design-guidelines/references/argument-labels-and-parameters.md +107 -108
  217. package/pipeline/skills/shared/external/swift-api-design-guidelines/references/conventions-and-special-rules.md +93 -165
  218. package/pipeline/skills/shared/external/swift-api-design-guidelines/references/naming-and-clarity.md +99 -137
  219. package/pipeline/skills/shared/external/swift-api-design-guidelines/references/side-effects-and-mutating-pairs.md +77 -120
  220. package/pipeline/skills/shared/external/swift-architecture/SKILL.md +334 -350
  221. package/pipeline/skills/shared/external/swift-architecture/evals/evals.json +22 -22
  222. package/pipeline/skills/shared/external/swift-charts/SKILL.md +208 -394
  223. package/pipeline/skills/shared/external/swift-charts/evals/evals.json +27 -30
  224. package/pipeline/skills/shared/external/swift-charts/references/charts-patterns.md +351 -762
  225. package/pipeline/skills/shared/external/swift-codable/SKILL.md +339 -343
  226. package/pipeline/skills/shared/external/swift-codable/evals/evals.json +20 -20
  227. package/pipeline/skills/shared/external/swift-concurrency/SKILL.md +303 -351
  228. package/pipeline/skills/shared/external/swift-concurrency/evals/evals.json +27 -24
  229. package/pipeline/skills/shared/external/swift-concurrency/references/approachable-concurrency.md +65 -80
  230. package/pipeline/skills/shared/external/swift-concurrency/references/async-algorithms.md +48 -84
  231. package/pipeline/skills/shared/external/swift-concurrency/references/bridging-interop.md +134 -79
  232. package/pipeline/skills/shared/external/swift-concurrency/references/concurrency-patterns.md +145 -167
  233. package/pipeline/skills/shared/external/swift-concurrency/references/diagnostics.md +62 -50
  234. package/pipeline/skills/shared/external/swift-concurrency/references/swiftui-concurrency.md +92 -121
  235. package/pipeline/skills/shared/external/swift-concurrency/references/synchronization-primitives.md +177 -241
  236. package/pipeline/skills/shared/external/swift-formatstyle/SKILL.md +258 -234
  237. package/pipeline/skills/shared/external/swift-language/SKILL.md +342 -382
  238. package/pipeline/skills/shared/external/swift-language/evals/evals.json +24 -27
  239. package/pipeline/skills/shared/external/swift-language/references/swift-attributes-interop.md +79 -56
  240. package/pipeline/skills/shared/external/swift-language/references/swift-patterns-extended.md +297 -340
  241. package/pipeline/skills/shared/external/swift-security/SKILL.md +180 -161
  242. package/pipeline/skills/shared/external/swift-security/evals/evals.json +25 -25
  243. package/pipeline/skills/shared/external/swift-security/references/biometric-authentication.md +314 -469
  244. package/pipeline/skills/shared/external/swift-security/references/certificate-trust.md +408 -476
  245. package/pipeline/skills/shared/external/swift-security/references/common-anti-patterns.md +260 -530
  246. package/pipeline/skills/shared/external/swift-security/references/compliance-owasp-mapping.md +270 -477
  247. package/pipeline/skills/shared/external/swift-security/references/credential-storage-patterns.md +573 -571
  248. package/pipeline/skills/shared/external/swift-security/references/cryptokit-public-key.md +370 -441
  249. package/pipeline/skills/shared/external/swift-security/references/cryptokit-symmetric.md +332 -433
  250. package/pipeline/skills/shared/external/swift-security/references/keychain-access-control.md +346 -468
  251. package/pipeline/skills/shared/external/swift-security/references/keychain-fundamentals.md +352 -472
  252. package/pipeline/skills/shared/external/swift-security/references/keychain-item-classes.md +431 -432
  253. package/pipeline/skills/shared/external/swift-security/references/keychain-sharing.md +328 -425
  254. package/pipeline/skills/shared/external/swift-security/references/migration-legacy-stores.md +341 -579
  255. package/pipeline/skills/shared/external/swift-security/references/secure-enclave.md +396 -457
  256. package/pipeline/skills/shared/external/swift-security/references/testing-security-code.md +354 -614
  257. package/pipeline/skills/shared/external/swift-testing/SKILL.md +188 -175
  258. package/pipeline/skills/shared/external/swift-testing/evals/evals.json +26 -24
  259. package/pipeline/skills/shared/external/swift-testing/references/testing-advanced.md +80 -84
  260. package/pipeline/skills/shared/external/swift-testing/references/testing-patterns.md +317 -433
  261. package/pipeline/skills/shared/external/swiftdata/SKILL.md +392 -256
  262. package/pipeline/skills/shared/external/swiftdata/evals/evals.json +24 -24
  263. package/pipeline/skills/shared/external/swiftdata/references/core-data-coexistence.md +206 -402
  264. package/pipeline/skills/shared/external/swiftdata/references/indexing.md +59 -52
  265. package/pipeline/skills/shared/external/swiftdata/references/predicate-pitfalls.md +57 -33
  266. package/pipeline/skills/shared/external/swiftdata/references/swiftdata-advanced.md +354 -747
  267. package/pipeline/skills/shared/external/swiftdata/references/swiftdata-queries.md +300 -508
  268. package/pipeline/skills/shared/external/swiftlint/SKILL.md +175 -226
  269. package/pipeline/skills/shared/external/swiftlint/references/adoption-and-configuration.md +141 -208
  270. package/pipeline/skills/shared/external/swiftlint/references/custom-rules-and-analyze.md +100 -109
  271. package/pipeline/skills/shared/external/swiftlint/references/plugins-run-scripts-and-integrations.md +159 -179
  272. package/pipeline/skills/shared/external/swiftlint/references/rule-reference.md +383 -18
  273. package/pipeline/skills/shared/external/swiftlint/references/rules-suppressions-and-baselines.md +143 -229
  274. package/pipeline/skills/shared/external/swiftui-animation/SKILL.md +283 -366
  275. package/pipeline/skills/shared/external/swiftui-animation/references/animation-advanced.md +396 -608
  276. package/pipeline/skills/shared/external/swiftui-animation/references/core-animation-bridge.md +336 -385
  277. package/pipeline/skills/shared/external/swiftui-gestures/SKILL.md +239 -349
  278. package/pipeline/skills/shared/external/swiftui-gestures/references/gesture-patterns.md +228 -310
  279. package/pipeline/skills/shared/external/swiftui-layout-components/SKILL.md +260 -249
  280. package/pipeline/skills/shared/external/swiftui-layout-components/references/form.md +92 -74
  281. package/pipeline/skills/shared/external/swiftui-layout-components/references/grids.md +112 -177
  282. package/pipeline/skills/shared/external/swiftui-layout-components/references/list.md +61 -64
  283. package/pipeline/skills/shared/external/swiftui-layout-components/references/scrollview.md +94 -134
  284. package/pipeline/skills/shared/external/swiftui-liquid-glass/SKILL.md +193 -225
  285. package/pipeline/skills/shared/external/swiftui-liquid-glass/references/liquid-glass.md +173 -327
  286. package/pipeline/skills/shared/external/swiftui-navigation/SKILL.md +193 -168
  287. package/pipeline/skills/shared/external/swiftui-navigation/references/deeplinks.md +127 -150
  288. package/pipeline/skills/shared/external/swiftui-navigation/references/navigationstack.md +132 -133
  289. package/pipeline/skills/shared/external/swiftui-navigation/references/sheets.md +152 -117
  290. package/pipeline/skills/shared/external/swiftui-navigation/references/tabview.md +106 -140
  291. package/pipeline/skills/shared/external/swiftui-patterns/SKILL.md +316 -252
  292. package/pipeline/skills/shared/external/swiftui-patterns/references/architecture-patterns.md +341 -332
  293. package/pipeline/skills/shared/external/swiftui-patterns/references/deprecated-migration.md +547 -854
  294. package/pipeline/skills/shared/external/swiftui-patterns/references/design-polish.md +485 -537
  295. package/pipeline/skills/shared/external/swiftui-patterns/references/platform-and-sharing.md +417 -499
  296. package/pipeline/skills/shared/external/swiftui-performance/SKILL.md +213 -376
  297. package/pipeline/skills/shared/external/swiftui-performance/references/demystify-swiftui-performance-wwdc23.md +86 -175
  298. package/pipeline/skills/shared/external/swiftui-performance/references/optimizing-swiftui-performance-instruments.md +89 -195
  299. package/pipeline/skills/shared/external/swiftui-performance/references/understanding-hangs-in-your-app.md +95 -182
  300. package/pipeline/skills/shared/external/swiftui-performance/references/understanding-improving-swiftui-performance.md +71 -149
  301. package/pipeline/skills/shared/external/swiftui-performance/references/wwdc-session-sources.md +21 -27
  302. package/pipeline/skills/shared/external/swiftui-uikit-interop/SKILL.md +303 -295
  303. package/pipeline/skills/shared/external/swiftui-uikit-interop/references/hosting-migration.md +204 -387
  304. package/pipeline/skills/shared/external/swiftui-uikit-interop/references/representable-recipes.md +469 -683
  305. package/pipeline/skills/shared/external/swiftui-webkit/SKILL.md +140 -186
  306. package/pipeline/skills/shared/external/swiftui-webkit/references/loading-and-observation.md +75 -86
  307. package/pipeline/skills/shared/external/swiftui-webkit/references/local-content-and-custom-schemes.md +63 -60
  308. package/pipeline/skills/shared/external/swiftui-webkit/references/migration-and-fallbacks.md +69 -137
  309. package/pipeline/skills/shared/external/swiftui-webkit/references/navigation-and-javascript.md +95 -67
  310. package/pipeline/skills/shared/external/tailwind-css/SKILL.md +1 -0
  311. package/pipeline/skills/shared/external/testing-backend/SKILL.md +1 -0
  312. package/pipeline/skills/shared/external/tipkit/SKILL.md +220 -335
  313. package/pipeline/skills/shared/external/tipkit/references/tipkit-patterns.md +356 -494
  314. package/pipeline/skills/shared/external/typescript-patterns/SKILL.md +1 -0
  315. package/pipeline/skills/shared/external/vision-framework/SKILL.md +260 -375
  316. package/pipeline/skills/shared/external/vision-framework/references/vision-requests.md +393 -515
  317. package/pipeline/skills/shared/external/vision-framework/references/visionkit-scanner.md +363 -539
  318. package/pipeline/skills/shared/external/vue-composition/SKILL.md +1 -0
  319. package/pipeline/skills/shared/external/weatherkit/SKILL.md +152 -310
  320. package/pipeline/skills/shared/external/weatherkit/references/weatherkit-patterns.md +288 -407
  321. package/pipeline/skills/shared/external/web-accessibility/SKILL.md +1 -0
  322. package/pipeline/skills/shared/external/web-performance/SKILL.md +1 -0
  323. package/pipeline/skills/shared/external/web-testing/SKILL.md +1 -0
  324. package/pipeline/skills/shared/external/widgetkit/SKILL.md +216 -288
  325. package/pipeline/skills/shared/external/widgetkit/references/widgetkit-advanced.md +414 -719
  326. package/pipeline/skills/shared/external/NOTICE-swift-ios-skills.md +0 -39
@@ -3,43 +3,47 @@
3
3
  "evals": [
4
4
  {
5
5
  "id": 1,
6
- "prompt": "I have a new habit tracker launching on the App Store. Draft an ASO plan covering app name/subtitle keyword placement, keyword field priorities, the description hook, first three screenshots, promotional text, custom product pages for ads, in-app events, product page optimization tests, localization, and review prompt timing.",
7
- "expected_output": "A complete App Store Optimization plan that separates search visibility from conversion, uses Apple-backed metadata surfaces correctly, and gives practical copy/testing guidance without drifting into App Review compliance or StoreKit implementation depth.",
6
+ "name": "language-app-full-plan",
7
+ "prompt": "We are launching a language-learning flashcard app in English, German and Japanese. Build us an ASO plan: what goes in the name, subtitle and keyword field, how the product page should convert, which Custom Product Pages and events make sense, how we should test the page, and when the app should ask for a rating.",
8
+ "expected_output": "Organizes the plan into visibility and conversion. Picks relevant, high-intent keywords over popular unrelated ones and lists name, subtitle, keyword field, primary category, ratings, Custom Product Page keywords and event cards as visibility levers without stuffing the description. For conversion covers the opening description lines, benefit-led first screenshots, current promotional text and research per locale. Maps Custom Product Pages to audiences or channels and mentions the 70-page capacity or assigned keywords. Proposes a test with one hypothesis, at most three treatments and chosen localizations. Places review prompts after positive moments and notes StoreKit may not show them.",
8
9
  "files": [],
9
10
  "expectations": [
10
- "Separates search visibility work from conversion work and prioritizes relevance over high-volume but weakly related keywords.",
11
- "Uses app name, subtitle, keyword field, primary category, ratings/reviews, Custom Product Page assigned keywords, and in-app event cards as the main search/visibility surfaces rather than keyword-stuffing the description.",
12
- "Recommends a conversion-focused description hook, benefit-oriented first screenshots, current promotional text, and per-locale metadata research.",
13
- "Plans Custom Product Pages around audience or acquisition-channel differences and mentions the current 70-page capacity or assigned keyword search visibility.",
14
- "Plans Product Page Optimization around one hypothesis at a time while acknowledging up to three treatments and selected localizations.",
15
- "Places in-app review prompts only after positive user moments and notes that StoreKit may not show every requested prompt."
11
+ "Splits the plan into a visibility part and a conversion part",
12
+ "Puts relevance and intent ahead of raw search volume",
13
+ "Names name, subtitle, keyword field, category, ratings, Custom Product Page keywords and event cards as visibility levers, and keeps keywords out of the description",
14
+ "Covers the description opening, benefit-first screenshots, up-to-date promotional text and keyword research per locale",
15
+ "Ties Custom Product Pages to audiences or channels and mentions the 70-page limit or assigned search keywords",
16
+ "Designs a test with one hypothesis, up to three treatments and selected localizations",
17
+ "Asks for reviews after positive moments and says StoreKit decides whether the prompt appears"
16
18
  ]
17
19
  },
18
20
  {
19
21
  "id": 2,
20
- "prompt": "Review this ASO note for accuracy: 'Custom Product Pages are capped at 35 and only work through direct links. Product Page Optimization compares one treatment in the default locale only. Put repeated keywords at the start of the keyword field because position is a ranking factor. Add more keywords to the description. In-app event metadata is indexed like the keyword field. Japan and Korea also index English keyword fields. Ratings below 4.0 always tank conversion.' What should change?",
21
- "expected_output": "A correction-focused review that replaces stale or unsupported App Store Optimization claims with current Apple-source-grounded guidance.",
22
+ "name": "correct-aso-notes",
23
+ "prompt": "Fix this internal ASO note: 'We can make 35 Custom Product Pages and they only work through links. Product page tests allow one treatment for all locales and give no confidence data. Words at the start of the keyword field rank higher. Add keywords to the description too. Event names are a hidden keyword field. Japan and Korea index the English keyword field, and a rating under 4.0 always kills conversion.'",
24
+ "expected_output": "Raises the Custom Product Page limit to 70 and adds that assigned keywords let pages appear in search as well as via links. Says a test can have up to three treatments, localizations are selectable and App Analytics reports confidence. Rejects the idea that keyword position inside the field changes ranking, removes keywords from the description, and describes event names and short descriptions as visible card copy. Drops the unsupported claims about cross-locale indexing and a hard 4.0 threshold, while keeping research per market and treating ratings as a real signal.",
22
25
  "files": [],
23
26
  "expectations": [
24
- "Corrects Custom Product Pages to the current 70-page limit and mentions assigned-keyword search visibility in addition to direct URLs.",
25
- "Corrects Product Page Optimization to up to three treatments, selectable localizations, and App Analytics confidence/reporting behavior instead of one default-locale treatment.",
26
- "Rejects unsupported keyword-position ranking claims and recommends spending keyword-field characters on relevant, non-duplicated terms.",
27
- "Keeps the description conversion-focused and avoids adding unnecessary keywords for search ranking.",
28
- "Frames in-app event name and short description as visible event-card/search-result copy rather than a hidden keyword field.",
29
- "Removes unsupported cross-locale English-indexing and fixed rating-threshold claims while preserving per-market research and ratings/reviews as search and conversion signals."
27
+ "Corrects the limit to 70 Custom Product Pages and adds assigned-keyword search visibility",
28
+ "States up to three treatments, selectable localizations and confidence reporting in App Analytics",
29
+ "Rejects the claim that position within the keyword field affects ranking",
30
+ "Advises against adding keywords to the description",
31
+ "Describes event metadata as visible card copy rather than a keyword field",
32
+ "Removes the unsupported cross-locale indexing and fixed-threshold rating claims while keeping per-market research and ratings as signals"
30
33
  ]
31
34
  },
32
35
  {
33
36
  "id": 3,
34
- "prompt": "I need help before submission: my App Store listing has ASO keyword ideas, but also PrivacyInfo.xcprivacy entries, ATT wording, subscription paywall code, and a possible metadata rejection because screenshots show mockups. Which pieces should app-store-optimization own, and where should the rest go?",
35
- "expected_output": "A boundary-aware answer that keeps app-store-optimization focused on discoverability and conversion strategy while routing compliance, privacy manifest, ATT, rejection, and StoreKit implementation details to sibling skills.",
37
+ "name": "ownership-boundary",
38
+ "prompt": "Our growth, compliance and payments teams keep arguing over who owns what on the App Store listing and the paywall. Split the work between ASO, App Store review and StoreKit, and say what ASO should still double-check.",
39
+ "expected_output": "ASO keeps keywords, name and subtitle, description copy, screenshots and captions, promotional text, Custom Product Pages, events, page tests, listing localization and ratings. Rejection risk, screenshot compliance, PrivacyInfo.xcprivacy, metadata policy and ATT go to app-store-review. Paywall code, purchase handling, entitlements and product setup go to storekit. ASO still reviews listing copy and screenshots for accuracy and conversion, and never recommends competitor names, unrelated keywords or misleading screenshots.",
36
40
  "files": [],
37
41
  "expectations": [
38
- "Keeps app-store-optimization focused on keyword strategy, title/subtitle, description conversion copy, screenshots/captions, promotional text, Custom Product Pages, In-App Events, PPO tests, localization, and ratings strategy.",
39
- "Routes App Store rejection risks, screenshot compliance, PrivacyInfo.xcprivacy, metadata policy, and ATT wording to app-store-review rather than solving them in depth.",
40
- "Routes subscription paywall code, purchase handling, entitlement checks, and StoreKit product setup to storekit rather than expanding ASO into IAP implementation.",
41
- "Still gives the ASO-safe next step: cross-check listing copy and screenshots for both conversion quality and compliance before submission.",
42
- "Avoids recommending competitor names, unrelated keywords, or misleading screenshots as ASO tactics."
42
+ "Assigns keywords, name, subtitle, description, screenshots, captions, promotional text, Custom Product Pages, events, tests, listing localization and ratings to ASO",
43
+ "Sends rejection risk, screenshot compliance, PrivacyInfo.xcprivacy, metadata policy and ATT to app-store-review",
44
+ "Sends paywall code, purchase handling, entitlements and product setup to storekit",
45
+ "Keeps an ASO cross-check of listing copy and screenshots for accuracy and conversion",
46
+ "Never suggests competitor names, unrelated keywords or misleading screenshots"
43
47
  ]
44
48
  }
45
49
  ]
@@ -1,174 +1,157 @@
1
1
  # Keyword Research Methodology
2
2
 
3
- Step-by-step process for identifying, scoring, and maintaining the keyword field for App Store search optimization.
3
+ ## What App Store search reads
4
4
 
5
- ## Contents
5
+ Apple documents two kinds of search signal: text relevance from the name,
6
+ subtitle, keyword field and primary category, and user behavior such as
7
+ downloads, ratings and reviews. The table below is a planning aid, not a list
8
+ of ranking weights.
6
9
 
7
- - [How Apple Indexes Metadata](#how-apple-indexes-metadata)
8
- - [Research Process](#research-process)
9
- - [Keyword Scoring Framework](#keyword-scoring-framework)
10
- - [Slot Allocation Strategy](#slot-allocation-strategy)
11
- - [Seasonal Keyword Rotation](#seasonal-keyword-rotation)
12
- - [Before and After Examples](#before-and-after-examples)
10
+ | Field | Role in search | Limit | Changing it | Guidance |
11
+ |---|---|---|---|---|
12
+ | App name | Indexed | 30 characters | With a new version, when status allows | Distinctive, and hints at what the app does |
13
+ | Subtitle | Indexed | 30 characters | With a new version | Short statement of the value or main use |
14
+ | Keyword field | Indexed | 100 bytes | With a new version | Commas between terms, no spaces after them |
15
+ | Primary category | Counts toward relevance | One choice | With a new version | Never repeat its name in keywords |
16
+ | Custom Product Page keywords | Indexed for approved, visible pages | Set per page | In App Store Connect | Sends matching searches to that page |
17
+ | In-App Event name and short description | Shown on cards in Search | Set per event | Per event | Visible copy, not a hidden keyword field |
18
+ | Description | Conversion | 4,000 characters | With a new version | Apple's product page guidance says not to add keywords for search here |
19
+ | Promotional text | No effect on ranking, per Apple | 170 characters | Any time | Timely conversion message |
20
+ | Ratings and reviews | Behavior signal | Ongoing | Earned | Mine for vocabulary; never a place to stuff terms |
13
21
 
14
- ## How Apple Indexes Metadata
22
+ Additional rules:
15
23
 
16
- Apple documents the main App Store search signals as text relevance, including matches for the app title, subtitle, keywords, and primary category, plus user behavior such as downloads, ratings, and reviews. Use this table as a practical planning map, not as a precise ranking-weight model:
24
+ - Singular and plural of a word already present count as the same word.
25
+ - Use a space only inside a real multi-word phrase.
26
+ - Two different words that are both searched, such as "photo" and
27
+ "photography", may both earn a place.
28
+ - Latin-script characters take one byte each; many other scripts take two or
29
+ three, so the field holds fewer of them.
17
30
 
18
- | Field | Indexed for search? | Controllable per version? | Notes |
19
- |-------|---------------------|--------------------------|-------|
20
- | App name | Yes | Yes (with new version/status permitting) | 30 characters. Choose a distinctive name that hints at what the app does. |
21
- | Subtitle | Yes | Yes (with new version/status permitting) | 30 characters. Summarize value or typical use in a concise phrase. |
22
- | Keyword field | Yes | Yes (with new version/status permitting) | Up to 100 bytes. Use comma-separated terms with no spaces after commas. |
23
- | Primary category | Yes | Yes (with new version/status permitting) | Apple includes the primary category in search relevance. Do not repeat the category name in keywords. |
24
- | Custom Product Page assigned keywords | Yes, for approved visible pages | Yes (in App Store Connect) | Can route matching searches to a custom page instead of the default product page. |
25
- | In-app event name and short description | Visible in Search/event cards | Yes (per event) | Use query-relevant language for the event card, but avoid treating event copy as a hidden keyword field. |
26
- | Description | Conversion-focused | Yes (with new version/status permitting) | Apple's product page guidance says not to add unnecessary keywords to improve search results. |
27
- | Promotional text | No ranking effect | Yes (anytime) | Apple says promotional text does not affect search ranking. Use it for timely conversion messaging. |
28
- | Ratings and reviews | Behavior/search signal | Ongoing | Ratings and reviews influence search and conversion, but review text should be used as customer research rather than keyword stuffing. |
31
+ ## Research process
29
32
 
30
- ### Indexing behavior details
33
+ ### 1. Competitors
31
34
 
32
- - Avoid plurals of words already included in singular form; Apple treats them as duplicates.
33
- - Do not repeat words from the app name, subtitle, or category in the keyword field.
34
- - Use spaces only inside real keyword phrases; do not add spaces after commas.
35
- - Include separate related terms when both are genuine search terms, such as "photo" and "photography".
35
+ Pick the top 5 to 10 apps that rank for your category's main terms. For each,
36
+ record:
36
37
 
37
- ## Research Process
38
+ - the keywords in its name and subtitle,
39
+ - positioning words that recur across names, subtitles and screenshots,
40
+ - terms nobody covers.
38
41
 
39
- ### Step 1: Competitor audit
42
+ Type partial queries into App Store search and note the autocomplete
43
+ suggestions; they come from what people actually search.
40
44
 
41
- Identify the top 5-10 apps ranking for the primary category terms. For each competitor, note:
45
+ ### 2. Brainstorm by type
42
46
 
43
- - Title and subtitle keywords
44
- - Visible positioning patterns (terms that appear frequently across top-ranking titles, subtitles, and screenshots)
45
- - Gaps -- relevant terms that competitors are not targeting
47
+ | Type | Example for a hiking app |
48
+ |---|---|
49
+ | What it does | trail, map, route |
50
+ | What it is used for | hike, backpack, summit |
51
+ | Who uses it | beginner, family, solo |
52
+ | Nearby activities | camping, climbing, birding |
46
53
 
47
- Use App Store search autocomplete to discover what users actually type. Start typing a category term and note the suggested completions.
54
+ Terms that appear in many competitor names usually mean high volume and hard
55
+ competition. Terms that autocomplete offers but competitors ignore are the
56
+ openings.
48
57
 
49
- ### Step 2: Category analysis
58
+ ### 3. Apple Ads discovery
50
59
 
51
- List every term a user might associate with the app's functionality:
60
+ Run a discovery campaign with broad match for two to four weeks. Export the
61
+ search terms report, sort by tap-through rate to find intent and by conversion
62
+ rate to find terms that lead to downloads, and move the winners into the
63
+ keyword field.
52
64
 
53
- - Primary function terms (what the app does)
54
- - Use case terms (why a user would want it)
55
- - Audience terms (who the user is)
56
- - Adjacent terms (related activities or workflows)
65
+ ### 4. Every update
57
66
 
58
- Filter this list against competitor findings. Terms that appear in many competitor titles are high-volume but high-competition. Terms that appear in autocomplete but not in competitor metadata represent opportunities.
67
+ - Check impressions, tap-through rate and conversion in App Analytics.
68
+ - Swap out terms with low impressions or low tap-through.
69
+ - Try newly discovered terms.
70
+ - Note what competitors changed in their metadata.
59
71
 
60
- ### Step 3: Search Ads discovery
72
+ ## Scoring
61
73
 
62
- Run Apple Search Ads discovery campaigns with broad-match keywords matching the primary function. After 2-4 weeks of data:
74
+ Rate each candidate from 1 to 5 on three scales:
63
75
 
64
- - Export the search term report to see actual queries that triggered impressions.
65
- - Sort by tap-through rate (TTR) to identify high-intent terms.
66
- - Sort by conversion rate to identify terms where users who find the app actually download it.
67
- - Add high-performing discovered terms to the keyword field.
76
+ - **Relevance**: 5 means it describes the core function, 1 means it is
77
+ tangential.
78
+ - **Volume**: estimated from Apple Ads impressions.
79
+ - **Difficulty**: 5 means little competition, 1 means large apps dominate it.
68
80
 
69
- ### Step 4: Iteration cycle
81
+ Only terms with Relevance of 3 or more are considered. Priority is
82
+ `(Relevance x 2) + Volume + Difficulty`.
70
83
 
71
- With each app update:
84
+ Rule a term out when:
72
85
 
73
- 1. Review App Analytics for keyword impressions, tap-through rates, and conversion rates.
74
- 2. Identify underperforming keywords (low impressions or low TTR) and replace them.
75
- 3. Test new terms discovered through Search Ads or category changes.
76
- 4. Check if competitor metadata has shifted -- new competitors or renamed apps can change the keyword landscape.
86
+ - Relevance is below 3,
87
+ - it is another company's brand name, which breaks the guidelines,
88
+ - it already appears in the name or subtitle,
89
+ - it is the primary category's name.
77
90
 
78
- ## Keyword Scoring Framework
91
+ ## Filling the slots
79
92
 
80
- Score each candidate keyword on three dimensions:
93
+ Two worked examples. Lengths are counted exactly.
81
94
 
82
- | Dimension | Score range | How to assess |
83
- |-----------|-------------|---------------|
84
- | **Relevance** | 1-5 | Does the keyword describe what the app actually does? 5 = core function, 1 = tangentially related |
85
- | **Volume** | 1-5 | Is this term frequently searched? Use Search Ads impression data as a proxy. 5 = high impressions, 1 = minimal |
86
- | **Difficulty** | 1-5 | How many established apps target this term? 5 = low competition (good), 1 = dominated by major apps |
95
+ **Meditation app**
87
96
 
88
- **Decision rule:** Include a keyword only if Relevance >= 3. Among qualifying keywords, prioritize by (Relevance x 2) + Volume + Difficulty. This weights relevance heavily while still favoring discoverable, winnable terms.
89
-
90
- **Disqualify keywords that:**
91
- - Do not describe the app's actual functionality (Relevance < 3)
92
- - Are competitor brand names (violates App Store guidelines)
93
- - Duplicate a word already in the title or subtitle
94
- - Are the app's primary category name (Apple adds it automatically)
95
-
96
- ## Slot Allocation Strategy
97
-
98
- The 100-character keyword field requires careful allocation. Here are allocation patterns for different app types:
99
-
100
- ### Example: Fitness tracking app
101
-
102
- Title: `FitTrack -- Workout Log` (23 chars used)
103
- Subtitle: `Exercise & Activity Stats` (25 chars used)
104
-
105
- Keyword field strategy -- do not repeat: fittrack, workout, log, exercise, activity, stats
97
+ - Name: `Stillpoint - Meditation Timer`
98
+ - Subtitle: `Sleep Sounds & Calm Breathing`
99
+ - Keywords (15 terms, 98 bytes):
106
100
 
107
101
  ```
108
- gym,training,health,run,step,calorie,weight,strength,cardio,hiit,yoga,plank,squat,routine,progress
102
+ mindfulness,anxiety,stress,relax,focus,yoga,insomnia,nap,journal,mantra,zen,rain,noise,guided,mood
109
103
  ```
110
104
 
111
- (96 characters -- 4 remaining, all unique against title/subtitle)
112
-
113
- ### Example: Photo editing app
105
+ **Recipe app**
114
106
 
115
- Title: `PixelPop -- Photo Editor` (24 chars used)
116
- Subtitle: `Filters & Retouch Tools` (23 chars used)
117
-
118
- Keyword field -- do not repeat: pixelpop, photo, editor, filter, retouch, tool
107
+ - Name: `Pantry Chef - Recipe Planner`
108
+ - Subtitle: `Meal Prep & Grocery Lists`
109
+ - Keywords (14 terms, 100 bytes):
119
110
 
120
111
  ```
121
- selfie,portrait,collage,crop,blur,preset,enhance,adjust,brightness,contrast,saturation,beauty,skin
112
+ cooking,dinner,vegan,keto,healthy,shopping,budget,family,easy,quick,bake,cookbook,leftover,nutrition
122
113
  ```
123
114
 
124
- (99 characters -- all unique against title/subtitle)
125
-
126
- ### Allocation principles
115
+ Notes:
127
116
 
128
- - Each comma costs 1 character. Fewer, longer keywords are not inherently better than more, shorter ones -- Apple matches individual words, not phrases.
129
- - If two terms are searched as a phrase (e.g., "meal prep"), use the phrase when it matches real query behavior; use separate terms when each word is independently valuable.
130
- - Reserve 5-10 characters for experimental keywords that rotate each release based on performance data.
117
+ - Every comma costs one byte. Search matches single words, so long keywords
118
+ are not better in themselves.
119
+ - Keep a phrase such as "meal prep" together when people search it that way;
120
+ split words that are valuable on their own.
121
+ - Hold back 5 to 10 bytes for experimental terms you rotate each release.
131
122
 
132
- ## Seasonal Keyword Rotation
123
+ ## Seasonal rotation
133
124
 
134
- Some keywords have seasonal search volume spikes. Plan rotation around predictable events:
125
+ | Season | Terms | Ship in |
126
+ |---|---|---|
127
+ | New year | resolution, goal, habit, new year | December release |
128
+ | Back to school | student, school, study, planner | July or August |
129
+ | Holiday shopping | gift, holiday, deal, wish list | October or November |
130
+ | Summer fitness | outdoor, running, summer, beach | April or May |
131
+ | Tax season | tax, receipt, expense, deduction | January or February |
135
132
 
136
- | Season/Event | Example keywords to add | When to deploy |
137
- |-------------|------------------------|----------------|
138
- | New Year | resolution,goal,habit,new year | December release |
139
- | Back to school | student,school,study,planner | July/August release |
140
- | Holiday shopping | gift,holiday,deal,wish list | October/November release |
141
- | Summer fitness | outdoor,running,summer,beach | April/May release |
142
- | Tax season | tax,receipt,expense,deduction | January/February release |
133
+ Swap two or three terms per season. Keep the core 70 to 80 bytes stable and use
134
+ the remaining 20 to 30 for seasonal experiments.
143
135
 
144
- Rotate 2-3 keyword slots per seasonal cycle. Keep the core 70-80 characters stable and use the remaining 20-30 characters for seasonal experimentation.
136
+ ## Before and after
145
137
 
146
- ## Before and After Examples
138
+ **Wasted bytes.** For a surf forecast app:
147
139
 
148
- ### Problem: Wasted characters
149
-
150
- **Before:**
151
140
  ```
152
- fitness tracker, workout app, best exercise, health and wellness, gym
141
+ Before (66): best surf app, surf forecast, wave report, and tide times, surfing
142
+ After (48): wave,swell,tide,wind,beach,buoy,report,spot,reef
153
143
  ```
154
- Issues: spaces after commas (-5 chars wasted), "fitness" and "tracker" may duplicate title, "best" and "app" have no search value, "and" is a stop word.
155
144
 
156
- **After:**
157
- ```
158
- gym,health,run,step,calorie,weight,strength,cardio,hiit,yoga,plank,squat,routine,progress,streak
159
- ```
160
- Fixes: no spaces, no duplicates of title/subtitle, no filler words, all terms are genuine search queries.
145
+ The first version pays for spaces after commas, filler ("best", "app"), a
146
+ stop word ("and") and words that belong in the name. The second holds nine real
147
+ terms in fewer bytes and leaves 52 bytes for more.
161
148
 
162
- ### Problem: Duplicate keywords
149
+ **Duplicates.** With the name `SwellWatch - Surf Forecast`:
163
150
 
164
- **Before** (title is "RunMate -- Running Tracker"):
165
151
  ```
166
- running,tracker,run,jog,marathon,5k,pace,distance,route,gps,heart,rate,training,fitness,health
152
+ Before (65): surf,forecast,forecasts,swell,wave,tide,wind,buoy,beach,reef,spot
153
+ After (59): swell,wave,tide,wind,buoy,beach,reef,spot,kite,marine,chart
167
154
  ```
168
- Issues: "running", "tracker", and "run" duplicate the title -- 17 characters wasted.
169
155
 
170
- **After:**
171
- ```
172
- jog,marathon,5k,pace,distance,route,gps,heart,rate,training,fitness,health,stride,tempo,interval
173
- ```
174
- Fixes: removed title duplicates, added 3 new high-value terms with the recovered space.
156
+ Removing "surf", "forecast" and "forecasts" frees 24 bytes; "kite", "marine"
157
+ and "chart" use 18 of them, and 41 bytes remain for further terms.