@mmerterden/multi-agent-pipeline 20.7.0 → 20.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (264) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/LICENSE +0 -10
  3. package/docs/facts.json +1 -1
  4. package/manifest.json +266 -267
  5. package/package.json +2 -2
  6. package/pipeline/scripts/_notices.mjs +1 -1
  7. package/pipeline/skills/.skill-manifest.json +68 -68
  8. package/pipeline/skills/shared/README.md +70 -70
  9. package/pipeline/skills/shared/external/alarmkit/SKILL.md +373 -381
  10. package/pipeline/skills/shared/external/alarmkit/evals/evals.json +23 -18
  11. package/pipeline/skills/shared/external/alarmkit/references/alarmkit-patterns.md +328 -378
  12. package/pipeline/skills/shared/external/app-clips/SKILL.md +260 -160
  13. package/pipeline/skills/shared/external/app-clips/evals/evals.json +27 -27
  14. package/pipeline/skills/shared/external/app-clips/references/data-handoff-notifications-location.md +150 -83
  15. package/pipeline/skills/shared/external/app-clips/references/routing-and-experiences.md +135 -83
  16. package/pipeline/skills/shared/external/app-clips/references/size-capabilities-and-promotion.md +143 -85
  17. package/pipeline/skills/shared/external/app-intents/SKILL.md +302 -304
  18. package/pipeline/skills/shared/external/app-intents/evals/evals.json +21 -21
  19. package/pipeline/skills/shared/external/app-intents/references/appintents-advanced.md +594 -894
  20. package/pipeline/skills/shared/external/app-store-optimization/SKILL.md +339 -277
  21. package/pipeline/skills/shared/external/app-store-optimization/evals/evals.json +27 -23
  22. package/pipeline/skills/shared/external/app-store-optimization/references/keyword-research-methodology.md +105 -122
  23. package/pipeline/skills/shared/external/app-store-optimization/references/product-page-variants.md +143 -166
  24. package/pipeline/skills/shared/external/app-store-review/SKILL.md +307 -326
  25. package/pipeline/skills/shared/external/app-store-review/evals/evals.json +21 -21
  26. package/pipeline/skills/shared/external/app-store-review/references/privacy-manifest.md +105 -67
  27. package/pipeline/skills/shared/external/app-store-review/references/review-checklists.md +114 -101
  28. package/pipeline/skills/shared/external/apple-on-device-ai/SKILL.md +333 -360
  29. package/pipeline/skills/shared/external/apple-on-device-ai/evals/evals.json +24 -27
  30. package/pipeline/skills/shared/external/apple-on-device-ai/references/coreml-conversion.md +215 -322
  31. package/pipeline/skills/shared/external/apple-on-device-ai/references/coreml-optimization.md +161 -256
  32. package/pipeline/skills/shared/external/apple-on-device-ai/references/foundation-models.md +277 -387
  33. package/pipeline/skills/shared/external/apple-on-device-ai/references/mlx-swift.md +196 -210
  34. package/pipeline/skills/shared/external/authentication/SKILL.md +265 -381
  35. package/pipeline/skills/shared/external/authentication/evals/evals.json +25 -25
  36. package/pipeline/skills/shared/external/authentication/references/keychain-biometric.md +133 -178
  37. package/pipeline/skills/shared/external/authentication/references/passkeys.md +111 -147
  38. package/pipeline/skills/shared/external/avkit/SKILL.md +267 -364
  39. package/pipeline/skills/shared/external/avkit/evals/evals.json +26 -26
  40. package/pipeline/skills/shared/external/avkit/references/avkit-patterns.md +375 -493
  41. package/pipeline/skills/shared/external/background-processing/SKILL.md +270 -382
  42. package/pipeline/skills/shared/external/background-processing/evals/evals.json +22 -22
  43. package/pipeline/skills/shared/external/background-processing/references/background-task-patterns.md +169 -317
  44. package/pipeline/skills/shared/external/callkit-voip/SKILL.md +290 -371
  45. package/pipeline/skills/shared/external/callkit-voip/evals/evals.json +24 -24
  46. package/pipeline/skills/shared/external/callkit-voip/references/callkit-patterns.md +175 -343
  47. package/pipeline/skills/shared/external/cloudkit-sync/SKILL.md +292 -381
  48. package/pipeline/skills/shared/external/cloudkit-sync/evals/evals.json +33 -30
  49. package/pipeline/skills/shared/external/cloudkit-sync/references/cloudkit-patterns.md +227 -355
  50. package/pipeline/skills/shared/external/contacts-framework/SKILL.md +197 -346
  51. package/pipeline/skills/shared/external/contacts-framework/evals/evals.json +19 -21
  52. package/pipeline/skills/shared/external/contacts-framework/references/contacts-patterns.md +169 -308
  53. package/pipeline/skills/shared/external/core-bluetooth/SKILL.md +226 -376
  54. package/pipeline/skills/shared/external/core-bluetooth/evals/evals.json +25 -22
  55. package/pipeline/skills/shared/external/core-bluetooth/references/ble-patterns.md +257 -337
  56. package/pipeline/skills/shared/external/core-data/SKILL.md +292 -368
  57. package/pipeline/skills/shared/external/core-data/evals/evals.json +30 -27
  58. package/pipeline/skills/shared/external/core-motion/SKILL.md +235 -324
  59. package/pipeline/skills/shared/external/core-motion/evals/evals.json +31 -27
  60. package/pipeline/skills/shared/external/core-motion/references/motion-patterns.md +210 -310
  61. package/pipeline/skills/shared/external/core-nfc/SKILL.md +292 -366
  62. package/pipeline/skills/shared/external/core-nfc/evals/evals.json +22 -24
  63. package/pipeline/skills/shared/external/core-nfc/references/nfc-patterns.md +233 -329
  64. package/pipeline/skills/shared/external/coreml/SKILL.md +323 -367
  65. package/pipeline/skills/shared/external/coreml/evals/evals.json +24 -21
  66. package/pipeline/skills/shared/external/coreml/references/coreml-swift-integration.md +562 -565
  67. package/pipeline/skills/shared/external/cryptokit/SKILL.md +253 -394
  68. package/pipeline/skills/shared/external/cryptokit/evals/evals.json +20 -18
  69. package/pipeline/skills/shared/external/cryptokit/references/cryptokit-patterns.md +299 -488
  70. package/pipeline/skills/shared/external/debugging-instruments/SKILL.md +270 -323
  71. package/pipeline/skills/shared/external/debugging-instruments/evals/evals.json +27 -30
  72. package/pipeline/skills/shared/external/debugging-instruments/references/instruments-guide.md +167 -315
  73. package/pipeline/skills/shared/external/debugging-instruments/references/lldb-patterns.md +140 -193
  74. package/pipeline/skills/shared/external/device-integrity/SKILL.md +230 -353
  75. package/pipeline/skills/shared/external/device-integrity/evals/evals.json +25 -21
  76. package/pipeline/skills/shared/external/device-integrity/references/device-integrity-patterns.md +159 -197
  77. package/pipeline/skills/shared/external/energykit/SKILL.md +225 -392
  78. package/pipeline/skills/shared/external/energykit/evals/evals.json +29 -28
  79. package/pipeline/skills/shared/external/energykit/references/energykit-patterns.md +174 -470
  80. package/pipeline/skills/shared/external/eventkit-calendar/SKILL.md +261 -383
  81. package/pipeline/skills/shared/external/eventkit-calendar/evals/evals.json +25 -22
  82. package/pipeline/skills/shared/external/eventkit-calendar/references/eventkit-patterns.md +165 -268
  83. package/pipeline/skills/shared/external/healthkit/SKILL.md +252 -303
  84. package/pipeline/skills/shared/external/healthkit/evals/evals.json +24 -23
  85. package/pipeline/skills/shared/external/healthkit/references/healthkit-patterns.md +369 -523
  86. package/pipeline/skills/shared/external/homekit-matter/SKILL.md +233 -348
  87. package/pipeline/skills/shared/external/homekit-matter/evals/evals.json +27 -22
  88. package/pipeline/skills/shared/external/homekit-matter/references/matter-commissioning.md +199 -305
  89. package/pipeline/skills/shared/external/ios-accessibility/SKILL.md +368 -340
  90. package/pipeline/skills/shared/external/ios-accessibility/evals/evals.json +28 -27
  91. package/pipeline/skills/shared/external/ios-accessibility/references/a11y-patterns.md +314 -260
  92. package/pipeline/skills/shared/external/ios-accessibility/references/media-accessibility.md +97 -67
  93. package/pipeline/skills/shared/external/ios-accessibility/references/nutrition-labels.md +165 -101
  94. package/pipeline/skills/shared/external/ios-localization/SKILL.md +258 -371
  95. package/pipeline/skills/shared/external/ios-localization/evals/evals.json +23 -23
  96. package/pipeline/skills/shared/external/ios-localization/references/formatstyle-locale.md +283 -491
  97. package/pipeline/skills/shared/external/ios-localization/references/string-catalogs.md +313 -440
  98. package/pipeline/skills/shared/external/ios-networking/SKILL.md +265 -341
  99. package/pipeline/skills/shared/external/ios-networking/evals/evals.json +24 -24
  100. package/pipeline/skills/shared/external/ios-networking/references/background-websocket.md +425 -652
  101. package/pipeline/skills/shared/external/ios-networking/references/file-storage-patterns.md +143 -285
  102. package/pipeline/skills/shared/external/ios-networking/references/lightweight-clients.md +93 -53
  103. package/pipeline/skills/shared/external/ios-networking/references/network-framework.md +231 -456
  104. package/pipeline/skills/shared/external/ios-networking/references/urlsession-patterns.md +517 -784
  105. package/pipeline/skills/shared/external/ios-simulator/SKILL.md +265 -393
  106. package/pipeline/skills/shared/external/ios-simulator/evals/evals.json +21 -21
  107. package/pipeline/skills/shared/external/ios-simulator/references/simctl-commands.md +177 -270
  108. package/pipeline/skills/shared/external/live-activities/SKILL.md +318 -360
  109. package/pipeline/skills/shared/external/live-activities/evals/evals.json +21 -21
  110. package/pipeline/skills/shared/external/live-activities/references/activitykit-patterns.md +478 -710
  111. package/pipeline/skills/shared/external/mapkit-location/SKILL.md +295 -267
  112. package/pipeline/skills/shared/external/mapkit-location/evals/evals.json +28 -24
  113. package/pipeline/skills/shared/external/mapkit-location/references/mapkit-corelocation-patterns.md +378 -532
  114. package/pipeline/skills/shared/external/mapkit-location/references/mapkit-patterns.md +397 -499
  115. package/pipeline/skills/shared/external/metrickit-diagnostics/SKILL.md +165 -348
  116. package/pipeline/skills/shared/external/metrickit-diagnostics/evals/evals.json +26 -23
  117. package/pipeline/skills/shared/external/metrickit-diagnostics/references/metrickit-patterns.md +123 -130
  118. package/pipeline/skills/shared/external/musickit-audio/SKILL.md +189 -315
  119. package/pipeline/skills/shared/external/musickit-audio/evals/evals.json +22 -21
  120. package/pipeline/skills/shared/external/musickit-audio/references/musickit-patterns.md +181 -270
  121. package/pipeline/skills/shared/external/natural-language/SKILL.md +188 -340
  122. package/pipeline/skills/shared/external/natural-language/evals/evals.json +21 -21
  123. package/pipeline/skills/shared/external/natural-language/references/translation-patterns.md +171 -225
  124. package/pipeline/skills/shared/external/passkit-wallet/SKILL.md +258 -392
  125. package/pipeline/skills/shared/external/passkit-wallet/evals/evals.json +30 -29
  126. package/pipeline/skills/shared/external/passkit-wallet/references/wallet-passes.md +164 -231
  127. package/pipeline/skills/shared/external/pdfkit/SKILL.md +312 -344
  128. package/pipeline/skills/shared/external/pdfkit/evals/evals.json +19 -19
  129. package/pipeline/skills/shared/external/pdfkit/references/pdfkit-patterns.md +413 -624
  130. package/pipeline/skills/shared/external/pencilkit-drawing/SKILL.md +242 -358
  131. package/pipeline/skills/shared/external/pencilkit-drawing/evals/evals.json +25 -21
  132. package/pipeline/skills/shared/external/pencilkit-drawing/references/pencilkit-patterns.md +161 -226
  133. package/pipeline/skills/shared/external/permissionkit/SKILL.md +282 -400
  134. package/pipeline/skills/shared/external/permissionkit/evals/evals.json +27 -30
  135. package/pipeline/skills/shared/external/permissionkit/references/permissionkit-patterns.md +237 -350
  136. package/pipeline/skills/shared/external/photos-camera-media/SKILL.md +276 -325
  137. package/pipeline/skills/shared/external/photos-camera-media/references/av-playback.md +299 -545
  138. package/pipeline/skills/shared/external/photos-camera-media/references/camera-capture.md +344 -588
  139. package/pipeline/skills/shared/external/photos-camera-media/references/image-loading-caching.md +316 -660
  140. package/pipeline/skills/shared/external/photos-camera-media/references/photokit-patterns.md +270 -416
  141. package/pipeline/skills/shared/external/push-notifications/SKILL.md +312 -340
  142. package/pipeline/skills/shared/external/push-notifications/evals/evals.json +27 -26
  143. package/pipeline/skills/shared/external/push-notifications/references/notification-patterns.md +328 -485
  144. package/pipeline/skills/shared/external/push-notifications/references/rich-notifications.md +327 -560
  145. package/pipeline/skills/shared/external/realitykit-ar/SKILL.md +218 -410
  146. package/pipeline/skills/shared/external/realitykit-ar/evals/evals.json +24 -27
  147. package/pipeline/skills/shared/external/realitykit-ar/references/realitykit-patterns.md +221 -348
  148. package/pipeline/skills/shared/external/shareplay-activities/SKILL.md +222 -393
  149. package/pipeline/skills/shared/external/shareplay-activities/evals/evals.json +23 -24
  150. package/pipeline/skills/shared/external/shareplay-activities/references/shareplay-patterns.md +280 -420
  151. package/pipeline/skills/shared/external/speech-recognition/SKILL.md +217 -421
  152. package/pipeline/skills/shared/external/speech-recognition/evals/evals.json +23 -26
  153. package/pipeline/skills/shared/external/speech-recognition/references/speechanalyzer-patterns.md +133 -125
  154. package/pipeline/skills/shared/external/storekit/SKILL.md +228 -204
  155. package/pipeline/skills/shared/external/storekit/evals/evals.json +27 -24
  156. package/pipeline/skills/shared/external/storekit/references/app-review-guidelines.md +98 -109
  157. package/pipeline/skills/shared/external/storekit/references/core-patterns.md +298 -242
  158. package/pipeline/skills/shared/external/storekit/references/storekit-advanced.md +356 -649
  159. package/pipeline/skills/shared/external/swift-api-design-guidelines/SKILL.md +274 -399
  160. package/pipeline/skills/shared/external/swift-api-design-guidelines/evals/evals.json +22 -24
  161. package/pipeline/skills/shared/external/swift-api-design-guidelines/references/argument-labels-and-parameters.md +107 -108
  162. package/pipeline/skills/shared/external/swift-api-design-guidelines/references/conventions-and-special-rules.md +93 -165
  163. package/pipeline/skills/shared/external/swift-api-design-guidelines/references/naming-and-clarity.md +99 -137
  164. package/pipeline/skills/shared/external/swift-api-design-guidelines/references/side-effects-and-mutating-pairs.md +77 -120
  165. package/pipeline/skills/shared/external/swift-architecture/SKILL.md +334 -350
  166. package/pipeline/skills/shared/external/swift-architecture/evals/evals.json +22 -22
  167. package/pipeline/skills/shared/external/swift-charts/SKILL.md +208 -394
  168. package/pipeline/skills/shared/external/swift-charts/evals/evals.json +27 -30
  169. package/pipeline/skills/shared/external/swift-charts/references/charts-patterns.md +351 -762
  170. package/pipeline/skills/shared/external/swift-codable/SKILL.md +339 -343
  171. package/pipeline/skills/shared/external/swift-codable/evals/evals.json +20 -20
  172. package/pipeline/skills/shared/external/swift-concurrency/SKILL.md +303 -351
  173. package/pipeline/skills/shared/external/swift-concurrency/evals/evals.json +27 -24
  174. package/pipeline/skills/shared/external/swift-concurrency/references/approachable-concurrency.md +65 -80
  175. package/pipeline/skills/shared/external/swift-concurrency/references/async-algorithms.md +48 -84
  176. package/pipeline/skills/shared/external/swift-concurrency/references/bridging-interop.md +134 -79
  177. package/pipeline/skills/shared/external/swift-concurrency/references/concurrency-patterns.md +145 -167
  178. package/pipeline/skills/shared/external/swift-concurrency/references/diagnostics.md +62 -50
  179. package/pipeline/skills/shared/external/swift-concurrency/references/swiftui-concurrency.md +92 -121
  180. package/pipeline/skills/shared/external/swift-concurrency/references/synchronization-primitives.md +177 -241
  181. package/pipeline/skills/shared/external/swift-formatstyle/SKILL.md +258 -234
  182. package/pipeline/skills/shared/external/swift-language/SKILL.md +342 -382
  183. package/pipeline/skills/shared/external/swift-language/evals/evals.json +24 -27
  184. package/pipeline/skills/shared/external/swift-language/references/swift-attributes-interop.md +79 -56
  185. package/pipeline/skills/shared/external/swift-language/references/swift-patterns-extended.md +297 -340
  186. package/pipeline/skills/shared/external/swift-security/SKILL.md +180 -161
  187. package/pipeline/skills/shared/external/swift-security/evals/evals.json +25 -25
  188. package/pipeline/skills/shared/external/swift-security/references/biometric-authentication.md +314 -469
  189. package/pipeline/skills/shared/external/swift-security/references/certificate-trust.md +408 -476
  190. package/pipeline/skills/shared/external/swift-security/references/common-anti-patterns.md +260 -530
  191. package/pipeline/skills/shared/external/swift-security/references/compliance-owasp-mapping.md +270 -477
  192. package/pipeline/skills/shared/external/swift-security/references/credential-storage-patterns.md +573 -571
  193. package/pipeline/skills/shared/external/swift-security/references/cryptokit-public-key.md +370 -441
  194. package/pipeline/skills/shared/external/swift-security/references/cryptokit-symmetric.md +332 -433
  195. package/pipeline/skills/shared/external/swift-security/references/keychain-access-control.md +346 -468
  196. package/pipeline/skills/shared/external/swift-security/references/keychain-fundamentals.md +352 -472
  197. package/pipeline/skills/shared/external/swift-security/references/keychain-item-classes.md +431 -432
  198. package/pipeline/skills/shared/external/swift-security/references/keychain-sharing.md +328 -425
  199. package/pipeline/skills/shared/external/swift-security/references/migration-legacy-stores.md +341 -579
  200. package/pipeline/skills/shared/external/swift-security/references/secure-enclave.md +396 -457
  201. package/pipeline/skills/shared/external/swift-security/references/testing-security-code.md +354 -614
  202. package/pipeline/skills/shared/external/swift-testing/SKILL.md +188 -175
  203. package/pipeline/skills/shared/external/swift-testing/evals/evals.json +26 -24
  204. package/pipeline/skills/shared/external/swift-testing/references/testing-advanced.md +80 -84
  205. package/pipeline/skills/shared/external/swift-testing/references/testing-patterns.md +317 -433
  206. package/pipeline/skills/shared/external/swiftdata/SKILL.md +392 -256
  207. package/pipeline/skills/shared/external/swiftdata/evals/evals.json +24 -24
  208. package/pipeline/skills/shared/external/swiftdata/references/core-data-coexistence.md +206 -402
  209. package/pipeline/skills/shared/external/swiftdata/references/indexing.md +59 -52
  210. package/pipeline/skills/shared/external/swiftdata/references/predicate-pitfalls.md +57 -33
  211. package/pipeline/skills/shared/external/swiftdata/references/swiftdata-advanced.md +354 -747
  212. package/pipeline/skills/shared/external/swiftdata/references/swiftdata-queries.md +300 -508
  213. package/pipeline/skills/shared/external/swiftlint/SKILL.md +175 -226
  214. package/pipeline/skills/shared/external/swiftlint/references/adoption-and-configuration.md +141 -208
  215. package/pipeline/skills/shared/external/swiftlint/references/custom-rules-and-analyze.md +100 -109
  216. package/pipeline/skills/shared/external/swiftlint/references/plugins-run-scripts-and-integrations.md +159 -179
  217. package/pipeline/skills/shared/external/swiftlint/references/rule-reference.md +383 -18
  218. package/pipeline/skills/shared/external/swiftlint/references/rules-suppressions-and-baselines.md +143 -229
  219. package/pipeline/skills/shared/external/swiftui-animation/SKILL.md +283 -366
  220. package/pipeline/skills/shared/external/swiftui-animation/references/animation-advanced.md +396 -608
  221. package/pipeline/skills/shared/external/swiftui-animation/references/core-animation-bridge.md +336 -385
  222. package/pipeline/skills/shared/external/swiftui-gestures/SKILL.md +239 -349
  223. package/pipeline/skills/shared/external/swiftui-gestures/references/gesture-patterns.md +228 -310
  224. package/pipeline/skills/shared/external/swiftui-layout-components/SKILL.md +260 -249
  225. package/pipeline/skills/shared/external/swiftui-layout-components/references/form.md +92 -74
  226. package/pipeline/skills/shared/external/swiftui-layout-components/references/grids.md +112 -177
  227. package/pipeline/skills/shared/external/swiftui-layout-components/references/list.md +61 -64
  228. package/pipeline/skills/shared/external/swiftui-layout-components/references/scrollview.md +94 -134
  229. package/pipeline/skills/shared/external/swiftui-liquid-glass/SKILL.md +193 -225
  230. package/pipeline/skills/shared/external/swiftui-liquid-glass/references/liquid-glass.md +173 -327
  231. package/pipeline/skills/shared/external/swiftui-navigation/SKILL.md +193 -168
  232. package/pipeline/skills/shared/external/swiftui-navigation/references/deeplinks.md +127 -150
  233. package/pipeline/skills/shared/external/swiftui-navigation/references/navigationstack.md +132 -133
  234. package/pipeline/skills/shared/external/swiftui-navigation/references/sheets.md +152 -117
  235. package/pipeline/skills/shared/external/swiftui-navigation/references/tabview.md +106 -140
  236. package/pipeline/skills/shared/external/swiftui-patterns/SKILL.md +316 -252
  237. package/pipeline/skills/shared/external/swiftui-patterns/references/architecture-patterns.md +341 -332
  238. package/pipeline/skills/shared/external/swiftui-patterns/references/deprecated-migration.md +547 -854
  239. package/pipeline/skills/shared/external/swiftui-patterns/references/design-polish.md +485 -537
  240. package/pipeline/skills/shared/external/swiftui-patterns/references/platform-and-sharing.md +417 -499
  241. package/pipeline/skills/shared/external/swiftui-performance/SKILL.md +213 -376
  242. package/pipeline/skills/shared/external/swiftui-performance/references/demystify-swiftui-performance-wwdc23.md +86 -175
  243. package/pipeline/skills/shared/external/swiftui-performance/references/optimizing-swiftui-performance-instruments.md +89 -195
  244. package/pipeline/skills/shared/external/swiftui-performance/references/understanding-hangs-in-your-app.md +95 -182
  245. package/pipeline/skills/shared/external/swiftui-performance/references/understanding-improving-swiftui-performance.md +71 -149
  246. package/pipeline/skills/shared/external/swiftui-performance/references/wwdc-session-sources.md +21 -27
  247. package/pipeline/skills/shared/external/swiftui-uikit-interop/SKILL.md +303 -295
  248. package/pipeline/skills/shared/external/swiftui-uikit-interop/references/hosting-migration.md +204 -387
  249. package/pipeline/skills/shared/external/swiftui-uikit-interop/references/representable-recipes.md +469 -683
  250. package/pipeline/skills/shared/external/swiftui-webkit/SKILL.md +140 -186
  251. package/pipeline/skills/shared/external/swiftui-webkit/references/loading-and-observation.md +75 -86
  252. package/pipeline/skills/shared/external/swiftui-webkit/references/local-content-and-custom-schemes.md +63 -60
  253. package/pipeline/skills/shared/external/swiftui-webkit/references/migration-and-fallbacks.md +69 -137
  254. package/pipeline/skills/shared/external/swiftui-webkit/references/navigation-and-javascript.md +95 -67
  255. package/pipeline/skills/shared/external/tipkit/SKILL.md +220 -335
  256. package/pipeline/skills/shared/external/tipkit/references/tipkit-patterns.md +356 -494
  257. package/pipeline/skills/shared/external/vision-framework/SKILL.md +260 -375
  258. package/pipeline/skills/shared/external/vision-framework/references/vision-requests.md +393 -515
  259. package/pipeline/skills/shared/external/vision-framework/references/visionkit-scanner.md +363 -539
  260. package/pipeline/skills/shared/external/weatherkit/SKILL.md +152 -310
  261. package/pipeline/skills/shared/external/weatherkit/references/weatherkit-patterns.md +288 -407
  262. package/pipeline/skills/shared/external/widgetkit/SKILL.md +216 -288
  263. package/pipeline/skills/shared/external/widgetkit/references/widgetkit-advanced.md +414 -719
  264. package/pipeline/skills/shared/external/NOTICE-swift-ios-skills.md +0 -39
@@ -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.