@mmerterden/multi-agent-pipeline 20.6.0 → 20.8.0

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