buildanything 1.7.1 → 2.0.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 (633) hide show
  1. package/.claude-plugin/marketplace.json +3 -3
  2. package/.claude-plugin/plugin.json +9 -3
  3. package/CHANGELOG.md +112 -0
  4. package/README.md +2 -2
  5. package/agents/a11y-architect.md +166 -0
  6. package/agents/business-model.md +80 -29
  7. package/agents/code-architect.md +75 -0
  8. package/agents/code-reviewer.md +255 -0
  9. package/agents/code-simplifier.md +64 -0
  10. package/agents/design-brand-guardian.md +293 -53
  11. package/agents/design-critic.md +139 -0
  12. package/agents/design-inclusive-visuals-specialist.md +6 -19
  13. package/agents/design-ui-designer.md +335 -56
  14. package/agents/design-ux-architect.md +403 -55
  15. package/agents/design-ux-researcher.md +264 -49
  16. package/agents/engineering-ai-engineer.md +26 -36
  17. package/agents/engineering-backend-architect.md +185 -36
  18. package/agents/engineering-data-engineer.md +225 -43
  19. package/agents/engineering-devops-automator.md +227 -74
  20. package/agents/engineering-frontend-developer.md +210 -34
  21. package/agents/engineering-mobile-app-builder.md +6 -1
  22. package/agents/engineering-rapid-prototyper.md +30 -9
  23. package/agents/engineering-security-engineer.md +263 -61
  24. package/agents/engineering-senior-developer.md +128 -19
  25. package/agents/engineering-sre.md +84 -0
  26. package/agents/engineering-technical-writer.md +285 -41
  27. package/agents/feature-intel.md +110 -0
  28. package/agents/ios-app-review-guardian.md +66 -0
  29. package/agents/ios-foundation-models-specialist.md +64 -0
  30. package/agents/ios-storekit-specialist.md +59 -0
  31. package/agents/ios-swift-architect.md +129 -0
  32. package/agents/ios-swift-search.md +137 -0
  33. package/agents/ios-swift-ui-design.md +136 -0
  34. package/agents/marketing-app-store-optimizer.md +246 -64
  35. package/agents/planner.md +216 -0
  36. package/agents/pr-test-analyzer.md +63 -0
  37. package/agents/product-feedback-synthesizer.md +8 -2
  38. package/agents/refactor-cleaner.md +102 -0
  39. package/agents/security-reviewer.md +128 -0
  40. package/agents/silent-failure-hunter.md +54 -0
  41. package/agents/swift-build-resolver.md +119 -0
  42. package/agents/swift-reviewer.md +112 -0
  43. package/agents/tech-feasibility.md +21 -1
  44. package/agents/testing-api-tester.md +236 -59
  45. package/agents/testing-evidence-collector.md +26 -1
  46. package/agents/testing-performance-benchmarker.md +21 -1
  47. package/agents/testing-reality-checker.md +6 -1
  48. package/agents/visual-research.md +116 -0
  49. package/bin/adapters/cycle-counter-tool.ts +155 -0
  50. package/bin/adapters/scribe-tool.ts +71 -0
  51. package/bin/adapters/state-save-tool.ts +130 -0
  52. package/bin/adapters/write-lease-tool.ts +127 -0
  53. package/bin/buildanything-runtime.js +15 -0
  54. package/bin/buildanything-runtime.ts +328 -0
  55. package/bin/setup.js +83 -8
  56. package/commands/add-feature.md +2 -0
  57. package/commands/build.md +752 -332
  58. package/commands/fix.md +65 -0
  59. package/commands/self-check.md +121 -0
  60. package/commands/setup.md +114 -0
  61. package/commands/ux-review.md +63 -0
  62. package/commands/verify.md +69 -0
  63. package/docs/migration/agents.yaml +729 -0
  64. package/docs/migration/phase-graph.yaml +1088 -0
  65. package/docs/migration/sdk-host-compat.md +18 -0
  66. package/hooks/compile-writer-owner-cache.ts +171 -0
  67. package/hooks/hooks.json +36 -0
  68. package/hooks/pre-tool-use +19 -0
  69. package/hooks/pre-tool-use.ts +776 -0
  70. package/hooks/record-mode-transitions.ts +178 -0
  71. package/hooks/session-start +89 -2
  72. package/hooks/subagent-start +17 -0
  73. package/hooks/subagent-start.ts +471 -0
  74. package/hooks/subagent-stop +17 -0
  75. package/hooks/subagent-stop.ts +153 -0
  76. package/package.json +28 -5
  77. package/protocols/architecture-schema.md +171 -0
  78. package/protocols/build-fix.md +52 -0
  79. package/protocols/cleanup.md +54 -0
  80. package/protocols/decision-log.md +131 -0
  81. package/protocols/eval-harness.md +61 -0
  82. package/protocols/fake-data-detector.md +64 -0
  83. package/protocols/ios-context.md +234 -0
  84. package/protocols/ios-frameworks-map.md +323 -0
  85. package/protocols/ios-phase-branches.md +337 -0
  86. package/protocols/ios-preflight.md +27 -0
  87. package/protocols/launch-readiness.md +258 -0
  88. package/protocols/metric-loop.md +153 -0
  89. package/protocols/smoke-test.md +118 -0
  90. package/protocols/state-schema.json +388 -0
  91. package/protocols/state-schema.md +172 -0
  92. package/protocols/verify.md +127 -0
  93. package/protocols/visual-dna.md +185 -0
  94. package/protocols/web-phase-branches.md +351 -0
  95. package/skills/ios/_VENDORED.md +62 -0
  96. package/skills/ios/activitykit/LICENSE +131 -0
  97. package/skills/ios/activitykit/SKILL.md +505 -0
  98. package/skills/ios/activitykit/references/activitykit-patterns.md +868 -0
  99. package/skills/ios/app-intents/LICENSE +131 -0
  100. package/skills/ios/app-intents/SKILL.md +494 -0
  101. package/skills/ios/app-intents/references/appintents-advanced.md +1076 -0
  102. package/skills/ios/app-store-connect-metadata/SKILL.md +148 -0
  103. package/skills/ios/apple-on-device-ai/LICENSE +131 -0
  104. package/skills/ios/apple-on-device-ai/SKILL.md +505 -0
  105. package/skills/ios/apple-on-device-ai/references/coreml-conversion.md +425 -0
  106. package/skills/ios/apple-on-device-ai/references/coreml-optimization.md +344 -0
  107. package/skills/ios/apple-on-device-ai/references/foundation-models.md +508 -0
  108. package/skills/ios/apple-on-device-ai/references/mlx-swift.md +285 -0
  109. package/skills/ios/asc-privacy-manifest/SKILL.md +350 -0
  110. package/skills/ios/hig-components-content/SKILL.md +86 -0
  111. package/skills/ios/hig-components-content/references/activity-views.md +79 -0
  112. package/skills/ios/hig-components-content/references/charts.md +180 -0
  113. package/skills/ios/hig-components-content/references/collections.md +48 -0
  114. package/skills/ios/hig-components-content/references/color-wells.md +42 -0
  115. package/skills/ios/hig-components-content/references/image-views.md +82 -0
  116. package/skills/ios/hig-components-content/references/image-wells.md +34 -0
  117. package/skills/ios/hig-components-content/references/lockups.md +78 -0
  118. package/skills/ios/hig-components-content/references/web-views.md +36 -0
  119. package/skills/ios/hig-components-controls/SKILL.md +88 -0
  120. package/skills/ios/hig-components-controls/references/combo-boxes.md +40 -0
  121. package/skills/ios/hig-components-controls/references/controls.md +112 -0
  122. package/skills/ios/hig-components-controls/references/gauges.md +74 -0
  123. package/skills/ios/hig-components-controls/references/labels.md +92 -0
  124. package/skills/ios/hig-components-controls/references/pickers.md +128 -0
  125. package/skills/ios/hig-components-controls/references/rating-indicators.md +38 -0
  126. package/skills/ios/hig-components-controls/references/segmented-controls.md +94 -0
  127. package/skills/ios/hig-components-controls/references/sliders.md +92 -0
  128. package/skills/ios/hig-components-controls/references/steppers.md +40 -0
  129. package/skills/ios/hig-components-controls/references/text-fields.md +88 -0
  130. package/skills/ios/hig-components-controls/references/text-views.md +56 -0
  131. package/skills/ios/hig-components-controls/references/toggles.md +127 -0
  132. package/skills/ios/hig-components-controls/references/token-fields.md +48 -0
  133. package/skills/ios/hig-components-controls/references/virtual-keyboards.md +156 -0
  134. package/skills/ios/hig-components-dialogs/SKILL.md +76 -0
  135. package/skills/ios/hig-components-dialogs/references/action-sheets.md +74 -0
  136. package/skills/ios/hig-components-dialogs/references/alerts.md +158 -0
  137. package/skills/ios/hig-components-dialogs/references/digit-entry-views.md +32 -0
  138. package/skills/ios/hig-components-dialogs/references/popovers.md +81 -0
  139. package/skills/ios/hig-components-dialogs/references/sheets.md +157 -0
  140. package/skills/ios/hig-components-layout/SKILL.md +99 -0
  141. package/skills/ios/hig-components-layout/references/boxes.md +48 -0
  142. package/skills/ios/hig-components-layout/references/column-views.md +44 -0
  143. package/skills/ios/hig-components-layout/references/lists-and-tables.md +99 -0
  144. package/skills/ios/hig-components-layout/references/ornaments.md +56 -0
  145. package/skills/ios/hig-components-layout/references/outline-views.md +64 -0
  146. package/skills/ios/hig-components-layout/references/panels.md +75 -0
  147. package/skills/ios/hig-components-layout/references/scroll-views.md +123 -0
  148. package/skills/ios/hig-components-layout/references/sidebars.md +109 -0
  149. package/skills/ios/hig-components-layout/references/split-views.md +110 -0
  150. package/skills/ios/hig-components-layout/references/tab-bars.md +173 -0
  151. package/skills/ios/hig-components-layout/references/tab-views.md +68 -0
  152. package/skills/ios/hig-components-layout/references/windows.md +188 -0
  153. package/skills/ios/hig-components-menus/SKILL.md +81 -0
  154. package/skills/ios/hig-components-menus/references/action-button.md +61 -0
  155. package/skills/ios/hig-components-menus/references/buttons.md +261 -0
  156. package/skills/ios/hig-components-menus/references/context-menus.md +105 -0
  157. package/skills/ios/hig-components-menus/references/disclosure-controls.md +84 -0
  158. package/skills/ios/hig-components-menus/references/dock-menus.md +40 -0
  159. package/skills/ios/hig-components-menus/references/edit-menus.md +88 -0
  160. package/skills/ios/hig-components-menus/references/menus.md +171 -0
  161. package/skills/ios/hig-components-menus/references/pop-up-buttons.md +70 -0
  162. package/skills/ios/hig-components-menus/references/pull-down-buttons.md +77 -0
  163. package/skills/ios/hig-components-menus/references/the-menu-bar.md +303 -0
  164. package/skills/ios/hig-components-menus/references/toolbars.md +256 -0
  165. package/skills/ios/hig-components-search/SKILL.md +68 -0
  166. package/skills/ios/hig-components-search/references/page-controls.md +120 -0
  167. package/skills/ios/hig-components-search/references/path-controls.md +40 -0
  168. package/skills/ios/hig-components-search/references/search-fields.md +189 -0
  169. package/skills/ios/hig-components-status/SKILL.md +80 -0
  170. package/skills/ios/hig-components-status/references/activity-rings.md +105 -0
  171. package/skills/ios/hig-components-status/references/progress-indicators.md +116 -0
  172. package/skills/ios/hig-components-status/references/status-bars.md +38 -0
  173. package/skills/ios/hig-components-system/SKILL.md +88 -0
  174. package/skills/ios/hig-components-system/references/app-clips.md +387 -0
  175. package/skills/ios/hig-components-system/references/app-shortcuts.md +114 -0
  176. package/skills/ios/hig-components-system/references/complications.md +425 -0
  177. package/skills/ios/hig-components-system/references/home-screen-quick-actions.md +42 -0
  178. package/skills/ios/hig-components-system/references/live-activities.md +442 -0
  179. package/skills/ios/hig-components-system/references/notifications.md +153 -0
  180. package/skills/ios/hig-components-system/references/top-shelf.md +135 -0
  181. package/skills/ios/hig-components-system/references/watch-faces.md +40 -0
  182. package/skills/ios/hig-components-system/references/widgets.md +517 -0
  183. package/skills/ios/hig-foundations/SKILL.md +98 -0
  184. package/skills/ios/hig-foundations/references/accessibility.md +291 -0
  185. package/skills/ios/hig-foundations/references/app-icons.md +210 -0
  186. package/skills/ios/hig-foundations/references/branding.md +44 -0
  187. package/skills/ios/hig-foundations/references/color.md +274 -0
  188. package/skills/ios/hig-foundations/references/dark-mode.md +116 -0
  189. package/skills/ios/hig-foundations/references/icons.md +263 -0
  190. package/skills/ios/hig-foundations/references/images.md +176 -0
  191. package/skills/ios/hig-foundations/references/immersive-experiences.md +174 -0
  192. package/skills/ios/hig-foundations/references/inclusion.md +189 -0
  193. package/skills/ios/hig-foundations/references/layout.md +425 -0
  194. package/skills/ios/hig-foundations/references/materials.md +238 -0
  195. package/skills/ios/hig-foundations/references/motion.md +103 -0
  196. package/skills/ios/hig-foundations/references/privacy.md +231 -0
  197. package/skills/ios/hig-foundations/references/right-to-left.md +206 -0
  198. package/skills/ios/hig-foundations/references/sf-symbols.md +310 -0
  199. package/skills/ios/hig-foundations/references/spatial-layout.md +142 -0
  200. package/skills/ios/hig-foundations/references/typography.md +1146 -0
  201. package/skills/ios/hig-foundations/references/writing.md +91 -0
  202. package/skills/ios/hig-inputs/SKILL.md +94 -0
  203. package/skills/ios/hig-inputs/references/apple-pencil-and-scribble.md +148 -0
  204. package/skills/ios/hig-inputs/references/camera-control.md +107 -0
  205. package/skills/ios/hig-inputs/references/digital-crown.md +83 -0
  206. package/skills/ios/hig-inputs/references/eyes.md +120 -0
  207. package/skills/ios/hig-inputs/references/focus-and-selection.md +120 -0
  208. package/skills/ios/hig-inputs/references/game-controls.md +156 -0
  209. package/skills/ios/hig-inputs/references/gestures.md +208 -0
  210. package/skills/ios/hig-inputs/references/gyro-and-accelerometer.md +40 -0
  211. package/skills/ios/hig-inputs/references/keyboards.md +234 -0
  212. package/skills/ios/hig-inputs/references/nearby-interactions.md +70 -0
  213. package/skills/ios/hig-inputs/references/pointing-devices.md +237 -0
  214. package/skills/ios/hig-inputs/references/remotes.md +67 -0
  215. package/skills/ios/hig-inputs/references/spatial-interactions.md +70 -0
  216. package/skills/ios/hig-patterns/SKILL.md +104 -0
  217. package/skills/ios/hig-patterns/references/charting-data.md +81 -0
  218. package/skills/ios/hig-patterns/references/collaboration-and-sharing.md +86 -0
  219. package/skills/ios/hig-patterns/references/drag-and-drop.md +134 -0
  220. package/skills/ios/hig-patterns/references/entering-data.md +69 -0
  221. package/skills/ios/hig-patterns/references/feedback.md +67 -0
  222. package/skills/ios/hig-patterns/references/file-management.md +135 -0
  223. package/skills/ios/hig-patterns/references/going-full-screen.md +79 -0
  224. package/skills/ios/hig-patterns/references/launching.md +81 -0
  225. package/skills/ios/hig-patterns/references/live-viewing-apps.md +79 -0
  226. package/skills/ios/hig-patterns/references/loading.md +59 -0
  227. package/skills/ios/hig-patterns/references/managing-accounts.md +107 -0
  228. package/skills/ios/hig-patterns/references/managing-notifications.md +99 -0
  229. package/skills/ios/hig-patterns/references/modality.md +82 -0
  230. package/skills/ios/hig-patterns/references/multitasking.md +131 -0
  231. package/skills/ios/hig-patterns/references/offering-help.md +117 -0
  232. package/skills/ios/hig-patterns/references/onboarding.md +69 -0
  233. package/skills/ios/hig-patterns/references/playing-audio.md +124 -0
  234. package/skills/ios/hig-patterns/references/playing-haptics.md +280 -0
  235. package/skills/ios/hig-patterns/references/playing-video.md +180 -0
  236. package/skills/ios/hig-patterns/references/printing.md +50 -0
  237. package/skills/ios/hig-patterns/references/ratings-and-reviews.md +48 -0
  238. package/skills/ios/hig-patterns/references/searching.md +70 -0
  239. package/skills/ios/hig-patterns/references/settings.md +84 -0
  240. package/skills/ios/hig-patterns/references/undo-and-redo.md +58 -0
  241. package/skills/ios/hig-patterns/references/workouts.md +76 -0
  242. package/skills/ios/hig-platforms/SKILL.md +84 -0
  243. package/skills/ios/hig-platforms/references/designing-for-games.md +159 -0
  244. package/skills/ios/hig-platforms/references/designing-for-ios.md +66 -0
  245. package/skills/ios/hig-platforms/references/designing-for-ipados.md +64 -0
  246. package/skills/ios/hig-platforms/references/designing-for-macos.md +70 -0
  247. package/skills/ios/hig-platforms/references/designing-for-tvos.md +68 -0
  248. package/skills/ios/hig-platforms/references/designing-for-visionos.md +85 -0
  249. package/skills/ios/hig-platforms/references/designing-for-watchos.md +74 -0
  250. package/skills/ios/hig-project-context/SKILL.md +133 -0
  251. package/skills/ios/hig-technologies/SKILL.md +107 -0
  252. package/skills/ios/hig-technologies/references/airplay.md +125 -0
  253. package/skills/ios/hig-technologies/references/always-on.md +62 -0
  254. package/skills/ios/hig-technologies/references/apple-pay.md +441 -0
  255. package/skills/ios/hig-technologies/references/augmented-reality.md +247 -0
  256. package/skills/ios/hig-technologies/references/carekit.md +224 -0
  257. package/skills/ios/hig-technologies/references/carplay.md +119 -0
  258. package/skills/ios/hig-technologies/references/game-center.md +343 -0
  259. package/skills/ios/hig-technologies/references/generative-ai.md +110 -0
  260. package/skills/ios/hig-technologies/references/healthkit.md +120 -0
  261. package/skills/ios/hig-technologies/references/homekit.md +343 -0
  262. package/skills/ios/hig-technologies/references/icloud.md +52 -0
  263. package/skills/ios/hig-technologies/references/id-verifier.md +73 -0
  264. package/skills/ios/hig-technologies/references/imessage-apps-and-stickers.md +105 -0
  265. package/skills/ios/hig-technologies/references/in-app-purchase.md +263 -0
  266. package/skills/ios/hig-technologies/references/live-photos.md +54 -0
  267. package/skills/ios/hig-technologies/references/mac-catalyst.md +216 -0
  268. package/skills/ios/hig-technologies/references/machine-learning.md +394 -0
  269. package/skills/ios/hig-technologies/references/maps.md +221 -0
  270. package/skills/ios/hig-technologies/references/nfc.md +51 -0
  271. package/skills/ios/hig-technologies/references/photo-editing.md +40 -0
  272. package/skills/ios/hig-technologies/references/researchkit.md +134 -0
  273. package/skills/ios/hig-technologies/references/shareplay.md +142 -0
  274. package/skills/ios/hig-technologies/references/shazamkit.md +47 -0
  275. package/skills/ios/hig-technologies/references/sign-in-with-apple.md +288 -0
  276. package/skills/ios/hig-technologies/references/siri.md +523 -0
  277. package/skills/ios/hig-technologies/references/tap-to-pay-on-iphone.md +208 -0
  278. package/skills/ios/hig-technologies/references/voiceover.md +90 -0
  279. package/skills/ios/hig-technologies/references/wallet.md +420 -0
  280. package/skills/ios/ios-26-platform/SKILL.md +53 -0
  281. package/skills/ios/ios-26-platform/references/automatic-adoption.md +161 -0
  282. package/skills/ios/ios-26-platform/references/backward-compat.md +238 -0
  283. package/skills/ios/ios-26-platform/references/liquid-glass.md +255 -0
  284. package/skills/ios/ios-26-platform/references/swiftui-apis.md +277 -0
  285. package/skills/ios/ios-26-platform/references/toolbar-navigation.md +250 -0
  286. package/skills/ios/ios-bootstrap/SKILL.md +107 -0
  287. package/skills/ios/ios-bootstrap/references/apple-docs-mcp-config.md +28 -0
  288. package/skills/ios/ios-bootstrap/references/new-project-dialog.md +41 -0
  289. package/skills/ios/ios-bootstrap/references/xcode-mcp-config.md +29 -0
  290. package/skills/ios/ios-debugger-agent/LICENSE +21 -0
  291. package/skills/ios/ios-debugger-agent/SKILL.md +58 -0
  292. package/skills/ios/ios-debugger-agent/agents/openai.yaml +4 -0
  293. package/skills/ios/ios-entitlements-generator/SKILL.md +47 -0
  294. package/skills/ios/ios-info-plist-hardening/SKILL.md +130 -0
  295. package/skills/ios/ios-maestro-flow-author/SKILL.md +68 -0
  296. package/skills/ios/ios-maestro-flow-author/references/input-and-scroll.yaml +17 -0
  297. package/skills/ios/ios-maestro-flow-author/references/modal-and-dismiss.yaml +14 -0
  298. package/skills/ios/ios-maestro-flow-author/references/onboarding-flow.yaml +16 -0
  299. package/skills/ios/ios-maestro-flow-author/references/tab-navigation.yaml +13 -0
  300. package/skills/ios/ios-maestro-flow-author/references/tap-and-assert.yaml +9 -0
  301. package/skills/ios/swift-accessibility/LICENSE +21 -0
  302. package/skills/ios/swift-accessibility/SKILL.md +371 -0
  303. package/skills/ios/swift-accessibility/examples/before-after-appkit.md +446 -0
  304. package/skills/ios/swift-accessibility/examples/before-after-swiftui.md +441 -0
  305. package/skills/ios/swift-accessibility/examples/before-after-uikit.md +464 -0
  306. package/skills/ios/swift-accessibility/references/assistive-access.md +441 -0
  307. package/skills/ios/swift-accessibility/references/display-settings.md +491 -0
  308. package/skills/ios/swift-accessibility/references/dynamic-type.md +420 -0
  309. package/skills/ios/swift-accessibility/references/media-accessibility.md +421 -0
  310. package/skills/ios/swift-accessibility/references/motor-input.md +393 -0
  311. package/skills/ios/swift-accessibility/references/nutrition-labels.md +362 -0
  312. package/skills/ios/swift-accessibility/references/platform-specifics.md +515 -0
  313. package/skills/ios/swift-accessibility/references/semantic-structure.md +585 -0
  314. package/skills/ios/swift-accessibility/references/testing-auditing.md +507 -0
  315. package/skills/ios/swift-accessibility/references/voice-control.md +317 -0
  316. package/skills/ios/swift-accessibility/references/voiceover-swiftui.md +584 -0
  317. package/skills/ios/swift-accessibility/references/voiceover-uikit.md +519 -0
  318. package/skills/ios/swift-accessibility/references/wcag-mapping.md +167 -0
  319. package/skills/ios/swift-accessibility/resources/audit-template.swift +128 -0
  320. package/skills/ios/swift-accessibility/resources/qa-checklist.md +258 -0
  321. package/skills/ios/swift-actor-persistence/SKILL.md +143 -0
  322. package/skills/ios/swift-concurrency/LICENSE +21 -0
  323. package/skills/ios/swift-concurrency/SKILL.md +171 -0
  324. package/skills/ios/swift-concurrency/references/_index.md +50 -0
  325. package/skills/ios/swift-concurrency/references/actors.md +660 -0
  326. package/skills/ios/swift-concurrency/references/async-algorithms.md +847 -0
  327. package/skills/ios/swift-concurrency/references/async-await-basics.md +266 -0
  328. package/skills/ios/swift-concurrency/references/async-sequences.md +710 -0
  329. package/skills/ios/swift-concurrency/references/core-data.md +560 -0
  330. package/skills/ios/swift-concurrency/references/glossary.md +135 -0
  331. package/skills/ios/swift-concurrency/references/linting.md +155 -0
  332. package/skills/ios/swift-concurrency/references/memory-management.md +569 -0
  333. package/skills/ios/swift-concurrency/references/migration.md +1104 -0
  334. package/skills/ios/swift-concurrency/references/performance.md +593 -0
  335. package/skills/ios/swift-concurrency/references/sendable.md +598 -0
  336. package/skills/ios/swift-concurrency/references/tasks.md +636 -0
  337. package/skills/ios/swift-concurrency/references/testing.md +592 -0
  338. package/skills/ios/swift-concurrency/references/threading.md +495 -0
  339. package/skills/ios/swift-concurrency-6-2/SKILL.md +216 -0
  340. package/skills/ios/swift-protocol-di-testing/SKILL.md +190 -0
  341. package/skills/ios/swift-security-expert/LICENSE +21 -0
  342. package/skills/ios/swift-security-expert/SKILL.md +470 -0
  343. package/skills/ios/swift-security-expert/references/biometric-authentication.md +565 -0
  344. package/skills/ios/swift-security-expert/references/certificate-trust.md +592 -0
  345. package/skills/ios/swift-security-expert/references/common-anti-patterns.md +690 -0
  346. package/skills/ios/swift-security-expert/references/compliance-owasp-mapping.md +537 -0
  347. package/skills/ios/swift-security-expert/references/credential-storage-patterns.md +721 -0
  348. package/skills/ios/swift-security-expert/references/cryptokit-public-key.md +505 -0
  349. package/skills/ios/swift-security-expert/references/cryptokit-symmetric.md +497 -0
  350. package/skills/ios/swift-security-expert/references/keychain-access-control.md +508 -0
  351. package/skills/ios/swift-security-expert/references/keychain-fundamentals.md +596 -0
  352. package/skills/ios/swift-security-expert/references/keychain-item-classes.md +476 -0
  353. package/skills/ios/swift-security-expert/references/keychain-sharing.md +458 -0
  354. package/skills/ios/swift-security-expert/references/migration-legacy-stores.md +727 -0
  355. package/skills/ios/swift-security-expert/references/secure-enclave.md +539 -0
  356. package/skills/ios/swift-security-expert/references/testing-security-code.md +781 -0
  357. package/skills/ios/swift-testing-expert/LICENSE +21 -0
  358. package/skills/ios/swift-testing-expert/SKILL.md +79 -0
  359. package/skills/ios/swift-testing-expert/references/_index.md +12 -0
  360. package/skills/ios/swift-testing-expert/references/async-testing-and-waiting.md +127 -0
  361. package/skills/ios/swift-testing-expert/references/expectations.md +145 -0
  362. package/skills/ios/swift-testing-expert/references/fundamentals.md +141 -0
  363. package/skills/ios/swift-testing-expert/references/migration-from-xctest.md +127 -0
  364. package/skills/ios/swift-testing-expert/references/parallelization-and-isolation.md +95 -0
  365. package/skills/ios/swift-testing-expert/references/parameterized-testing.md +284 -0
  366. package/skills/ios/swift-testing-expert/references/performance-and-best-practices.md +187 -0
  367. package/skills/ios/swift-testing-expert/references/traits-and-tags.md +114 -0
  368. package/skills/ios/swift-testing-expert/references/xcode-workflows.md +70 -0
  369. package/skills/ios/swiftdata-pro/LICENSE +21 -0
  370. package/skills/ios/swiftdata-pro/SKILL.md +102 -0
  371. package/skills/ios/swiftdata-pro/agents/openai.yaml +10 -0
  372. package/skills/ios/swiftdata-pro/assets/swiftdata-pro-icon.png +0 -0
  373. package/skills/ios/swiftdata-pro/assets/swiftdata-pro-icon.svg +29 -0
  374. package/skills/ios/swiftdata-pro/references/class-inheritance.md +104 -0
  375. package/skills/ios/swiftdata-pro/references/cloudkit.md +10 -0
  376. package/skills/ios/swiftdata-pro/references/core-rules.md +20 -0
  377. package/skills/ios/swiftdata-pro/references/indexing.md +27 -0
  378. package/skills/ios/swiftdata-pro/references/predicates.md +73 -0
  379. package/skills/ios/swiftui-design-principles/AGENTS.md +21 -0
  380. package/skills/ios/swiftui-design-principles/LICENSE +21 -0
  381. package/skills/ios/swiftui-design-principles/README.md +41 -0
  382. package/skills/ios/swiftui-design-principles/SKILL.md +605 -0
  383. package/skills/ios/swiftui-design-principles/metadata.json +10 -0
  384. package/skills/ios/swiftui-design-tokens/SKILL.md +475 -0
  385. package/skills/ios/swiftui-liquid-glass/LICENSE +21 -0
  386. package/skills/ios/swiftui-liquid-glass/SKILL.md +95 -0
  387. package/skills/ios/swiftui-liquid-glass/agents/openai.yaml +4 -0
  388. package/skills/ios/swiftui-liquid-glass/references/liquid-glass.md +280 -0
  389. package/skills/ios/swiftui-performance-audit/LICENSE +21 -0
  390. package/skills/ios/swiftui-performance-audit/SKILL.md +111 -0
  391. package/skills/ios/swiftui-performance-audit/agents/openai.yaml +4 -0
  392. package/skills/ios/swiftui-performance-audit/references/code-smells.md +150 -0
  393. package/skills/ios/swiftui-performance-audit/references/demystify-swiftui-performance-wwdc23.md +46 -0
  394. package/skills/ios/swiftui-performance-audit/references/optimizing-swiftui-performance-instruments.md +29 -0
  395. package/skills/ios/swiftui-performance-audit/references/profiling-intake.md +44 -0
  396. package/skills/ios/swiftui-performance-audit/references/report-template.md +47 -0
  397. package/skills/ios/swiftui-performance-audit/references/understanding-hangs-in-your-app.md +33 -0
  398. package/skills/ios/swiftui-performance-audit/references/understanding-improving-swiftui-performance.md +52 -0
  399. package/skills/ios/swiftui-pro/LICENSE +21 -0
  400. package/skills/ios/swiftui-pro/SKILL.md +108 -0
  401. package/skills/ios/swiftui-pro/agents/openai.yaml +10 -0
  402. package/skills/ios/swiftui-pro/assets/swiftui-pro-icon.png +0 -0
  403. package/skills/ios/swiftui-pro/assets/swiftui-pro-icon.svg +29 -0
  404. package/skills/ios/swiftui-pro/references/accessibility.md +13 -0
  405. package/skills/ios/swiftui-pro/references/api.md +39 -0
  406. package/skills/ios/swiftui-pro/references/data.md +43 -0
  407. package/skills/ios/swiftui-pro/references/design.md +31 -0
  408. package/skills/ios/swiftui-pro/references/hygiene.md +9 -0
  409. package/skills/ios/swiftui-pro/references/navigation.md +14 -0
  410. package/skills/ios/swiftui-pro/references/performance.md +46 -0
  411. package/skills/ios/swiftui-pro/references/swift.md +56 -0
  412. package/skills/ios/swiftui-pro/references/views.md +35 -0
  413. package/skills/ios/swiftui-ui-patterns/LICENSE +21 -0
  414. package/skills/ios/swiftui-ui-patterns/SKILL.md +100 -0
  415. package/skills/ios/swiftui-ui-patterns/agents/openai.yaml +4 -0
  416. package/skills/ios/swiftui-ui-patterns/references/app-wiring.md +201 -0
  417. package/skills/ios/swiftui-ui-patterns/references/async-state.md +96 -0
  418. package/skills/ios/swiftui-ui-patterns/references/components-index.md +50 -0
  419. package/skills/ios/swiftui-ui-patterns/references/controls.md +57 -0
  420. package/skills/ios/swiftui-ui-patterns/references/deeplinks.md +66 -0
  421. package/skills/ios/swiftui-ui-patterns/references/focus.md +90 -0
  422. package/skills/ios/swiftui-ui-patterns/references/form.md +97 -0
  423. package/skills/ios/swiftui-ui-patterns/references/grids.md +71 -0
  424. package/skills/ios/swiftui-ui-patterns/references/haptics.md +71 -0
  425. package/skills/ios/swiftui-ui-patterns/references/input-toolbar.md +51 -0
  426. package/skills/ios/swiftui-ui-patterns/references/lightweight-clients.md +93 -0
  427. package/skills/ios/swiftui-ui-patterns/references/list.md +86 -0
  428. package/skills/ios/swiftui-ui-patterns/references/loading-placeholders.md +38 -0
  429. package/skills/ios/swiftui-ui-patterns/references/macos-settings.md +71 -0
  430. package/skills/ios/swiftui-ui-patterns/references/matched-transitions.md +59 -0
  431. package/skills/ios/swiftui-ui-patterns/references/media.md +73 -0
  432. package/skills/ios/swiftui-ui-patterns/references/menu-bar.md +101 -0
  433. package/skills/ios/swiftui-ui-patterns/references/navigationstack.md +159 -0
  434. package/skills/ios/swiftui-ui-patterns/references/overlay.md +45 -0
  435. package/skills/ios/swiftui-ui-patterns/references/performance.md +62 -0
  436. package/skills/ios/swiftui-ui-patterns/references/previews.md +48 -0
  437. package/skills/ios/swiftui-ui-patterns/references/scroll-reveal.md +133 -0
  438. package/skills/ios/swiftui-ui-patterns/references/scrollview.md +87 -0
  439. package/skills/ios/swiftui-ui-patterns/references/searchable.md +71 -0
  440. package/skills/ios/swiftui-ui-patterns/references/sheets.md +155 -0
  441. package/skills/ios/swiftui-ui-patterns/references/split-views.md +72 -0
  442. package/skills/ios/swiftui-ui-patterns/references/tabview.md +114 -0
  443. package/skills/ios/swiftui-ui-patterns/references/theming.md +71 -0
  444. package/skills/ios/swiftui-ui-patterns/references/title-menus.md +93 -0
  445. package/skills/ios/swiftui-ui-patterns/references/top-bar.md +49 -0
  446. package/skills/ios/swiftui-view-refactor/LICENSE +21 -0
  447. package/skills/ios/swiftui-view-refactor/SKILL.md +207 -0
  448. package/skills/ios/swiftui-view-refactor/agents/openai.yaml +4 -0
  449. package/skills/ios/swiftui-view-refactor/references/mv-patterns.md +161 -0
  450. package/skills/ios/widgetkit/LICENSE +131 -0
  451. package/skills/ios/widgetkit/SKILL.md +502 -0
  452. package/skills/ios/widgetkit/references/widgetkit-advanced.md +871 -0
  453. package/skills/ios/writing-for-interfaces/SKILL.md +75 -0
  454. package/skills/web/accessibility/SKILL.md +146 -0
  455. package/skills/web/aceternity-ui/SKILL.md +719 -0
  456. package/skills/web/aceternity-ui/metadata.json +10 -0
  457. package/skills/web/api-design/SKILL.md +523 -0
  458. package/skills/web/chart-accessibility/SKILL.md +332 -0
  459. package/skills/web/composition-patterns/AGENTS.md +946 -0
  460. package/skills/web/composition-patterns/README.md +60 -0
  461. package/skills/web/composition-patterns/SKILL.md +89 -0
  462. package/skills/web/composition-patterns/metadata.json +11 -0
  463. package/skills/web/composition-patterns/rules/_sections.md +29 -0
  464. package/skills/web/composition-patterns/rules/_template.md +24 -0
  465. package/skills/web/composition-patterns/rules/architecture-avoid-boolean-props.md +100 -0
  466. package/skills/web/composition-patterns/rules/architecture-compound-components.md +112 -0
  467. package/skills/web/composition-patterns/rules/patterns-children-over-render-props.md +87 -0
  468. package/skills/web/composition-patterns/rules/patterns-explicit-variants.md +100 -0
  469. package/skills/web/composition-patterns/rules/react19-no-forwardref.md +42 -0
  470. package/skills/web/composition-patterns/rules/state-context-interface.md +191 -0
  471. package/skills/web/composition-patterns/rules/state-decouple-implementation.md +113 -0
  472. package/skills/web/composition-patterns/rules/state-lift-state.md +125 -0
  473. package/skills/web/cost-aware-llm-pipeline/SKILL.md +183 -0
  474. package/skills/web/database-migrations/SKILL.md +429 -0
  475. package/skills/web/deployment-patterns/SKILL.md +427 -0
  476. package/skills/web/docker-patterns/SKILL.md +364 -0
  477. package/skills/web/e2e-testing/SKILL.md +326 -0
  478. package/skills/web/lighthouse-ci/SKILL.md +361 -0
  479. package/skills/web/mcp-server-patterns/SKILL.md +69 -0
  480. package/skills/web/next-best-practices/SKILL.md +153 -0
  481. package/skills/web/next-best-practices/async-patterns.md +87 -0
  482. package/skills/web/next-best-practices/bundling.md +180 -0
  483. package/skills/web/next-best-practices/data-patterns.md +297 -0
  484. package/skills/web/next-best-practices/debug-tricks.md +105 -0
  485. package/skills/web/next-best-practices/directives.md +73 -0
  486. package/skills/web/next-best-practices/error-handling.md +227 -0
  487. package/skills/web/next-best-practices/file-conventions.md +140 -0
  488. package/skills/web/next-best-practices/font.md +245 -0
  489. package/skills/web/next-best-practices/functions.md +108 -0
  490. package/skills/web/next-best-practices/hydration-error.md +91 -0
  491. package/skills/web/next-best-practices/image.md +173 -0
  492. package/skills/web/next-best-practices/metadata.md +301 -0
  493. package/skills/web/next-best-practices/parallel-routes.md +287 -0
  494. package/skills/web/next-best-practices/route-handlers.md +146 -0
  495. package/skills/web/next-best-practices/rsc-boundaries.md +159 -0
  496. package/skills/web/next-best-practices/runtime-selection.md +39 -0
  497. package/skills/web/next-best-practices/scripts.md +141 -0
  498. package/skills/web/next-best-practices/self-hosting.md +371 -0
  499. package/skills/web/next-best-practices/suspense-boundaries.md +67 -0
  500. package/skills/web/next-cache-components/SKILL.md +411 -0
  501. package/skills/web/postgres-best-practices/SKILL.md +14 -0
  502. package/skills/web/postgres-best-practices/references/schema-design.md +9 -0
  503. package/skills/web/react-best-practices/AGENTS.md +3810 -0
  504. package/skills/web/react-best-practices/README.md +123 -0
  505. package/skills/web/react-best-practices/SKILL.md +149 -0
  506. package/skills/web/react-best-practices/metadata.json +15 -0
  507. package/skills/web/react-best-practices/rules/_sections.md +46 -0
  508. package/skills/web/react-best-practices/rules/_template.md +28 -0
  509. package/skills/web/react-best-practices/rules/advanced-effect-event-deps.md +56 -0
  510. package/skills/web/react-best-practices/rules/advanced-event-handler-refs.md +55 -0
  511. package/skills/web/react-best-practices/rules/advanced-init-once.md +42 -0
  512. package/skills/web/react-best-practices/rules/advanced-use-latest.md +39 -0
  513. package/skills/web/react-best-practices/rules/async-api-routes.md +38 -0
  514. package/skills/web/react-best-practices/rules/async-cheap-condition-before-await.md +37 -0
  515. package/skills/web/react-best-practices/rules/async-defer-await.md +82 -0
  516. package/skills/web/react-best-practices/rules/async-dependencies.md +51 -0
  517. package/skills/web/react-best-practices/rules/async-parallel.md +28 -0
  518. package/skills/web/react-best-practices/rules/async-suspense-boundaries.md +99 -0
  519. package/skills/web/react-best-practices/rules/bundle-analyzable-paths.md +63 -0
  520. package/skills/web/react-best-practices/rules/bundle-barrel-imports.md +60 -0
  521. package/skills/web/react-best-practices/rules/bundle-conditional.md +31 -0
  522. package/skills/web/react-best-practices/rules/bundle-defer-third-party.md +49 -0
  523. package/skills/web/react-best-practices/rules/bundle-dynamic-imports.md +35 -0
  524. package/skills/web/react-best-practices/rules/bundle-preload.md +50 -0
  525. package/skills/web/react-best-practices/rules/client-event-listeners.md +74 -0
  526. package/skills/web/react-best-practices/rules/client-localstorage-schema.md +71 -0
  527. package/skills/web/react-best-practices/rules/client-passive-event-listeners.md +48 -0
  528. package/skills/web/react-best-practices/rules/client-swr-dedup.md +56 -0
  529. package/skills/web/react-best-practices/rules/js-batch-dom-css.md +107 -0
  530. package/skills/web/react-best-practices/rules/js-cache-function-results.md +80 -0
  531. package/skills/web/react-best-practices/rules/js-cache-property-access.md +28 -0
  532. package/skills/web/react-best-practices/rules/js-cache-storage.md +70 -0
  533. package/skills/web/react-best-practices/rules/js-combine-iterations.md +32 -0
  534. package/skills/web/react-best-practices/rules/js-early-exit.md +50 -0
  535. package/skills/web/react-best-practices/rules/js-flatmap-filter.md +60 -0
  536. package/skills/web/react-best-practices/rules/js-hoist-regexp.md +45 -0
  537. package/skills/web/react-best-practices/rules/js-index-maps.md +37 -0
  538. package/skills/web/react-best-practices/rules/js-length-check-first.md +49 -0
  539. package/skills/web/react-best-practices/rules/js-min-max-loop.md +82 -0
  540. package/skills/web/react-best-practices/rules/js-request-idle-callback.md +105 -0
  541. package/skills/web/react-best-practices/rules/js-set-map-lookups.md +24 -0
  542. package/skills/web/react-best-practices/rules/js-tosorted-immutable.md +57 -0
  543. package/skills/web/react-best-practices/rules/rendering-activity.md +26 -0
  544. package/skills/web/react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
  545. package/skills/web/react-best-practices/rules/rendering-conditional-render.md +40 -0
  546. package/skills/web/react-best-practices/rules/rendering-content-visibility.md +38 -0
  547. package/skills/web/react-best-practices/rules/rendering-hoist-jsx.md +46 -0
  548. package/skills/web/react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
  549. package/skills/web/react-best-practices/rules/rendering-hydration-suppress-warning.md +30 -0
  550. package/skills/web/react-best-practices/rules/rendering-resource-hints.md +85 -0
  551. package/skills/web/react-best-practices/rules/rendering-script-defer-async.md +68 -0
  552. package/skills/web/react-best-practices/rules/rendering-svg-precision.md +28 -0
  553. package/skills/web/react-best-practices/rules/rendering-usetransition-loading.md +75 -0
  554. package/skills/web/react-best-practices/rules/rerender-defer-reads.md +39 -0
  555. package/skills/web/react-best-practices/rules/rerender-dependencies.md +45 -0
  556. package/skills/web/react-best-practices/rules/rerender-derived-state-no-effect.md +40 -0
  557. package/skills/web/react-best-practices/rules/rerender-derived-state.md +29 -0
  558. package/skills/web/react-best-practices/rules/rerender-functional-setstate.md +74 -0
  559. package/skills/web/react-best-practices/rules/rerender-lazy-state-init.md +58 -0
  560. package/skills/web/react-best-practices/rules/rerender-memo-with-default-value.md +38 -0
  561. package/skills/web/react-best-practices/rules/rerender-memo.md +44 -0
  562. package/skills/web/react-best-practices/rules/rerender-move-effect-to-event.md +45 -0
  563. package/skills/web/react-best-practices/rules/rerender-no-inline-components.md +82 -0
  564. package/skills/web/react-best-practices/rules/rerender-simple-expression-in-memo.md +35 -0
  565. package/skills/web/react-best-practices/rules/rerender-split-combined-hooks.md +64 -0
  566. package/skills/web/react-best-practices/rules/rerender-transitions.md +40 -0
  567. package/skills/web/react-best-practices/rules/rerender-use-deferred-value.md +59 -0
  568. package/skills/web/react-best-practices/rules/rerender-use-ref-transient-values.md +73 -0
  569. package/skills/web/react-best-practices/rules/server-after-nonblocking.md +73 -0
  570. package/skills/web/react-best-practices/rules/server-auth-actions.md +96 -0
  571. package/skills/web/react-best-practices/rules/server-cache-lru.md +41 -0
  572. package/skills/web/react-best-practices/rules/server-cache-react.md +76 -0
  573. package/skills/web/react-best-practices/rules/server-dedup-props.md +65 -0
  574. package/skills/web/react-best-practices/rules/server-hoist-static-io.md +149 -0
  575. package/skills/web/react-best-practices/rules/server-no-shared-module-state.md +50 -0
  576. package/skills/web/react-best-practices/rules/server-parallel-fetching.md +83 -0
  577. package/skills/web/react-best-practices/rules/server-parallel-nested-fetching.md +34 -0
  578. package/skills/web/react-best-practices/rules/server-serialization.md +38 -0
  579. package/skills/web/seo/SKILL.md +154 -0
  580. package/skills/web/web-design-guidelines/SKILL.md +39 -0
  581. package/skills/web/zap-scan-config/SKILL.md +444 -0
  582. package/skills/web/zap-scan-config/assets/.gitkeep +9 -0
  583. package/skills/web/zap-scan-config/assets/github_action.yml +207 -0
  584. package/skills/web/zap-scan-config/assets/gitlab_ci.yml +226 -0
  585. package/skills/web/zap-scan-config/assets/zap_automation.yaml +196 -0
  586. package/skills/web/zap-scan-config/assets/zap_context.xml +192 -0
  587. package/skills/web/zap-scan-config/references/EXAMPLE.md +40 -0
  588. package/skills/web/zap-scan-config/references/api_testing_guide.md +475 -0
  589. package/skills/web/zap-scan-config/references/authentication_guide.md +431 -0
  590. package/skills/web/zap-scan-config/references/false_positive_handling.md +427 -0
  591. package/skills/web/zap-scan-config/references/owasp_mapping.md +255 -0
  592. package/src/lrr/aggregator.ts +80 -0
  593. package/src/orchestrator/hooks/context-header.ts +95 -0
  594. package/src/orchestrator/hooks/token-accounting-emitter.ts +77 -0
  595. package/src/orchestrator/hooks/token-accounting.ts +101 -0
  596. package/src/orchestrator/mcp/cycle-counter.ts +129 -0
  597. package/src/orchestrator/mcp/scribe.ts +283 -0
  598. package/src/orchestrator/mcp/state-save.ts +149 -0
  599. package/src/orchestrator/mcp/write-lease.ts +167 -0
  600. package/src/orchestrator/phase4-shared-context.ts +41 -0
  601. package/src/orchestrator/schemas/backward-edge.ts +46 -0
  602. package/agents/agentic-identity-trust.md +0 -121
  603. package/agents/data-consolidation-agent.md +0 -39
  604. package/agents/design-image-prompt-engineer.md +0 -105
  605. package/agents/design-visual-storyteller.md +0 -147
  606. package/agents/design-whimsy-injector.md +0 -89
  607. package/agents/engineering-autonomous-optimization-architect.md +0 -105
  608. package/agents/market-intel.md +0 -35
  609. package/agents/marketing-instagram-curator.md +0 -111
  610. package/agents/marketing-reddit-community-builder.md +0 -121
  611. package/agents/marketing-social-media-strategist.md +0 -74
  612. package/agents/marketing-tiktok-strategist.md +0 -123
  613. package/agents/marketing-twitter-engager.md +0 -124
  614. package/agents/marketing-wechat-official-account.md +0 -143
  615. package/agents/marketing-xiaohongshu-specialist.md +0 -136
  616. package/agents/marketing-zhihu-strategist.md +0 -160
  617. package/agents/product-behavioral-nudge-engine.md +0 -78
  618. package/agents/project-management-experiment-tracker.md +0 -102
  619. package/agents/report-distribution-agent.md +0 -43
  620. package/agents/risk-analysis.md +0 -45
  621. package/agents/sales-data-extraction-agent.md +0 -46
  622. package/agents/specialized-cultural-intelligence-strategist.md +0 -65
  623. package/agents/specialized-developer-advocate.md +0 -146
  624. package/agents/support-analytics-reporter.md +0 -133
  625. package/agents/support-executive-summary-generator.md +0 -64
  626. package/agents/support-finance-tracker.md +0 -145
  627. package/agents/support-legal-compliance-checker.md +0 -129
  628. package/agents/support-support-responder.md +0 -91
  629. package/agents/testing-accessibility-auditor.md +0 -110
  630. package/agents/testing-test-results-analyzer.md +0 -97
  631. package/agents/testing-tool-evaluator.md +0 -76
  632. package/agents/testing-workflow-optimizer.md +0 -99
  633. package/agents/user-research.md +0 -40
@@ -0,0 +1,280 @@
1
+ # Implementing Liquid Glass Design in SwiftUI
2
+
3
+ ## Overview
4
+
5
+ Liquid Glass is a dynamic material introduced in iOS that combines the optical properties of glass with a sense of fluidity. It blurs content behind it, reflects color and light from surrounding content, and reacts to touch and pointer interactions in real time. This guide covers how to implement and customize Liquid Glass effects in SwiftUI applications. You should always seek guides on Liquid Glass when asked for help adopting new Apple design.
6
+
7
+ Key features of Liquid Glass:
8
+ - Blurs content behind the material
9
+ - Reflects color and light from surrounding content
10
+ - Reacts to touch and pointer interactions
11
+ - Can morph between shapes during transitions
12
+ - Available for standard and custom components
13
+
14
+ ## Basic Implementation
15
+
16
+ ### Adding Liquid Glass to a View
17
+
18
+ The simplest way to add Liquid Glass to a view is using the `glassEffect()` modifier:
19
+
20
+ ```swift
21
+ Text("Hello, World!")
22
+ .font(.title)
23
+ .padding()
24
+ .glassEffect()
25
+ ```
26
+
27
+ By default, this applies the regular variant of Glass within a Capsule shape behind the view's content.
28
+
29
+ ### Customizing the Shape
30
+
31
+ You can specify a different shape for the Liquid Glass effect:
32
+
33
+ ```swift
34
+ Text("Hello, World!")
35
+ .font(.title)
36
+ .padding()
37
+ .glassEffect(in: .rect(cornerRadius: 16.0))
38
+ ```
39
+
40
+ Common shape options:
41
+ - `.capsule` (default)
42
+ - `.rect(cornerRadius: CGFloat)`
43
+ - `.circle`
44
+
45
+ ## Customizing Liquid Glass Effects
46
+
47
+ ### Glass Variants and Properties
48
+
49
+ You can customize the Liquid Glass effect by configuring the `Glass` structure:
50
+
51
+ ```swift
52
+ Text("Hello, World!")
53
+ .font(.title)
54
+ .padding()
55
+ .glassEffect(.regular.tint(.orange).interactive())
56
+ ```
57
+
58
+ Key customization options:
59
+ - `.regular` - Standard glass effect
60
+ - `.tint(Color)` - Add a color tint to suggest prominence
61
+ - `.interactive(Bool)` - Make the glass react to touch and pointer interactions
62
+
63
+ ### Making Interactive Glass
64
+
65
+ To make Liquid Glass react to touch and pointer interactions:
66
+
67
+ ```swift
68
+ Text("Hello, World!")
69
+ .font(.title)
70
+ .padding()
71
+ .glassEffect(.regular.interactive(true))
72
+ ```
73
+
74
+ Or more concisely:
75
+
76
+ ```swift
77
+ Text("Hello, World!")
78
+ .font(.title)
79
+ .padding()
80
+ .glassEffect(.regular.interactive())
81
+ ```
82
+
83
+ ## Working with Multiple Glass Effects
84
+
85
+ ### Using GlassEffectContainer
86
+
87
+ When applying Liquid Glass effects to multiple views, use `GlassEffectContainer` for better rendering performance and to enable blending and morphing effects:
88
+
89
+ ```swift
90
+ GlassEffectContainer(spacing: 40.0) {
91
+ HStack(spacing: 40.0) {
92
+ Image(systemName: "scribble.variable")
93
+ .frame(width: 80.0, height: 80.0)
94
+ .font(.system(size: 36))
95
+ .glassEffect()
96
+
97
+ Image(systemName: "eraser.fill")
98
+ .frame(width: 80.0, height: 80.0)
99
+ .font(.system(size: 36))
100
+ .glassEffect()
101
+ }
102
+ }
103
+ ```
104
+
105
+ The `spacing` parameter controls how the Liquid Glass effects interact with each other:
106
+ - Smaller spacing: Views need to be closer to merge effects
107
+ - Larger spacing: Effects merge at greater distances
108
+
109
+ ### Uniting Multiple Glass Effects
110
+
111
+ To combine multiple views into a single Liquid Glass effect, use the `glassEffectUnion` modifier:
112
+
113
+ ```swift
114
+ @Namespace private var namespace
115
+
116
+ // Later in your view:
117
+ GlassEffectContainer(spacing: 20.0) {
118
+ HStack(spacing: 20.0) {
119
+ ForEach(symbolSet.indices, id: \.self) { item in
120
+ Image(systemName: symbolSet[item])
121
+ .frame(width: 80.0, height: 80.0)
122
+ .font(.system(size: 36))
123
+ .glassEffect()
124
+ .glassEffectUnion(id: item < 2 ? "1" : "2", namespace: namespace)
125
+ }
126
+ }
127
+ }
128
+ ```
129
+
130
+ This is useful when creating views dynamically or with views that live outside of an HStack or VStack.
131
+
132
+ ## Morphing Effects and Transitions
133
+
134
+ ### Creating Morphing Transitions
135
+
136
+ To create morphing effects during transitions between views with Liquid Glass:
137
+
138
+ 1. Create a namespace using the `@Namespace` property wrapper
139
+ 2. Associate each Liquid Glass effect with a unique identifier using `glassEffectID`
140
+ 3. Use animations when changing the view hierarchy
141
+
142
+ ```swift
143
+ @State private var isExpanded: Bool = false
144
+ @Namespace private var namespace
145
+
146
+ var body: some View {
147
+ GlassEffectContainer(spacing: 40.0) {
148
+ HStack(spacing: 40.0) {
149
+ Image(systemName: "scribble.variable")
150
+ .frame(width: 80.0, height: 80.0)
151
+ .font(.system(size: 36))
152
+ .glassEffect()
153
+ .glassEffectID("pencil", in: namespace)
154
+
155
+ if isExpanded {
156
+ Image(systemName: "eraser.fill")
157
+ .frame(width: 80.0, height: 80.0)
158
+ .font(.system(size: 36))
159
+ .glassEffect()
160
+ .glassEffectID("eraser", in: namespace)
161
+ }
162
+ }
163
+ }
164
+
165
+ Button("Toggle") {
166
+ withAnimation {
167
+ isExpanded.toggle()
168
+ }
169
+ }
170
+ .buttonStyle(.glass)
171
+ }
172
+ ```
173
+
174
+ The morphing effect occurs when views with Liquid Glass appear or disappear due to view hierarchy changes.
175
+
176
+ ## Button Styling with Liquid Glass
177
+
178
+ ### Glass Button Style
179
+
180
+ SwiftUI provides built-in button styles for Liquid Glass:
181
+
182
+ ```swift
183
+ Button("Click Me") {
184
+ // Action
185
+ }
186
+ .buttonStyle(.glass)
187
+ ```
188
+
189
+ ### Glass Prominent Button Style
190
+
191
+ For a more prominent glass button:
192
+
193
+ ```swift
194
+ Button("Important Action") {
195
+ // Action
196
+ }
197
+ .buttonStyle(.glassProminent)
198
+ ```
199
+
200
+ ## Advanced Techniques
201
+
202
+ ### Background Extension Effect
203
+
204
+ To stretch content behind a sidebar or inspector with the background extension effect:
205
+
206
+ ```swift
207
+ NavigationSplitView {
208
+ // Sidebar content
209
+ } detail: {
210
+ // Detail content
211
+ .background {
212
+ // Background content that extends under the sidebar
213
+ }
214
+ }
215
+ ```
216
+
217
+ ### Extending Horizontal Scrolling Under Sidebar
218
+
219
+ To extend horizontal scroll views under a sidebar or inspector:
220
+
221
+ ```swift
222
+ ScrollView(.horizontal) {
223
+ // Scrollable content
224
+ }
225
+ .scrollExtensionMode(.underSidebar)
226
+ ```
227
+
228
+ ## Best Practices
229
+
230
+ 1. **Container Usage**: Always use `GlassEffectContainer` when applying Liquid Glass to multiple views for better performance and morphing effects.
231
+
232
+ 2. **Effect Order**: Apply the `.glassEffect()` modifier after other modifiers that affect the appearance of the view.
233
+
234
+ 3. **Spacing Consideration**: Carefully choose spacing values in containers to control how and when glass effects merge.
235
+
236
+ 4. **Animation**: Use animations when changing view hierarchies to enable smooth morphing transitions.
237
+
238
+ 5. **Interactivity**: Add `.interactive()` to glass effects that should respond to user interaction.
239
+
240
+ 6. **Consistent Design**: Maintain consistent shapes and styles across your app for a cohesive look and feel.
241
+
242
+ ## Example: Custom Badge with Liquid Glass
243
+
244
+ ```swift
245
+ struct BadgeView: View {
246
+ let symbol: String
247
+ let color: Color
248
+
249
+ var body: some View {
250
+ ZStack {
251
+ Image(systemName: "hexagon.fill")
252
+ .foregroundColor(color)
253
+ .font(.system(size: 50))
254
+
255
+ Image(systemName: symbol)
256
+ .foregroundColor(.white)
257
+ .font(.system(size: 30))
258
+ }
259
+ .glassEffect(.regular, in: .rect(cornerRadius: 16))
260
+ }
261
+ }
262
+
263
+ // Usage:
264
+ GlassEffectContainer(spacing: 20) {
265
+ HStack(spacing: 20) {
266
+ BadgeView(symbol: "star.fill", color: .blue)
267
+ BadgeView(symbol: "heart.fill", color: .red)
268
+ BadgeView(symbol: "leaf.fill", color: .green)
269
+ }
270
+ }
271
+ ```
272
+
273
+ ## References
274
+
275
+ - [Applying Liquid Glass to custom views](https://developer.apple.com/documentation/SwiftUI/Applying-Liquid-Glass-to-custom-views)
276
+ - [Landmarks: Building an app with Liquid Glass](https://developer.apple.com/documentation/SwiftUI/Landmarks-Building-an-app-with-Liquid-Glass)
277
+ - [SwiftUI View.glassEffect(_:in:isEnabled:)](https://developer.apple.com/documentation/SwiftUI/View/glassEffect(_:in:isEnabled:))
278
+ - [SwiftUI GlassEffectContainer](https://developer.apple.com/documentation/SwiftUI/GlassEffectContainer)
279
+ - [SwiftUI GlassEffectTransition](https://developer.apple.com/documentation/SwiftUI/GlassEffectTransition)
280
+ - [SwiftUI GlassButtonStyle](https://developer.apple.com/documentation/SwiftUI/GlassButtonStyle)
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Thomas Ricouard
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,111 @@
1
+ ---
2
+ name: swiftui-performance-audit
3
+ description: Audit and improve SwiftUI runtime performance from code review and architecture. Use for requests to diagnose slow rendering, janky scrolling, high CPU/memory usage, excessive view updates, or layout thrash in SwiftUI apps, and to provide guidance for user-run Instruments profiling when code review alone is insufficient.
4
+ ---
5
+
6
+ # SwiftUI Performance Audit
7
+
8
+ ## Quick start
9
+
10
+ Use this skill to diagnose SwiftUI performance issues from code first, then request profiling evidence when code review alone cannot explain the symptoms.
11
+
12
+ ## Workflow
13
+
14
+ 1. Classify the symptom: slow rendering, janky scrolling, high CPU, memory growth, hangs, or excessive view updates.
15
+ 2. If code is available, start with a code-first review using `references/code-smells.md`.
16
+ 3. If code is not available, ask for the smallest useful slice: target view, data flow, reproduction steps, and deployment target.
17
+ 4. If code review is inconclusive or runtime evidence is required, guide the user through profiling with `references/profiling-intake.md`.
18
+ 5. Summarize likely causes, evidence, remediation, and validation steps using `references/report-template.md`.
19
+
20
+ ## 1. Intake
21
+
22
+ Collect:
23
+ - Target view or feature code.
24
+ - Symptoms and exact reproduction steps.
25
+ - Data flow: `@State`, `@Binding`, environment dependencies, and observable models.
26
+ - Whether the issue shows up on device or simulator, and whether it was observed in Debug or Release.
27
+
28
+ Ask the user to classify the issue if possible:
29
+ - CPU spike or battery drain
30
+ - Janky scrolling or dropped frames
31
+ - High memory or image pressure
32
+ - Hangs or unresponsive interactions
33
+ - Excessive or unexpectedly broad view updates
34
+
35
+ For the full profiling intake checklist, read `references/profiling-intake.md`.
36
+
37
+ ## 2. Code-First Review
38
+
39
+ Focus on:
40
+ - Invalidation storms from broad observation or environment reads.
41
+ - Unstable identity in lists and `ForEach`.
42
+ - Heavy derived work in `body` or view builders.
43
+ - Layout thrash from complex hierarchies, `GeometryReader`, or preference chains.
44
+ - Large image decode or resize work on the main thread.
45
+ - Animation or transition work applied too broadly.
46
+
47
+ Use `references/code-smells.md` for the detailed smell catalog and fix guidance.
48
+
49
+ Provide:
50
+ - Likely root causes with code references.
51
+ - Suggested fixes and refactors.
52
+ - If needed, a minimal repro or instrumentation suggestion.
53
+
54
+ ## 3. Guide the User to Profile
55
+
56
+ If code review does not explain the issue, ask for runtime evidence:
57
+ - A trace export or screenshots of the SwiftUI timeline and Time Profiler call tree.
58
+ - Device/OS/build configuration.
59
+ - The exact interaction being profiled.
60
+ - Before/after metrics if the user is comparing a change.
61
+
62
+ Use `references/profiling-intake.md` for the exact checklist and collection steps.
63
+
64
+ ## 4. Analyze and Diagnose
65
+
66
+ - Map the evidence to the most likely category: invalidation, identity churn, layout thrash, main-thread work, image cost, or animation cost.
67
+ - Prioritize problems by impact, not by how easy they are to explain.
68
+ - Distinguish code-level suspicion from trace-backed evidence.
69
+ - Call out when profiling is still insufficient and what additional evidence would reduce uncertainty.
70
+
71
+ ## 5. Remediate
72
+
73
+ Apply targeted fixes:
74
+ - Narrow state scope and reduce broad observation fan-out.
75
+ - Stabilize identities for `ForEach` and lists.
76
+ - Move heavy work out of `body` into derived state updated from inputs, model-layer precomputation, memoized helpers, or background preprocessing. Use `@State` only for view-owned state, not as an ad hoc cache for arbitrary computation.
77
+ - Use `equatable()` only when equality is cheaper than recomputing the subtree and the inputs are truly value-semantic.
78
+ - Downsample images before rendering.
79
+ - Reduce layout complexity or use fixed sizing where possible.
80
+
81
+ Use `references/code-smells.md` for examples, Observation-specific fan-out guidance, and remediation patterns.
82
+
83
+ ## 6. Verify
84
+
85
+ Ask the user to re-run the same capture and compare with baseline metrics.
86
+ Summarize the delta (CPU, frame drops, memory peak) if provided.
87
+
88
+ ## Outputs
89
+
90
+ Provide:
91
+ - A short metrics table (before/after if available).
92
+ - Top issues (ordered by impact).
93
+ - Proposed fixes with estimated effort.
94
+
95
+ Use `references/report-template.md` when formatting the final audit.
96
+
97
+ ## References
98
+
99
+ - Profiling intake and collection checklist: `references/profiling-intake.md`
100
+ - Common code smells and remediation patterns: `references/code-smells.md`
101
+ - Audit output template: `references/report-template.md`
102
+ - Add Apple documentation and WWDC resources under `references/` as they are supplied by the user.
103
+ - Optimizing SwiftUI performance with Instruments: `references/optimizing-swiftui-performance-instruments.md`
104
+ - Understanding and improving SwiftUI performance: `references/understanding-improving-swiftui-performance.md`
105
+ - Understanding hangs in your app: `references/understanding-hangs-in-your-app.md`
106
+ - Demystify SwiftUI performance (WWDC23): `references/demystify-swiftui-performance-wwdc23.md`
107
+
108
+
109
+ ---
110
+
111
+ Vendored from: https://github.com/Dimillian/Skills/tree/main/swiftui-performance-audit
@@ -0,0 +1,4 @@
1
+ interface:
2
+ display_name: "SwiftUI Performance Audit"
3
+ short_description: "Audit SwiftUI runtime performance"
4
+ default_prompt: "Use $swiftui-performance-audit to review this SwiftUI code for performance issues and suggest concrete fixes."
@@ -0,0 +1,150 @@
1
+ # Common code smells and remediation patterns
2
+
3
+ ## Intent
4
+
5
+ Use this reference during code-first review to map visible SwiftUI patterns to likely runtime costs and safer remediation guidance.
6
+
7
+ ## High-priority smells
8
+
9
+ ### Expensive formatters in `body`
10
+
11
+ ```swift
12
+ var body: some View {
13
+ let number = NumberFormatter()
14
+ let measure = MeasurementFormatter()
15
+ Text(measure.string(from: .init(value: meters, unit: .meters)))
16
+ }
17
+ ```
18
+
19
+ Prefer cached formatters in a model or dedicated helper:
20
+
21
+ ```swift
22
+ final class DistanceFormatter {
23
+ static let shared = DistanceFormatter()
24
+ let number = NumberFormatter()
25
+ let measure = MeasurementFormatter()
26
+ }
27
+ ```
28
+
29
+ ### Heavy computed properties
30
+
31
+ ```swift
32
+ var filtered: [Item] {
33
+ items.filter { $0.isEnabled }
34
+ }
35
+ ```
36
+
37
+ Prefer deriving this once per meaningful input change in a model/helper, or store derived view-owned state only when the view truly owns the transformation lifecycle.
38
+
39
+ ### Sorting or filtering inside `body`
40
+
41
+ ```swift
42
+ List {
43
+ ForEach(items.sorted(by: sortRule)) { item in
44
+ Row(item)
45
+ }
46
+ }
47
+ ```
48
+
49
+ Prefer sorting before render work begins:
50
+
51
+ ```swift
52
+ let sortedItems = items.sorted(by: sortRule)
53
+ ```
54
+
55
+ ### Inline filtering inside `ForEach`
56
+
57
+ ```swift
58
+ ForEach(items.filter { $0.isEnabled }) { item in
59
+ Row(item)
60
+ }
61
+ ```
62
+
63
+ Prefer a prefiltered collection with stable identity.
64
+
65
+ ### Unstable identity
66
+
67
+ ```swift
68
+ ForEach(items, id: \.self) { item in
69
+ Row(item)
70
+ }
71
+ ```
72
+
73
+ Avoid `id: \.self` for non-stable values or collections that reorder. Use a stable domain identifier.
74
+
75
+ ### Top-level conditional view swapping
76
+
77
+ ```swift
78
+ var content: some View {
79
+ if isEditing {
80
+ editingView
81
+ } else {
82
+ readOnlyView
83
+ }
84
+ }
85
+ ```
86
+
87
+ Prefer one stable base view and localize conditions to sections or modifiers. This reduces root identity churn and makes diffing cheaper.
88
+
89
+ ### Image decoding on the main thread
90
+
91
+ ```swift
92
+ Image(uiImage: UIImage(data: data)!)
93
+ ```
94
+
95
+ Prefer decode and downsample work off the main thread, then store the processed image.
96
+
97
+ ## Observation fan-out
98
+
99
+ ### Broad `@Observable` reads on iOS 17+
100
+
101
+ ```swift
102
+ @Observable final class Model {
103
+ var items: [Item] = []
104
+ }
105
+
106
+ var body: some View {
107
+ Row(isFavorite: model.items.contains(item))
108
+ }
109
+ ```
110
+
111
+ If many views read the same broad collection or root model, small changes can fan out into wide invalidation. Prefer narrower derived inputs, smaller observable surfaces, or per-item state closer to the leaf views.
112
+
113
+ ### Broad `ObservableObject` reads on iOS 16 and earlier
114
+
115
+ ```swift
116
+ final class Model: ObservableObject {
117
+ @Published var items: [Item] = []
118
+ }
119
+ ```
120
+
121
+ The same warning applies to legacy observation. Avoid having many descendants observe a large shared object when they only need one derived field.
122
+
123
+ ## Remediation notes
124
+
125
+ ### `@State` is not a generic cache
126
+
127
+ Use `@State` for view-owned state and derived values that intentionally belong to the view lifecycle. Do not move arbitrary expensive computation into `@State` unless you also define when and why it updates.
128
+
129
+ Better alternatives:
130
+ - precompute in the model or store
131
+ - update derived state in response to a specific input change
132
+ - memoize in a dedicated helper
133
+ - preprocess on a background task before rendering
134
+
135
+ ### `equatable()` is conditional guidance
136
+
137
+ Use `equatable()` only when:
138
+ - equality is cheaper than recomputing the subtree, and
139
+ - the view inputs are value-semantic and stable enough for meaningful equality checks
140
+
141
+ Do not apply `equatable()` as a blanket fix for all redraws.
142
+
143
+ ## Triage order
144
+
145
+ When multiple smells appear together, prioritize in this order:
146
+ 1. Broad invalidation and observation fan-out
147
+ 2. Unstable identity and list churn
148
+ 3. Main-thread work during render
149
+ 4. Image decode or resize cost
150
+ 5. Layout and animation complexity
@@ -0,0 +1,46 @@
1
+ # Demystify SwiftUI Performance (WWDC23) (Summary)
2
+
3
+ Context: WWDC23 session on building a mental model for SwiftUI performance and triaging hangs/hitches.
4
+
5
+ ## Performance loop
6
+
7
+ - Measure -> Identify -> Optimize -> Re-measure.
8
+ - Focus on concrete symptoms (slow navigation, broken animations, spinning cursor).
9
+
10
+ ## Dependencies and updates
11
+
12
+ - Views form a dependency graph; dynamic properties are a frequent source of updates.
13
+ - Use `Self._printChanges()` in debug only to inspect extra dependencies.
14
+ - Eliminate unnecessary dependencies by extracting views or narrowing state.
15
+ - Consider `@Observable` for more granular property tracking.
16
+
17
+ ## Common causes of slow updates
18
+
19
+ - Expensive view bodies (string interpolation, filtering, formatting).
20
+ - Dynamic property instantiation and state initialization in `body`.
21
+ - Slow identity resolution in lists/tables.
22
+ - Hidden work: bundle lookups, heap allocations, repeated string construction.
23
+
24
+ ## Avoid slow initialization in view bodies
25
+
26
+ - Don’t create heavy models synchronously in view bodies.
27
+ - Use `.task` to fetch async data and keep `init` lightweight.
28
+
29
+ ## Lists and tables identity rules
30
+
31
+ - Stable identity is critical for performance and animation.
32
+ - Ensure a constant number of views per element in `ForEach`.
33
+ - Avoid inline filtering in `ForEach`; pre-filter and cache collections.
34
+ - Avoid `AnyView` in list rows; it hides identity and increases cost.
35
+ - Flatten nested `ForEach` when possible to reduce overhead.
36
+
37
+ ## Table specifics
38
+
39
+ - `TableRow` resolves to a single row; row count must be constant.
40
+ - Prefer the streamlined `Table` initializer to enforce constant rows.
41
+ - Use explicit IDs for back deployment when needed.
42
+
43
+ ## Debugging aids
44
+
45
+ - Use Instruments for hangs and hitches.
46
+ - Use `_printChanges` to validate dependency assumptions during debug.
@@ -0,0 +1,29 @@
1
+ # Optimizing SwiftUI Performance with Instruments (Summary)
2
+
3
+ Context: WWDC session introducing the next-generation SwiftUI Instrument in Instruments 26 and how to diagnose SwiftUI-specific bottlenecks.
4
+
5
+ ## Key takeaways
6
+
7
+ - Profile SwiftUI issues with the SwiftUI template (SwiftUI instrument + Time Profiler + Hangs/Hitches).
8
+ - Long view body updates are a common bottleneck; use "Long View Body Updates" to identify slow bodies.
9
+ - Set inspection range on a long update and correlate with Time Profiler to find expensive frames.
10
+ - Keep work out of `body`: move formatting, sorting, image decoding, and other expensive work into cached or precomputed paths.
11
+ - Use Cause & Effect Graph to diagnose *why* updates occur; SwiftUI is declarative, so backtraces are often unhelpful.
12
+ - Avoid broad dependencies that trigger many updates (e.g., `@Observable` arrays or global environment reads).
13
+ - Prefer granular view models and scoped state so only the affected view updates.
14
+ - Environment values update checks still cost time; avoid placing fast-changing values (timers, geometry) in environment.
15
+ - Profile early and often during feature development to catch regressions.
16
+
17
+ ## Suggested workflow (condensed)
18
+
19
+ 1. Record a trace in Release mode using the SwiftUI template.
20
+ 2. Inspect "Long View Body Updates" and "Other Long Updates."
21
+ 3. Zoom into a long update, then inspect Time Profiler for hot frames.
22
+ 4. Fix slow body work by moving heavy logic into precomputed/cache paths.
23
+ 5. Use Cause & Effect Graph to identify unintended update fan-out.
24
+ 6. Re-record and compare the update counts and hitch frequency.
25
+
26
+ ## Example patterns from the session
27
+
28
+ - Caching formatted distance strings in a location manager instead of computing in `body`.
29
+ - Replacing a dependency on a global favorites array with per-item view models to reduce update fan-out.
@@ -0,0 +1,44 @@
1
+ # Profiling intake and collection checklist
2
+
3
+ ## Intent
4
+
5
+ Use this checklist when code review alone cannot explain the SwiftUI performance issue and you need runtime evidence from the user.
6
+
7
+ ## Ask for first
8
+
9
+ - Exact symptom: CPU spike, dropped frames, memory growth, hangs, or excessive view updates.
10
+ - Exact interaction: scrolling, typing, initial load, navigation push/pop, animation, sheet presentation, or background refresh.
11
+ - Target device and OS version.
12
+ - Whether the issue was reproduced on a real device or only in Simulator.
13
+ - Build configuration: Debug or Release.
14
+ - Whether the user already has a baseline or before/after comparison.
15
+
16
+ ## Default profiling request
17
+
18
+ Ask the user to:
19
+ - Run the app in a Release build when possible.
20
+ - Use the SwiftUI Instruments template.
21
+ - Reproduce the exact problematic interaction only long enough to capture the issue.
22
+ - Capture the SwiftUI timeline and Time Profiler together.
23
+ - Export the trace or provide screenshots of the key SwiftUI lanes and the Time Profiler call tree.
24
+
25
+ ## Ask for these artifacts
26
+
27
+ - Trace export or screenshots of the relevant SwiftUI lanes
28
+ - Time Profiler call tree screenshot or export
29
+ - Device/OS/build configuration
30
+ - A short note describing what action was happening at the time of the capture
31
+ - If memory is involved, the memory graph or Allocations data if available
32
+
33
+ ## When to ask for more
34
+
35
+ - Ask for a second capture if the first run mixes multiple interactions.
36
+ - Ask for a before/after pair if the user has already tried a fix.
37
+ - Ask for a device capture if the issue only appears in Simulator or if scrolling smoothness matters.
38
+
39
+ ## Common traps
40
+
41
+ - Debug builds can distort SwiftUI timing and allocation behavior.
42
+ - Simulator traces can miss device-only rendering or memory issues.
43
+ - Mixed interactions in one capture make attribution harder.
44
+ - Screenshots without the reproduction note are much harder to interpret.