@mmerterden/multi-agent-pipeline 20.7.0 → 20.8.1

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 (284) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/LICENSE +0 -10
  3. package/docs/facts.json +1 -1
  4. package/manifest.json +285 -285
  5. package/package.json +3 -3
  6. package/pipeline/lib/redact.mjs +3 -2
  7. package/pipeline/scripts/_notices.mjs +1 -1
  8. package/pipeline/scripts/gen-skills-index.mjs +13 -1
  9. package/pipeline/scripts/pre-commit-check.sh +4 -0
  10. package/pipeline/skills/.skill-manifest.json +69 -69
  11. package/pipeline/skills/shared/README.md +70 -70
  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/app-clips/SKILL.md +260 -160
  16. package/pipeline/skills/shared/external/app-clips/evals/evals.json +27 -27
  17. package/pipeline/skills/shared/external/app-clips/references/data-handoff-notifications-location.md +150 -83
  18. package/pipeline/skills/shared/external/app-clips/references/routing-and-experiences.md +135 -83
  19. package/pipeline/skills/shared/external/app-clips/references/size-capabilities-and-promotion.md +143 -85
  20. package/pipeline/skills/shared/external/app-intents/SKILL.md +302 -304
  21. package/pipeline/skills/shared/external/app-intents/evals/evals.json +21 -21
  22. package/pipeline/skills/shared/external/app-intents/references/appintents-advanced.md +594 -894
  23. package/pipeline/skills/shared/external/app-store-optimization/SKILL.md +345 -277
  24. package/pipeline/skills/shared/external/app-store-optimization/evals/evals.json +27 -23
  25. package/pipeline/skills/shared/external/app-store-optimization/references/keyword-research-methodology.md +107 -121
  26. package/pipeline/skills/shared/external/app-store-optimization/references/product-page-variants.md +145 -165
  27. package/pipeline/skills/shared/external/app-store-review/SKILL.md +306 -326
  28. package/pipeline/skills/shared/external/app-store-review/evals/evals.json +21 -21
  29. package/pipeline/skills/shared/external/app-store-review/references/privacy-manifest.md +105 -67
  30. package/pipeline/skills/shared/external/app-store-review/references/review-checklists.md +114 -101
  31. package/pipeline/skills/shared/external/apple-on-device-ai/SKILL.md +335 -360
  32. package/pipeline/skills/shared/external/apple-on-device-ai/evals/evals.json +24 -27
  33. package/pipeline/skills/shared/external/apple-on-device-ai/references/coreml-conversion.md +215 -322
  34. package/pipeline/skills/shared/external/apple-on-device-ai/references/coreml-optimization.md +161 -256
  35. package/pipeline/skills/shared/external/apple-on-device-ai/references/foundation-models.md +277 -387
  36. package/pipeline/skills/shared/external/apple-on-device-ai/references/mlx-swift.md +196 -210
  37. package/pipeline/skills/shared/external/authentication/SKILL.md +277 -381
  38. package/pipeline/skills/shared/external/authentication/evals/evals.json +25 -25
  39. package/pipeline/skills/shared/external/authentication/references/keychain-biometric.md +135 -178
  40. package/pipeline/skills/shared/external/authentication/references/passkeys.md +111 -147
  41. package/pipeline/skills/shared/external/avkit/SKILL.md +267 -364
  42. package/pipeline/skills/shared/external/avkit/evals/evals.json +26 -26
  43. package/pipeline/skills/shared/external/avkit/references/avkit-patterns.md +375 -493
  44. package/pipeline/skills/shared/external/background-processing/SKILL.md +274 -384
  45. package/pipeline/skills/shared/external/background-processing/evals/evals.json +22 -22
  46. package/pipeline/skills/shared/external/background-processing/references/background-task-patterns.md +173 -321
  47. package/pipeline/skills/shared/external/callkit-voip/SKILL.md +290 -371
  48. package/pipeline/skills/shared/external/callkit-voip/evals/evals.json +24 -24
  49. package/pipeline/skills/shared/external/callkit-voip/references/callkit-patterns.md +175 -343
  50. package/pipeline/skills/shared/external/cloudkit-sync/SKILL.md +292 -381
  51. package/pipeline/skills/shared/external/cloudkit-sync/evals/evals.json +33 -30
  52. package/pipeline/skills/shared/external/cloudkit-sync/references/cloudkit-patterns.md +227 -355
  53. package/pipeline/skills/shared/external/contacts-framework/SKILL.md +197 -346
  54. package/pipeline/skills/shared/external/contacts-framework/evals/evals.json +19 -21
  55. package/pipeline/skills/shared/external/contacts-framework/references/contacts-patterns.md +169 -308
  56. package/pipeline/skills/shared/external/core-bluetooth/SKILL.md +228 -376
  57. package/pipeline/skills/shared/external/core-bluetooth/evals/evals.json +25 -22
  58. package/pipeline/skills/shared/external/core-bluetooth/references/ble-patterns.md +257 -337
  59. package/pipeline/skills/shared/external/core-data/SKILL.md +302 -368
  60. package/pipeline/skills/shared/external/core-data/evals/evals.json +30 -27
  61. package/pipeline/skills/shared/external/core-motion/SKILL.md +235 -324
  62. package/pipeline/skills/shared/external/core-motion/evals/evals.json +31 -27
  63. package/pipeline/skills/shared/external/core-motion/references/motion-patterns.md +210 -310
  64. package/pipeline/skills/shared/external/core-nfc/SKILL.md +292 -366
  65. package/pipeline/skills/shared/external/core-nfc/evals/evals.json +22 -24
  66. package/pipeline/skills/shared/external/core-nfc/references/nfc-patterns.md +233 -329
  67. package/pipeline/skills/shared/external/coreml/SKILL.md +323 -367
  68. package/pipeline/skills/shared/external/coreml/evals/evals.json +24 -21
  69. package/pipeline/skills/shared/external/coreml/references/coreml-swift-integration.md +562 -565
  70. package/pipeline/skills/shared/external/cryptokit/SKILL.md +253 -394
  71. package/pipeline/skills/shared/external/cryptokit/evals/evals.json +20 -18
  72. package/pipeline/skills/shared/external/cryptokit/references/cryptokit-patterns.md +299 -488
  73. package/pipeline/skills/shared/external/debugging-instruments/SKILL.md +270 -323
  74. package/pipeline/skills/shared/external/debugging-instruments/evals/evals.json +27 -30
  75. package/pipeline/skills/shared/external/debugging-instruments/references/instruments-guide.md +167 -315
  76. package/pipeline/skills/shared/external/debugging-instruments/references/lldb-patterns.md +140 -193
  77. package/pipeline/skills/shared/external/device-integrity/SKILL.md +236 -353
  78. package/pipeline/skills/shared/external/device-integrity/evals/evals.json +25 -21
  79. package/pipeline/skills/shared/external/device-integrity/references/device-integrity-patterns.md +159 -197
  80. package/pipeline/skills/shared/external/energykit/SKILL.md +225 -392
  81. package/pipeline/skills/shared/external/energykit/evals/evals.json +29 -28
  82. package/pipeline/skills/shared/external/energykit/references/energykit-patterns.md +174 -470
  83. package/pipeline/skills/shared/external/eventkit-calendar/SKILL.md +261 -383
  84. package/pipeline/skills/shared/external/eventkit-calendar/evals/evals.json +25 -22
  85. package/pipeline/skills/shared/external/eventkit-calendar/references/eventkit-patterns.md +165 -268
  86. package/pipeline/skills/shared/external/healthkit/SKILL.md +252 -303
  87. package/pipeline/skills/shared/external/healthkit/evals/evals.json +24 -23
  88. package/pipeline/skills/shared/external/healthkit/references/healthkit-patterns.md +369 -523
  89. package/pipeline/skills/shared/external/homekit-matter/SKILL.md +233 -348
  90. package/pipeline/skills/shared/external/homekit-matter/evals/evals.json +27 -22
  91. package/pipeline/skills/shared/external/homekit-matter/references/matter-commissioning.md +199 -305
  92. package/pipeline/skills/shared/external/ios-accessibility/SKILL.md +368 -340
  93. package/pipeline/skills/shared/external/ios-accessibility/evals/evals.json +28 -27
  94. package/pipeline/skills/shared/external/ios-accessibility/references/a11y-patterns.md +314 -260
  95. package/pipeline/skills/shared/external/ios-accessibility/references/media-accessibility.md +97 -67
  96. package/pipeline/skills/shared/external/ios-accessibility/references/nutrition-labels.md +165 -101
  97. package/pipeline/skills/shared/external/ios-localization/SKILL.md +258 -371
  98. package/pipeline/skills/shared/external/ios-localization/evals/evals.json +23 -23
  99. package/pipeline/skills/shared/external/ios-localization/references/formatstyle-locale.md +283 -491
  100. package/pipeline/skills/shared/external/ios-localization/references/string-catalogs.md +313 -440
  101. package/pipeline/skills/shared/external/ios-networking/SKILL.md +265 -341
  102. package/pipeline/skills/shared/external/ios-networking/evals/evals.json +24 -24
  103. package/pipeline/skills/shared/external/ios-networking/references/background-websocket.md +425 -652
  104. package/pipeline/skills/shared/external/ios-networking/references/file-storage-patterns.md +143 -285
  105. package/pipeline/skills/shared/external/ios-networking/references/lightweight-clients.md +93 -53
  106. package/pipeline/skills/shared/external/ios-networking/references/network-framework.md +231 -456
  107. package/pipeline/skills/shared/external/ios-networking/references/urlsession-patterns.md +517 -784
  108. package/pipeline/skills/shared/external/ios-simulator/SKILL.md +265 -393
  109. package/pipeline/skills/shared/external/ios-simulator/evals/evals.json +21 -21
  110. package/pipeline/skills/shared/external/ios-simulator/references/simctl-commands.md +177 -270
  111. package/pipeline/skills/shared/external/live-activities/SKILL.md +318 -360
  112. package/pipeline/skills/shared/external/live-activities/evals/evals.json +21 -21
  113. package/pipeline/skills/shared/external/live-activities/references/activitykit-patterns.md +478 -710
  114. package/pipeline/skills/shared/external/localization-reuse-map/SKILL.md +3 -3
  115. package/pipeline/skills/shared/external/localization-reuse-map/example-mapping.json +1 -1
  116. package/pipeline/skills/shared/external/localization-reuse-map/reference/format-and-output.md +8 -7
  117. package/pipeline/skills/shared/external/localization-reuse-map/reference/publish-and-snapshot.md +2 -2
  118. package/pipeline/skills/shared/external/localization-reuse-map/reference/sources-and-recipes.md +5 -2
  119. package/pipeline/skills/shared/external/localization-reuse-map/scripts/_shared.py +100 -0
  120. package/pipeline/skills/shared/external/localization-reuse-map/scripts/build-artifact.py +45 -26
  121. package/pipeline/skills/shared/external/localization-reuse-map/scripts/build-spreadsheet.py +14 -16
  122. package/pipeline/skills/shared/external/localization-reuse-map/scripts/fetch-annotations.py +12 -5
  123. package/pipeline/skills/shared/external/localization-reuse-map/scripts/fetch-legacy-labels.py +2 -1
  124. package/pipeline/skills/shared/external/localization-reuse-map/scripts/publish-confluence.py +6 -5
  125. package/pipeline/skills/shared/external/localization-reuse-map/scripts/render-overlay.py +44 -18
  126. package/pipeline/skills/shared/external/localization-reuse-map/scripts/resolve-legacy-values.py +5 -2
  127. package/pipeline/skills/shared/external/localization-reuse-map/scripts/resolve-new-values.py +10 -11
  128. package/pipeline/skills/shared/external/localization-reuse-map/scripts/scan-screen-keys.py +4 -33
  129. package/pipeline/skills/shared/external/localization-reuse-map/scripts/verify-map.py +12 -59
  130. package/pipeline/skills/shared/external/mapkit-location/SKILL.md +297 -267
  131. package/pipeline/skills/shared/external/mapkit-location/evals/evals.json +28 -24
  132. package/pipeline/skills/shared/external/mapkit-location/references/mapkit-corelocation-patterns.md +378 -532
  133. package/pipeline/skills/shared/external/mapkit-location/references/mapkit-patterns.md +397 -499
  134. package/pipeline/skills/shared/external/metrickit-diagnostics/SKILL.md +165 -348
  135. package/pipeline/skills/shared/external/metrickit-diagnostics/evals/evals.json +26 -23
  136. package/pipeline/skills/shared/external/metrickit-diagnostics/references/metrickit-patterns.md +123 -130
  137. package/pipeline/skills/shared/external/musickit-audio/SKILL.md +189 -315
  138. package/pipeline/skills/shared/external/musickit-audio/evals/evals.json +22 -21
  139. package/pipeline/skills/shared/external/musickit-audio/references/musickit-patterns.md +181 -270
  140. package/pipeline/skills/shared/external/natural-language/SKILL.md +188 -340
  141. package/pipeline/skills/shared/external/natural-language/evals/evals.json +21 -21
  142. package/pipeline/skills/shared/external/natural-language/references/translation-patterns.md +171 -225
  143. package/pipeline/skills/shared/external/passkit-wallet/SKILL.md +258 -392
  144. package/pipeline/skills/shared/external/passkit-wallet/evals/evals.json +30 -29
  145. package/pipeline/skills/shared/external/passkit-wallet/references/wallet-passes.md +164 -231
  146. package/pipeline/skills/shared/external/pdfkit/SKILL.md +312 -344
  147. package/pipeline/skills/shared/external/pdfkit/evals/evals.json +19 -19
  148. package/pipeline/skills/shared/external/pdfkit/references/pdfkit-patterns.md +413 -624
  149. package/pipeline/skills/shared/external/pencilkit-drawing/SKILL.md +242 -358
  150. package/pipeline/skills/shared/external/pencilkit-drawing/evals/evals.json +25 -21
  151. package/pipeline/skills/shared/external/pencilkit-drawing/references/pencilkit-patterns.md +161 -226
  152. package/pipeline/skills/shared/external/permissionkit/SKILL.md +282 -400
  153. package/pipeline/skills/shared/external/permissionkit/evals/evals.json +27 -30
  154. package/pipeline/skills/shared/external/permissionkit/references/permissionkit-patterns.md +237 -350
  155. package/pipeline/skills/shared/external/photos-camera-media/SKILL.md +276 -325
  156. package/pipeline/skills/shared/external/photos-camera-media/references/av-playback.md +299 -545
  157. package/pipeline/skills/shared/external/photos-camera-media/references/camera-capture.md +344 -588
  158. package/pipeline/skills/shared/external/photos-camera-media/references/image-loading-caching.md +316 -660
  159. package/pipeline/skills/shared/external/photos-camera-media/references/photokit-patterns.md +270 -416
  160. package/pipeline/skills/shared/external/push-notifications/SKILL.md +312 -340
  161. package/pipeline/skills/shared/external/push-notifications/evals/evals.json +27 -26
  162. package/pipeline/skills/shared/external/push-notifications/references/notification-patterns.md +328 -485
  163. package/pipeline/skills/shared/external/push-notifications/references/rich-notifications.md +327 -560
  164. package/pipeline/skills/shared/external/realitykit-ar/SKILL.md +218 -410
  165. package/pipeline/skills/shared/external/realitykit-ar/evals/evals.json +24 -27
  166. package/pipeline/skills/shared/external/realitykit-ar/references/realitykit-patterns.md +221 -348
  167. package/pipeline/skills/shared/external/shareplay-activities/SKILL.md +222 -393
  168. package/pipeline/skills/shared/external/shareplay-activities/evals/evals.json +23 -24
  169. package/pipeline/skills/shared/external/shareplay-activities/references/shareplay-patterns.md +280 -420
  170. package/pipeline/skills/shared/external/skill-creator/template.md +7 -1
  171. package/pipeline/skills/shared/external/speech-recognition/SKILL.md +217 -421
  172. package/pipeline/skills/shared/external/speech-recognition/evals/evals.json +23 -26
  173. package/pipeline/skills/shared/external/speech-recognition/references/speechanalyzer-patterns.md +133 -125
  174. package/pipeline/skills/shared/external/storekit/SKILL.md +228 -204
  175. package/pipeline/skills/shared/external/storekit/evals/evals.json +27 -24
  176. package/pipeline/skills/shared/external/storekit/references/app-review-guidelines.md +98 -109
  177. package/pipeline/skills/shared/external/storekit/references/core-patterns.md +302 -241
  178. package/pipeline/skills/shared/external/storekit/references/storekit-advanced.md +356 -649
  179. package/pipeline/skills/shared/external/swift-api-design-guidelines/SKILL.md +274 -399
  180. package/pipeline/skills/shared/external/swift-api-design-guidelines/evals/evals.json +22 -24
  181. package/pipeline/skills/shared/external/swift-api-design-guidelines/references/argument-labels-and-parameters.md +107 -108
  182. package/pipeline/skills/shared/external/swift-api-design-guidelines/references/conventions-and-special-rules.md +93 -165
  183. package/pipeline/skills/shared/external/swift-api-design-guidelines/references/naming-and-clarity.md +99 -137
  184. package/pipeline/skills/shared/external/swift-api-design-guidelines/references/side-effects-and-mutating-pairs.md +77 -120
  185. package/pipeline/skills/shared/external/swift-architecture/SKILL.md +334 -350
  186. package/pipeline/skills/shared/external/swift-architecture/evals/evals.json +22 -22
  187. package/pipeline/skills/shared/external/swift-charts/SKILL.md +208 -394
  188. package/pipeline/skills/shared/external/swift-charts/evals/evals.json +27 -30
  189. package/pipeline/skills/shared/external/swift-charts/references/charts-patterns.md +351 -762
  190. package/pipeline/skills/shared/external/swift-codable/SKILL.md +339 -343
  191. package/pipeline/skills/shared/external/swift-codable/evals/evals.json +20 -20
  192. package/pipeline/skills/shared/external/swift-concurrency/SKILL.md +304 -351
  193. package/pipeline/skills/shared/external/swift-concurrency/evals/evals.json +27 -24
  194. package/pipeline/skills/shared/external/swift-concurrency/references/approachable-concurrency.md +65 -80
  195. package/pipeline/skills/shared/external/swift-concurrency/references/async-algorithms.md +48 -84
  196. package/pipeline/skills/shared/external/swift-concurrency/references/bridging-interop.md +134 -79
  197. package/pipeline/skills/shared/external/swift-concurrency/references/concurrency-patterns.md +145 -167
  198. package/pipeline/skills/shared/external/swift-concurrency/references/diagnostics.md +62 -50
  199. package/pipeline/skills/shared/external/swift-concurrency/references/swiftui-concurrency.md +92 -121
  200. package/pipeline/skills/shared/external/swift-concurrency/references/synchronization-primitives.md +177 -241
  201. package/pipeline/skills/shared/external/swift-formatstyle/SKILL.md +258 -234
  202. package/pipeline/skills/shared/external/swift-language/SKILL.md +342 -382
  203. package/pipeline/skills/shared/external/swift-language/evals/evals.json +24 -27
  204. package/pipeline/skills/shared/external/swift-language/references/swift-attributes-interop.md +79 -56
  205. package/pipeline/skills/shared/external/swift-language/references/swift-patterns-extended.md +297 -340
  206. package/pipeline/skills/shared/external/swift-security/SKILL.md +183 -162
  207. package/pipeline/skills/shared/external/swift-security/evals/evals.json +25 -25
  208. package/pipeline/skills/shared/external/swift-security/references/biometric-authentication.md +314 -469
  209. package/pipeline/skills/shared/external/swift-security/references/certificate-trust.md +411 -476
  210. package/pipeline/skills/shared/external/swift-security/references/common-anti-patterns.md +260 -530
  211. package/pipeline/skills/shared/external/swift-security/references/compliance-owasp-mapping.md +270 -477
  212. package/pipeline/skills/shared/external/swift-security/references/credential-storage-patterns.md +573 -571
  213. package/pipeline/skills/shared/external/swift-security/references/cryptokit-public-key.md +370 -441
  214. package/pipeline/skills/shared/external/swift-security/references/cryptokit-symmetric.md +332 -433
  215. package/pipeline/skills/shared/external/swift-security/references/keychain-access-control.md +346 -468
  216. package/pipeline/skills/shared/external/swift-security/references/keychain-fundamentals.md +375 -491
  217. package/pipeline/skills/shared/external/swift-security/references/keychain-item-classes.md +431 -432
  218. package/pipeline/skills/shared/external/swift-security/references/keychain-sharing.md +328 -425
  219. package/pipeline/skills/shared/external/swift-security/references/migration-legacy-stores.md +341 -579
  220. package/pipeline/skills/shared/external/swift-security/references/secure-enclave.md +397 -457
  221. package/pipeline/skills/shared/external/swift-security/references/testing-security-code.md +354 -614
  222. package/pipeline/skills/shared/external/swift-testing/SKILL.md +191 -175
  223. package/pipeline/skills/shared/external/swift-testing/evals/evals.json +26 -24
  224. package/pipeline/skills/shared/external/swift-testing/references/testing-advanced.md +81 -84
  225. package/pipeline/skills/shared/external/swift-testing/references/testing-patterns.md +317 -433
  226. package/pipeline/skills/shared/external/swiftdata/SKILL.md +394 -256
  227. package/pipeline/skills/shared/external/swiftdata/evals/evals.json +24 -24
  228. package/pipeline/skills/shared/external/swiftdata/references/core-data-coexistence.md +206 -402
  229. package/pipeline/skills/shared/external/swiftdata/references/indexing.md +59 -52
  230. package/pipeline/skills/shared/external/swiftdata/references/predicate-pitfalls.md +57 -33
  231. package/pipeline/skills/shared/external/swiftdata/references/swiftdata-advanced.md +354 -747
  232. package/pipeline/skills/shared/external/swiftdata/references/swiftdata-queries.md +300 -508
  233. package/pipeline/skills/shared/external/swiftlint/SKILL.md +175 -226
  234. package/pipeline/skills/shared/external/swiftlint/references/adoption-and-configuration.md +141 -208
  235. package/pipeline/skills/shared/external/swiftlint/references/custom-rules-and-analyze.md +100 -109
  236. package/pipeline/skills/shared/external/swiftlint/references/plugins-run-scripts-and-integrations.md +159 -179
  237. package/pipeline/skills/shared/external/swiftlint/references/rule-reference.md +383 -18
  238. package/pipeline/skills/shared/external/swiftlint/references/rules-suppressions-and-baselines.md +143 -229
  239. package/pipeline/skills/shared/external/swiftui-animation/SKILL.md +283 -366
  240. package/pipeline/skills/shared/external/swiftui-animation/references/animation-advanced.md +396 -608
  241. package/pipeline/skills/shared/external/swiftui-animation/references/core-animation-bridge.md +336 -385
  242. package/pipeline/skills/shared/external/swiftui-gestures/SKILL.md +239 -349
  243. package/pipeline/skills/shared/external/swiftui-gestures/references/gesture-patterns.md +228 -310
  244. package/pipeline/skills/shared/external/swiftui-layout-components/SKILL.md +260 -249
  245. package/pipeline/skills/shared/external/swiftui-layout-components/references/form.md +92 -74
  246. package/pipeline/skills/shared/external/swiftui-layout-components/references/grids.md +112 -177
  247. package/pipeline/skills/shared/external/swiftui-layout-components/references/list.md +61 -64
  248. package/pipeline/skills/shared/external/swiftui-layout-components/references/scrollview.md +94 -134
  249. package/pipeline/skills/shared/external/swiftui-liquid-glass/SKILL.md +193 -225
  250. package/pipeline/skills/shared/external/swiftui-liquid-glass/references/liquid-glass.md +173 -327
  251. package/pipeline/skills/shared/external/swiftui-navigation/SKILL.md +201 -168
  252. package/pipeline/skills/shared/external/swiftui-navigation/references/deeplinks.md +127 -150
  253. package/pipeline/skills/shared/external/swiftui-navigation/references/navigationstack.md +134 -133
  254. package/pipeline/skills/shared/external/swiftui-navigation/references/sheets.md +152 -117
  255. package/pipeline/skills/shared/external/swiftui-navigation/references/tabview.md +111 -138
  256. package/pipeline/skills/shared/external/swiftui-patterns/SKILL.md +316 -252
  257. package/pipeline/skills/shared/external/swiftui-patterns/references/architecture-patterns.md +341 -332
  258. package/pipeline/skills/shared/external/swiftui-patterns/references/deprecated-migration.md +547 -854
  259. package/pipeline/skills/shared/external/swiftui-patterns/references/design-polish.md +485 -537
  260. package/pipeline/skills/shared/external/swiftui-patterns/references/platform-and-sharing.md +417 -499
  261. package/pipeline/skills/shared/external/swiftui-performance/SKILL.md +213 -376
  262. package/pipeline/skills/shared/external/swiftui-performance/references/demystify-swiftui-performance-wwdc23.md +86 -175
  263. package/pipeline/skills/shared/external/swiftui-performance/references/optimizing-swiftui-performance-instruments.md +89 -195
  264. package/pipeline/skills/shared/external/swiftui-performance/references/understanding-hangs-in-your-app.md +95 -182
  265. package/pipeline/skills/shared/external/swiftui-performance/references/understanding-improving-swiftui-performance.md +71 -149
  266. package/pipeline/skills/shared/external/swiftui-performance/references/wwdc-session-sources.md +21 -27
  267. package/pipeline/skills/shared/external/swiftui-uikit-interop/SKILL.md +303 -295
  268. package/pipeline/skills/shared/external/swiftui-uikit-interop/references/hosting-migration.md +204 -387
  269. package/pipeline/skills/shared/external/swiftui-uikit-interop/references/representable-recipes.md +469 -683
  270. package/pipeline/skills/shared/external/swiftui-webkit/SKILL.md +140 -186
  271. package/pipeline/skills/shared/external/swiftui-webkit/references/loading-and-observation.md +75 -86
  272. package/pipeline/skills/shared/external/swiftui-webkit/references/local-content-and-custom-schemes.md +63 -60
  273. package/pipeline/skills/shared/external/swiftui-webkit/references/migration-and-fallbacks.md +69 -137
  274. package/pipeline/skills/shared/external/swiftui-webkit/references/navigation-and-javascript.md +95 -67
  275. package/pipeline/skills/shared/external/tipkit/SKILL.md +220 -335
  276. package/pipeline/skills/shared/external/tipkit/references/tipkit-patterns.md +356 -494
  277. package/pipeline/skills/shared/external/vision-framework/SKILL.md +260 -375
  278. package/pipeline/skills/shared/external/vision-framework/references/vision-requests.md +393 -515
  279. package/pipeline/skills/shared/external/vision-framework/references/visionkit-scanner.md +363 -539
  280. package/pipeline/skills/shared/external/weatherkit/SKILL.md +160 -315
  281. package/pipeline/skills/shared/external/weatherkit/references/weatherkit-patterns.md +288 -407
  282. package/pipeline/skills/shared/external/widgetkit/SKILL.md +224 -288
  283. package/pipeline/skills/shared/external/widgetkit/references/widgetkit-advanced.md +416 -719
  284. package/pipeline/skills/shared/external/NOTICE-swift-ios-skills.md +0 -39
@@ -3,41 +3,41 @@
3
3
  "evals": [
4
4
  {
5
5
  "id": 1,
6
- "prompt": "Audit this iOS app's App Store submission readiness: it has subscriptions, a third-party analytics SDK, ads that may track users across apps, iPhone and iPad support, and a PrivacyInfo.xcprivacy file that only declares UserDefaults with CA92.1. Give the highest-risk rejection issues and the exact checks the team should run before upload.",
7
- "expected_output": "A source-grounded App Review readiness audit covering IAP/subscription display, ATT, privacy manifests and SDK manifests, Xcode/SDK upload requirements, screenshot requirements, metadata, and reviewer access.",
6
+ "prompt": "Our language-learning app is universal (iPhone and iPad), sells monthly and yearly subscriptions, bundles an analytics SDK and serves personalized ads. The privacy manifest only lists CA92.1. We plan to upload in May 2026. What will block us?",
7
+ "expected_output": "A blocker-first readiness audit that separates upload and review blockers from cleanup and covers toolchain, ATT, SDK manifests, IAP terms and screenshot sets.",
8
8
  "files": [],
9
9
  "expectations": [
10
- "Mentions that uploads after April 28, 2026 need Xcode 26 or later with the relevant platform SDK 26 or later.",
11
- "Identifies that tracking across apps or websites requires ATT, NSUserTrackingUsageDescription, and no tracking before authorization.",
12
- "Checks whether third-party SDK code that collects data, uses required-reason APIs, enables data collection, or contacts tracking domains has its own privacy manifest.",
13
- "Warns that digital subscriptions generally require StoreKit IAP and visible subscription terms, restore purchases, and no external purchase path unless current rules or entitlements allow it.",
14
- "Includes iPhone 6.9-inch and iPad 13-inch screenshot requirements for a universal iPhone/iPad app."
10
+ "States that uploads after April 28, 2026 must be built with Xcode 26 or later against a 26 SDK",
11
+ "Requires an ATT request with NSUserTrackingUsageDescription before any personalized-ad tracking, with no tracking before authorization",
12
+ "Says the analytics and ad SDKs need their own privacy manifests and that one CA92.1 entry does not cover them",
13
+ "Requires IAP for the subscriptions with price, duration, renewal and trial terms shown before purchase, a working restore, and no external purchase route",
14
+ "Requires a 6.9-inch iPhone screenshot set and a 13-inch iPad set"
15
15
  ]
16
16
  },
17
17
  {
18
18
  "id": 2,
19
- "prompt": "Review this proposed PrivacyInfo.xcprivacy plan: the app uses UserDefaults for settings, checks free disk space before downloading offline videos, reads file modification dates for files picked through UIDocumentPickerViewController, and includes an SDK that wraps UserDefaults for the app. Which required-reason API categories and reason codes should be declared, and where should the app versus SDK declarations live?",
20
- "expected_output": "A privacy-manifest reason-code review that selects current approved reason codes and correctly separates app manifest declarations from SDK manifest declarations.",
19
+ "prompt": "Which required-reason codes do we declare? We store user settings in UserDefaults, check free disk space before downloading lessons, show modification dates for files picked with the document picker, and a vendor SDK wraps UserDefaults for us.",
20
+ "expected_output": "A code-per-use mapping with the SDK declaration placed in the SDK's own manifest and a warning to re-check Apple's list.",
21
21
  "files": [],
22
22
  "expectations": [
23
- "Selects NSPrivacyAccessedAPICategoryUserDefaults with CA92.1 for app-owned UserDefaults settings.",
24
- "Selects NSPrivacyAccessedAPICategoryDiskSpace with E174.1 for checking free space before downloads.",
25
- "Selects NSPrivacyAccessedAPICategoryFileTimestamp with 3B52.1 for user-granted document picker files.",
26
- "Selects UserDefaults wrapper SDK reason C56D.1 for the SDK only and says the SDK must report its own required-reason API use in its own manifest.",
27
- "Warns not to invent broad reasons and to re-check Apple's current required-reason API documentation."
23
+ "Maps app-only settings in UserDefaults to CA92.1",
24
+ "Maps the free-space check before writing downloads to E174.1",
25
+ "Maps timestamps of user-picked files to 3B52.1",
26
+ "Assigns C56D.1 to the SDK wrapper and places it in the SDK's own manifest, not the app's",
27
+ "Warns against invented or convenience reasons and says to re-check the current reason list before release"
28
28
  ]
29
29
  },
30
30
  {
31
31
  "id": 3,
32
- "prompt": "I want better App Store keywords and screenshot captions for my habit tracker, but I also don't want a metadata rejection. Give me the compliance guardrails only, and call out which parts belong in an ASO strategy pass rather than an App Review pass.",
33
- "expected_output": "A boundary-aware answer that keeps app-store-review focused on metadata compliance and routes keyword strategy and conversion optimization to the ASO skill.",
32
+ "prompt": "Can you review our App Store name, subtitle, keywords and screenshot captions and tell us how to rank higher?",
33
+ "expected_output": "Compliance guardrails only, with ranking and conversion work routed to app-store-optimization.",
34
34
  "files": [],
35
35
  "expectations": [
36
- "States that keyword research, ranking strategy, and conversion optimization belong to an ASO strategy pass rather than App Review compliance.",
37
- "Gives App Review metadata guardrails: accurate app name, screenshots showing real UI, no misleading features, no prices in description, no competitor names or irrelevant keywords.",
38
- "Mentions the 30-character app name/subtitle limits and 100-character keyword field limit with comma-separated keywords and no spaces after commas.",
39
- "Mentions current screenshot size compliance, including 6.9-inch iPhone and 13-inch iPad requirements when applicable.",
40
- "Does not expand into a full keyword plan or marketing copy rewrite."
36
+ "Routes keyword research, ranking and conversion optimization to an ASO pass rather than doing it",
37
+ "Gives guardrails: an accurate name, screenshots of the real UI, no features that do not exist, no prices, no competitor or unrelated keywords",
38
+ "States the 30, 30 and 100 character limits and the comma-separated, no-space keyword rule",
39
+ "Names the 6.9-inch iPhone and 13-inch iPad screenshot sets",
40
+ "Does not produce a full keyword plan or rewrite the marketing copy"
41
41
  ]
42
42
  }
43
43
  ]
@@ -1,33 +1,32 @@
1
- # Privacy Manifest Reference
1
+ # Privacy Manifest (PrivacyInfo.xcprivacy)
2
2
 
3
- ## Contents
4
- - When a Privacy Manifest Is Required
5
- - Privacy Manifest Structure
6
- - Required API Reason Codes
7
- - Privacy Manifest Keys Reference
8
- - Third-Party SDK Manifests
9
- - Collected Data Types Declaration
10
- - Sources To Re-Check
3
+ ## When Required
11
4
 
12
- ## When a Privacy Manifest Is Required
5
+ A bundle needs a privacy manifest when its code calls an API in one of the
6
+ required-reason categories, or when it collects data or tracks. The category
7
+ identifiers are:
13
8
 
14
- A `PrivacyInfo.xcprivacy` file is required if your app or any dependency uses these API categories:
9
+ | Category | Identifier |
10
+ |---|---|
11
+ | File timestamps | `NSPrivacyAccessedAPICategoryFileTimestamp` |
12
+ | System boot time | `NSPrivacyAccessedAPICategorySystemBootTime` |
13
+ | Disk space | `NSPrivacyAccessedAPICategoryDiskSpace` |
14
+ | User defaults | `NSPrivacyAccessedAPICategoryUserDefaults` |
15
+ | Active keyboards | `NSPrivacyAccessedAPICategoryActiveKeyboards` |
15
16
 
16
- - File timestamp APIs (`NSPrivacyAccessedAPICategoryFileTimestamp`)
17
- - System boot time APIs (`NSPrivacyAccessedAPICategorySystemBootTime`)
18
- - Disk space APIs (`NSPrivacyAccessedAPICategoryDiskSpace`)
19
- - User defaults (`NSPrivacyAccessedAPICategoryUserDefaults`)
20
- - Active keyboard APIs (`NSPrivacyAccessedAPICategoryActiveKeyboards`)
17
+ Apple adds and adjusts categories and reasons. Before each release, read the
18
+ current reference pages for `NSPrivacyAccessedAPIType` and
19
+ `NSPrivacyAccessedAPITypeReasons` rather than trusting a copied table.
21
20
 
22
- Apple updates required-reason API coverage over time. Before final submission or release, re-check the current `NSPrivacyAccessedAPIType` and `NSPrivacyAccessedAPITypeReasons` documentation and do not invent broad or convenient reasons.
21
+ ## Structure
23
22
 
24
- ## Privacy Manifest Structure
23
+ The file is an ordinary XML property list (Xcode adds the usual XML prolog and
24
+ Apple plist DOCTYPE when it creates one; they are omitted below) with a
25
+ dictionary at the root. This one belongs to
26
+ an app that tracks nothing, collects nothing, and reads its own preferences
27
+ from `UserDefaults`:
25
28
 
26
29
  ```xml
27
- <!-- PrivacyInfo.xcprivacy -->
28
- <?xml version="1.0" encoding="UTF-8"?>
29
- <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
30
- "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
31
30
  <plist version="1.0">
32
31
  <dict>
33
32
  <key>NSPrivacyTracking</key>
@@ -35,9 +34,7 @@ Apple updates required-reason API coverage over time. Before final submission or
35
34
  <key>NSPrivacyTrackingDomains</key>
36
35
  <array/>
37
36
  <key>NSPrivacyCollectedDataTypes</key>
38
- <array>
39
- <!-- Declare every data type you collect -->
40
- </array>
37
+ <array/>
41
38
  <key>NSPrivacyAccessedAPITypes</key>
42
39
  <array>
43
40
  <dict>
@@ -53,61 +50,102 @@ Apple updates required-reason API coverage over time. Before final submission or
53
50
  </plist>
54
51
  ```
55
52
 
53
+ Each entry in `NSPrivacyAccessedAPITypes` pairs one category string with an
54
+ array of reason codes.
55
+
56
56
  ## Required API Reason Codes
57
57
 
58
- Use the exact approved reason that matches the app or SDK behavior. Do not use a broad reason code because it is convenient; Apple requires the declared reason to match the presented functionality and derived-data use.
58
+ Choose the code whose wording matches what the feature does, including what
59
+ happens to any value derived from the API. If none fits, the use is probably not
60
+ allowed; do not stretch a code to cover it.
59
61
 
60
- Before final submission, re-check Apple's current required-reason API documentation. Reason-code coverage can change, and invented or overly broad reasons are not acceptable.
62
+ File timestamps:
61
63
 
62
- | API Category | Code | Reason |
63
- |---|---|---|
64
- | FileTimestamp | `DDA9.1` | Display file timestamps to the person using the device |
65
- | FileTimestamp | `C617.1` | Access timestamps, size, or metadata for files in the app, app group, or CloudKit container |
66
- | FileTimestamp | `3B52.1` | Access timestamps, size, or metadata for user-granted files or directories |
67
- | FileTimestamp | `0A2A.1` | Third-party SDK wrapper around file timestamp APIs, only when called by the app |
68
- | SystemBootTime | `35F9.1` | Measure elapsed time between events |
69
- | SystemBootTime | `8FFB.1` | Calculate absolute timestamps for events that occurred within the app |
70
- | SystemBootTime | `3D61.1` | Include system boot time in an optional user-submitted bug report |
71
- | DiskSpace | `85F4.1` | Display disk space information to the person using the device |
72
- | DiskSpace | `E174.1` | Check available or low disk space before writes or cleanup |
73
- | DiskSpace | `7D9E.1` | Include disk space information in an optional user-submitted bug report |
74
- | DiskSpace | `B728.1` | Health research app detects low disk space impacting research data collection |
75
- | ActiveKeyboards | `3EC4.1` | Custom keyboard app checks active keyboards |
76
- | ActiveKeyboards | `54BD.1` | Present UI that visibly changes based on active keyboards |
77
- | UserDefaults | `CA92.1` | Read/write information accessible only to the app itself |
78
- | UserDefaults | `1C8F.1` | Read/write information accessible only within the same App Group |
79
- | UserDefaults | `C56D.1` | Third-party SDK wrapper around UserDefaults APIs, only when called by the app |
80
- | UserDefaults | `AC6B.1` | Managed app configuration or managed feedback keys for MDM |
81
-
82
- ## Privacy Manifest Keys Reference
83
-
84
- | Key | Type | Purpose |
64
+ | Code | Allowed use |
65
+ |---|---|
66
+ | `DDA9.1` | Displaying a file's dates to the user of the device |
67
+ | `C617.1` | Reading timestamps, size or other metadata of files inside the app container, an app group container or the app's CloudKit container |
68
+ | `3B52.1` | Reading timestamps, size or metadata of files or folders the user explicitly granted access to, for example through a document picker |
69
+ | `0A2A.1` | An SDK offering the app a thin wrapper over these APIs, invoked only by the app |
70
+
71
+ System boot time:
72
+
73
+ | Code | Allowed use |
74
+ |---|---|
75
+ | `35F9.1` | Measuring time elapsed between events in the app |
76
+ | `8FFB.1` | Computing absolute timestamps for events that happen in the app |
77
+ | `3D61.1` | Including boot time in a bug report the user chooses to submit |
78
+
79
+ Disk space:
80
+
81
+ | Code | Allowed use |
82
+ |---|---|
83
+ | `85F4.1` | Showing disk space figures to the user |
84
+ | `E174.1` | Checking free or low space before writing files, or to decide when to clean up |
85
+ | `7D9E.1` | Including disk information in a bug report the user chooses to submit |
86
+ | `B728.1` | A health research app detecting low space that would stop research data collection |
87
+
88
+ Active keyboards:
89
+
90
+ | Code | Allowed use |
91
+ |---|---|
92
+ | `3EC4.1` | A custom keyboard app checking which keyboards are active |
93
+ | `54BD.1` | Changing the visible UI depending on the active keyboards |
94
+
95
+ User defaults:
96
+
97
+ | Code | Allowed use |
98
+ |---|---|
99
+ | `CA92.1` | Reading and writing data that only the app itself can access |
100
+ | `1C8F.1` | Reading and writing data shared only inside the same App Group |
101
+ | `C56D.1` | An SDK offering the app a thin wrapper over `UserDefaults`, invoked only by the app |
102
+ | `AC6B.1` | Reading managed app configuration or writing managed feedback keys for MDM |
103
+
104
+ Worked mapping:
105
+
106
+ - A settings screen persisted in the app's own defaults: `CA92.1`.
107
+ - A download manager that checks free space before fetching: `E174.1`.
108
+ - Showing the modified date of a file the user opened from Files: `3B52.1`.
109
+ - A vendor library whose preferences helper the app calls: `C56D.1`, declared in
110
+ the library's manifest, not the app's.
111
+
112
+ ## Keys Reference
113
+
114
+ | Key | Type | Meaning |
85
115
  |---|---|---|
86
- | `NSPrivacyTracking` | Boolean | Whether the app tracks users (triggers ATT requirement) |
87
- | `NSPrivacyTrackingDomains` | Array of strings | Domains used for tracking (connected only after ATT consent) |
88
- | `NSPrivacyCollectedDataTypes` | Array of dicts | Each data type collected, its purpose, and whether it is linked to identity |
89
- | `NSPrivacyAccessedAPITypes` | Array of dicts | Each required-reason API used and the justification codes |
116
+ | `NSPrivacyTracking` | Boolean | The bundle tracks users as ATT defines it; `true` means the ATT prompt is required |
117
+ | `NSPrivacyTrackingDomains` | Array of strings | Hosts the bundle contacts to track. When the user has not allowed tracking, the system blocks connections to them |
118
+ | `NSPrivacyCollectedDataTypes` | Array of dictionaries | One entry per collected data type: purposes, identity linkage, tracking use |
119
+ | `NSPrivacyAccessedAPITypes` | Array of dictionaries | Every required-reason API category the bundle calls, with its codes |
90
120
 
91
121
  ## Third-Party SDK Manifests
92
122
 
93
- - Verify each SDK, executable, or dynamic library that uses required-reason APIs includes `PrivacyInfo.xcprivacy` in the bundle containing that code
94
- - Ensure SDK reason codes match actual SDK usage; an SDK cannot rely on the host app's manifest to report the SDK's own required-reason API use
95
- - Update SDK versions when required manifests or reason declarations are missing
96
- - Keep the app's manifest focused on app code and app-level collected data/tracking declarations
123
+ - A vendor framework, helper executable or dylib calling required-reason APIs
124
+ carries its own `PrivacyInfo.xcprivacy` inside its own bundle, with codes that
125
+ match what that SDK does.
126
+ - If an SDK version lacks a manifest, or its reasons are missing, move to a
127
+ version that has them. Do not paste the SDK's declarations into the app's
128
+ manifest; the app manifest covers app code and app-level data and tracking.
97
129
 
98
130
  ## Collected Data Types Declaration
99
131
 
100
- Each `NSPrivacyCollectedDataTypes` entry must specify:
132
+ Each item in `NSPrivacyCollectedDataTypes` is a dictionary with four keys:
101
133
 
102
- - `NSPrivacyCollectedDataType` (category)
103
- - `NSPrivacyCollectedDataTypeLinked` (linked to identity)
104
- - `NSPrivacyCollectedDataTypeTracking` (used for tracking)
105
- - `NSPrivacyCollectedDataTypePurposes` (purposes array)
134
+ | Key | Content |
135
+ |---|---|
136
+ | `NSPrivacyCollectedDataType` | The data type identifier, for example email address or crash data |
137
+ | `NSPrivacyCollectedDataTypeLinked` | Whether the data is tied to the user's identity |
138
+ | `NSPrivacyCollectedDataTypeTracking` | Whether it is used for tracking |
139
+ | `NSPrivacyCollectedDataTypePurposes` | The purposes, for example app functionality or analytics |
106
140
 
107
- Keep manifests, privacy nutrition labels, SDK behavior, and app functionality consistent. Mismatches cause rejection.
141
+ If these entries disagree with the nutrition label, with what an SDK sends, or
142
+ with the features in the app, expect a rejection.
108
143
 
109
144
  ## Sources To Re-Check
110
145
 
111
- - Required-reason API overview: https://sosumi.ai/documentation/bundleresources/describing-use-of-required-reason-api
112
- - Required-reason API categories: https://sosumi.ai/documentation/bundleresources/app-privacy-configuration/nsprivacyaccessedapitypes/nsprivacyaccessedapitype
113
- - Required-reason codes: https://sosumi.ai/documentation/bundleresources/app-privacy-configuration/nsprivacyaccessedapitypes/nsprivacyaccessedapitypereasons
146
+ Start from the bundle resources documentation on developer.apple.com and open
147
+ these pages:
148
+
149
+ - the article that explains how to declare required-reason API use
150
+ - the `NSPrivacyAccessedAPIType` key page
151
+ - the `NSPrivacyAccessedAPITypeReasons` key page, which carries the live code list
@@ -1,120 +1,133 @@
1
- # App Store Review Checklists
1
+ # Review Checklists
2
2
 
3
- ## Contents
4
- - App Review Information Checklist
5
- - Privacy Manifest Checklist
6
- - In-App Purchase Checklist
7
- - Screenshot and App Preview Checklist
8
- - HIG Compliance Checklist
9
- - Pre-Submission Checklist
3
+ Working lists for a submission audit. Tick each line against the build that
4
+ will actually be uploaded, not against a debug build.
10
5
 
11
6
  ## App Review Information Checklist
12
7
 
13
- Use this to avoid Guideline 2.1 rejections:
14
-
15
- - [ ] Demo credentials provided in App Review Information notes (if login required)
16
- - [ ] Demo mode available if credentials are impractical or account state is hard to reproduce
17
- - [ ] Demo account works and has access to all features
18
- - [ ] App Review notes explain login-gated, role-gated, region-gated, hardware-gated, or otherwise non-obvious features
19
- - [ ] All screens have real content (no placeholders or Lorem Ipsum)
20
- - [ ] No broken links or dead-end flows
21
- - [ ] All hardware-required features have fallback or reviewer instructions
8
+ - [ ] Login required: a working username and password sit in the notes field of
9
+ App Review Information.
10
+ - [ ] Credentials impractical, or the needed account state is hard to recreate:
11
+ the app has a demo mode and the notes say how to enter it.
12
+ - [ ] The demo account signs in and reaches every feature, not a trimmed tier.
13
+ - [ ] Notes explain anything gated by login, role, region or hardware, and any
14
+ feature a reviewer would not stumble on alone.
15
+ - [ ] Every screen has real content. No broken links, no dead ends.
16
+ - [ ] Features that need particular hardware have a fallback or step-by-step
17
+ instructions for the reviewer.
22
18
 
23
19
  ## Privacy Manifest Checklist
24
20
 
25
- Verify PrivacyInfo.xcprivacy completeness:
26
-
27
- - [ ] `PrivacyInfo.xcprivacy` exists where app code, SDK code, executables, or dynamic libraries need it
28
- - [ ] All required-reason API categories in app and bundled SDK code are declared with approved reason codes
29
- - [ ] `NSPrivacyTracking` is true only if tracking occurs
30
- - [ ] Third-party SDK manifests present and up to date when SDKs collect data, use required-reason APIs, enable data collection, or contact tracking domains
31
- - [ ] Privacy nutrition labels match actual data collection
32
- - [ ] Audit runtime network traffic and SDK transmissions; observed behavior must match privacy labels, manifests, privacy policy, and ATT state
21
+ - [ ] A `PrivacyInfo.xcprivacy` exists in every bundle that needs one: app,
22
+ SDKs, executables, dynamic libraries.
23
+ - [ ] Every required-reason category used by app code or bundled SDK code is
24
+ declared with an approved code that matches the use.
25
+ - [ ] `NSPrivacyTracking` is `true` only if the app really tracks.
26
+ - [ ] Each third-party SDK that collects data, calls required-reason APIs, turns
27
+ on collection or contacts tracking domains ships its own current manifest.
28
+ - [ ] Runtime traffic and SDK transmissions were captured and compared with the
29
+ nutrition label, the manifests, the privacy policy and the ATT state.
33
30
 
34
31
  ## In-App Purchase Checklist
35
32
 
36
- - [ ] Digital goods and subscriptions use StoreKit IAP unless current storefront rules or approved entitlements allow otherwise
37
- - [ ] Subscription price, duration, billing frequency, auto-renewal terms, and any trial duration/post-trial price shown before purchase
38
- - [ ] Restore purchases button present and functional
39
- - [ ] No external purchase path, link, button, or call to action for digital goods unless current rules or approved entitlements allow it
40
- - [ ] Ask-to-buy and interrupted purchases handled
41
- - [ ] Transaction verification uses StoreKit 2 or server-side verification
33
+ - [ ] Digital goods and subscriptions are sold through StoreKit unless a current rule or
34
+ approved entitlement allows another route.
35
+ - [ ] Before purchase the user sees price, duration, billing frequency,
36
+ auto-renewal and, for trials, trial length and the price afterwards.
37
+ - [ ] Restore Purchases is present and works.
38
+ - [ ] No external purchase calls to action unless allowed for the storefront.
39
+ - [ ] Purchases waiting on a parent, and purchases cut off midway, are handled.
40
+ - [ ] Purchases are verified with StoreKit 2 or on the server.
42
41
 
43
42
  ## Screenshot and App Preview Checklist
44
43
 
45
- - [ ] 1-10 screenshots uploaded for each required platform and localization
46
- - [ ] iPhone screenshots use current App Store Connect accepted sizes; 6.9-inch iPhone screenshots are the primary set as of May 2026
47
- - [ ] 6.5-inch iPhone screenshots provided only when 6.9-inch iPhone screenshots are not provided or when manually optimizing that fallback
48
- - [ ] 13-inch iPad screenshots provided if the app runs on iPad
49
- - [ ] Screenshots and preview videos show actual app UI and do not misrepresent unavailable features
50
- - [ ] App previews are 30 seconds or shorter, with a poster frame that works without autoplay
44
+ - [ ] 1 to 10 screenshots per platform and localization. As of May 2026 the
45
+ 6.9-inch iPhone set is the primary one.
46
+ - [ ] A 6.5-inch set only when there is no 6.9-inch set, or when you choose to
47
+ tune that fallback by hand.
48
+ - [ ] A 13-inch iPad set for any app that supports iPad.
49
+ - [ ] Screenshots and previews show the real UI.
50
+ - [ ] Previews last 30 seconds or less, and the poster frame makes sense on its
51
+ own when autoplay is off.
51
52
 
52
53
  ## HIG Compliance Checklist
53
54
 
54
- ### Navigation
55
- - [ ] `NavigationStack` used (not `NavigationView`)
56
- - [ ] System back chevron used; no custom back icons
57
- - [ ] Tab bar uses <= 5 tabs; use More tab if needed
58
- - [ ] Avoid hamburger menus
59
-
60
- ### Modals and Sheets
61
- - [ ] Sheets have a visible dismiss control
62
- - [ ] Full-screen modals have close/done button
63
- - [ ] Alerts use system alert styles
64
-
65
- ### System Feature Support
66
- - [ ] Dark Mode renders correctly
67
- - [ ] Dynamic Type supported throughout
68
- - [ ] iPad multitasking supported (Slide Over, Split View)
69
- - [ ] Dynamic Island / Live Activities render correctly when used
70
- - [ ] System gestures not disabled
71
-
72
- ### Widgets and Live Activities
73
- - [ ] Widgets show real content (not placeholders)
74
- - [ ] Timelines update meaningfully
75
- - [ ] Live Activities show time-sensitive info
76
- - [ ] Lock Screen widgets are legible at small sizes
55
+ These are design-quality items. Most will not cause a rejection alone, but
56
+ reviewers notice them and they compound other findings.
57
+
58
+ Navigation:
59
+
60
+ - [ ] `NavigationStack`, not the deprecated `NavigationView`.
61
+ - [ ] The system back chevron, not a custom back icon.
62
+ - [ ] At most five tab bar items; overflow goes to a More tab.
63
+ - [ ] No hamburger menu as the main navigation.
64
+
65
+ Modals:
66
+
67
+ - [ ] Sheets have a visible way to dismiss.
68
+ - [ ] Full-screen modals have Close or Done.
69
+ - [ ] Alerts use the system styles.
70
+
71
+ System features:
72
+
73
+ - [ ] Dark Mode renders correctly.
74
+ - [ ] Dynamic Type scales without clipping.
75
+ - [ ] iPad multitasking (Slide Over, Split View) works.
76
+ - [ ] Dynamic Island and Live Activities render correctly when the app uses them.
77
+ - [ ] System gestures are not disabled.
78
+
79
+ Widgets and Live Activities:
80
+
81
+ - [ ] Widgets display live data; no placeholder content ships.
82
+ - [ ] Timelines update in a way the user can see is meaningful.
83
+ - [ ] Live Activities carry time-sensitive information only.
84
+ - [ ] Lock Screen widgets stay legible at small sizes.
77
85
 
78
86
  ## Pre-Submission Checklist
79
87
 
80
- ### Completeness
81
- - [ ] No placeholder or test content
82
- - [ ] All features functional without special hardware
83
- - [ ] Demo credentials or demo mode provided, with App Review notes for gated or non-obvious features
84
- - [ ] No dead-end screens
85
-
86
- ### Metadata
87
- - [ ] App name matches functionality
88
- - [ ] Screenshots are real app screenshots using current required platform sizes, including 6.9-inch iPhone and 13-inch iPad when applicable
89
- - [ ] Description contains no prices or competitor mentions
90
- - [ ] Category is correct
91
-
92
- ### Privacy
93
- - [ ] Privacy manifest present where required, with approved reason codes
94
- - [ ] Third-party SDK manifests verified
95
- - [ ] Privacy policy URL present and accessible
96
- - [ ] Audit runtime network traffic and SDK transmissions; nutrition labels, privacy manifest declarations, privacy policy, and observed behavior match actual data collection
97
- - [ ] ATT prompt only if tracking occurs
98
-
99
- ### Payments
100
- - [ ] Digital content uses StoreKit IAP unless current rules or approved entitlements allow otherwise
101
- - [ ] Subscription price, duration, billing frequency, auto-renewal terms, and any trial duration/post-trial price visible before purchase
102
- - [ ] No external purchase paths, payment links, buttons, or calls to action unless current storefront rules or approved entitlements allow them
103
- - [ ] Free trial terms clear
104
- - [ ] Restore purchases implemented
105
-
106
- ### Design
107
- - [ ] Standard navigation patterns used
108
- - [ ] Dark Mode supported
109
- - [ ] Dynamic Type supported
110
- - [ ] No custom alerts mimicking system alerts
111
- - [ ] Launch screen not an ad
112
- - [ ] Empty states provide guidance
113
-
114
- ### Technical
115
- - [ ] Built with Xcode 26 or later and relevant platform SDK 26 or later for uploads after April 28, 2026
116
- - [ ] No private API usage
117
- - [ ] No dynamic code execution
118
- - [ ] Entitlements justified with usage descriptions
119
- - [ ] Background modes justified and used
120
- - [ ] Deployment target is intentionally chosen and tested
88
+ Completeness:
89
+
90
+ - [ ] No placeholder or test content.
91
+ - [ ] Every feature works without special hardware, or the notes explain it.
92
+ - [ ] Demo credentials or demo mode, with notes.
93
+ - [ ] No dead ends.
94
+
95
+ Metadata:
96
+
97
+ - [ ] The name matches what the app does.
98
+ - [ ] Screenshots are real and at the current required sizes.
99
+ - [ ] No prices or competitor names in the description.
100
+ - [ ] The category is correct.
101
+
102
+ Privacy:
103
+
104
+ - [ ] Manifest present with approved reason codes.
105
+ - [ ] SDK manifests checked.
106
+ - [ ] Privacy policy URL set and reachable.
107
+ - [ ] Runtime and SDK audit agrees with labels, manifest and policy.
108
+ - [ ] ATT prompt only if the app tracks.
109
+
110
+ Payments:
111
+
112
+ - [ ] IAP for digital content.
113
+ - [ ] Full subscription and trial terms visible before purchase.
114
+ - [ ] No external payment calls to action unless allowed.
115
+ - [ ] Free trial terms are clear.
116
+ - [ ] Restore implemented.
117
+
118
+ Design:
119
+
120
+ - [ ] Standard navigation.
121
+ - [ ] Dark Mode and Dynamic Type.
122
+ - [ ] No custom alerts that imitate system alerts.
123
+ - [ ] The launch screen is not an advertisement.
124
+ - [ ] Empty states tell the user what to do next.
125
+
126
+ Technical:
127
+
128
+ - [ ] Uploads after April 28, 2026 built with Xcode 26+ and SDK 26+.
129
+ - [ ] No private APIs.
130
+ - [ ] No code downloaded and executed to change features.
131
+ - [ ] Every entitlement justified, with usage descriptions.
132
+ - [ ] Every background mode justified and in use.
133
+ - [ ] Deployment target chosen on purpose and tested on the oldest supported OS.