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.
- package/.claude-plugin/marketplace.json +3 -3
- package/.claude-plugin/plugin.json +9 -3
- package/CHANGELOG.md +112 -0
- package/README.md +2 -2
- package/agents/a11y-architect.md +166 -0
- package/agents/business-model.md +80 -29
- package/agents/code-architect.md +75 -0
- package/agents/code-reviewer.md +255 -0
- package/agents/code-simplifier.md +64 -0
- package/agents/design-brand-guardian.md +293 -53
- package/agents/design-critic.md +139 -0
- package/agents/design-inclusive-visuals-specialist.md +6 -19
- package/agents/design-ui-designer.md +335 -56
- package/agents/design-ux-architect.md +403 -55
- package/agents/design-ux-researcher.md +264 -49
- package/agents/engineering-ai-engineer.md +26 -36
- package/agents/engineering-backend-architect.md +185 -36
- package/agents/engineering-data-engineer.md +225 -43
- package/agents/engineering-devops-automator.md +227 -74
- package/agents/engineering-frontend-developer.md +210 -34
- package/agents/engineering-mobile-app-builder.md +6 -1
- package/agents/engineering-rapid-prototyper.md +30 -9
- package/agents/engineering-security-engineer.md +263 -61
- package/agents/engineering-senior-developer.md +128 -19
- package/agents/engineering-sre.md +84 -0
- package/agents/engineering-technical-writer.md +285 -41
- package/agents/feature-intel.md +110 -0
- package/agents/ios-app-review-guardian.md +66 -0
- package/agents/ios-foundation-models-specialist.md +64 -0
- package/agents/ios-storekit-specialist.md +59 -0
- package/agents/ios-swift-architect.md +129 -0
- package/agents/ios-swift-search.md +137 -0
- package/agents/ios-swift-ui-design.md +136 -0
- package/agents/marketing-app-store-optimizer.md +246 -64
- package/agents/planner.md +216 -0
- package/agents/pr-test-analyzer.md +63 -0
- package/agents/product-feedback-synthesizer.md +8 -2
- package/agents/refactor-cleaner.md +102 -0
- package/agents/security-reviewer.md +128 -0
- package/agents/silent-failure-hunter.md +54 -0
- package/agents/swift-build-resolver.md +119 -0
- package/agents/swift-reviewer.md +112 -0
- package/agents/tech-feasibility.md +21 -1
- package/agents/testing-api-tester.md +236 -59
- package/agents/testing-evidence-collector.md +26 -1
- package/agents/testing-performance-benchmarker.md +21 -1
- package/agents/testing-reality-checker.md +6 -1
- package/agents/visual-research.md +116 -0
- package/bin/adapters/cycle-counter-tool.ts +155 -0
- package/bin/adapters/scribe-tool.ts +71 -0
- package/bin/adapters/state-save-tool.ts +130 -0
- package/bin/adapters/write-lease-tool.ts +127 -0
- package/bin/buildanything-runtime.js +15 -0
- package/bin/buildanything-runtime.ts +328 -0
- package/bin/setup.js +83 -8
- package/commands/add-feature.md +2 -0
- package/commands/build.md +752 -332
- package/commands/fix.md +65 -0
- package/commands/self-check.md +121 -0
- package/commands/setup.md +114 -0
- package/commands/ux-review.md +63 -0
- package/commands/verify.md +69 -0
- package/docs/migration/agents.yaml +729 -0
- package/docs/migration/phase-graph.yaml +1088 -0
- package/docs/migration/sdk-host-compat.md +18 -0
- package/hooks/compile-writer-owner-cache.ts +171 -0
- package/hooks/hooks.json +36 -0
- package/hooks/pre-tool-use +19 -0
- package/hooks/pre-tool-use.ts +776 -0
- package/hooks/record-mode-transitions.ts +178 -0
- package/hooks/session-start +89 -2
- package/hooks/subagent-start +17 -0
- package/hooks/subagent-start.ts +471 -0
- package/hooks/subagent-stop +17 -0
- package/hooks/subagent-stop.ts +153 -0
- package/package.json +28 -5
- package/protocols/architecture-schema.md +171 -0
- package/protocols/build-fix.md +52 -0
- package/protocols/cleanup.md +54 -0
- package/protocols/decision-log.md +131 -0
- package/protocols/eval-harness.md +61 -0
- package/protocols/fake-data-detector.md +64 -0
- package/protocols/ios-context.md +234 -0
- package/protocols/ios-frameworks-map.md +323 -0
- package/protocols/ios-phase-branches.md +337 -0
- package/protocols/ios-preflight.md +27 -0
- package/protocols/launch-readiness.md +258 -0
- package/protocols/metric-loop.md +153 -0
- package/protocols/smoke-test.md +118 -0
- package/protocols/state-schema.json +388 -0
- package/protocols/state-schema.md +172 -0
- package/protocols/verify.md +127 -0
- package/protocols/visual-dna.md +185 -0
- package/protocols/web-phase-branches.md +351 -0
- package/skills/ios/_VENDORED.md +62 -0
- package/skills/ios/activitykit/LICENSE +131 -0
- package/skills/ios/activitykit/SKILL.md +505 -0
- package/skills/ios/activitykit/references/activitykit-patterns.md +868 -0
- package/skills/ios/app-intents/LICENSE +131 -0
- package/skills/ios/app-intents/SKILL.md +494 -0
- package/skills/ios/app-intents/references/appintents-advanced.md +1076 -0
- package/skills/ios/app-store-connect-metadata/SKILL.md +148 -0
- package/skills/ios/apple-on-device-ai/LICENSE +131 -0
- package/skills/ios/apple-on-device-ai/SKILL.md +505 -0
- package/skills/ios/apple-on-device-ai/references/coreml-conversion.md +425 -0
- package/skills/ios/apple-on-device-ai/references/coreml-optimization.md +344 -0
- package/skills/ios/apple-on-device-ai/references/foundation-models.md +508 -0
- package/skills/ios/apple-on-device-ai/references/mlx-swift.md +285 -0
- package/skills/ios/asc-privacy-manifest/SKILL.md +350 -0
- package/skills/ios/hig-components-content/SKILL.md +86 -0
- package/skills/ios/hig-components-content/references/activity-views.md +79 -0
- package/skills/ios/hig-components-content/references/charts.md +180 -0
- package/skills/ios/hig-components-content/references/collections.md +48 -0
- package/skills/ios/hig-components-content/references/color-wells.md +42 -0
- package/skills/ios/hig-components-content/references/image-views.md +82 -0
- package/skills/ios/hig-components-content/references/image-wells.md +34 -0
- package/skills/ios/hig-components-content/references/lockups.md +78 -0
- package/skills/ios/hig-components-content/references/web-views.md +36 -0
- package/skills/ios/hig-components-controls/SKILL.md +88 -0
- package/skills/ios/hig-components-controls/references/combo-boxes.md +40 -0
- package/skills/ios/hig-components-controls/references/controls.md +112 -0
- package/skills/ios/hig-components-controls/references/gauges.md +74 -0
- package/skills/ios/hig-components-controls/references/labels.md +92 -0
- package/skills/ios/hig-components-controls/references/pickers.md +128 -0
- package/skills/ios/hig-components-controls/references/rating-indicators.md +38 -0
- package/skills/ios/hig-components-controls/references/segmented-controls.md +94 -0
- package/skills/ios/hig-components-controls/references/sliders.md +92 -0
- package/skills/ios/hig-components-controls/references/steppers.md +40 -0
- package/skills/ios/hig-components-controls/references/text-fields.md +88 -0
- package/skills/ios/hig-components-controls/references/text-views.md +56 -0
- package/skills/ios/hig-components-controls/references/toggles.md +127 -0
- package/skills/ios/hig-components-controls/references/token-fields.md +48 -0
- package/skills/ios/hig-components-controls/references/virtual-keyboards.md +156 -0
- package/skills/ios/hig-components-dialogs/SKILL.md +76 -0
- package/skills/ios/hig-components-dialogs/references/action-sheets.md +74 -0
- package/skills/ios/hig-components-dialogs/references/alerts.md +158 -0
- package/skills/ios/hig-components-dialogs/references/digit-entry-views.md +32 -0
- package/skills/ios/hig-components-dialogs/references/popovers.md +81 -0
- package/skills/ios/hig-components-dialogs/references/sheets.md +157 -0
- package/skills/ios/hig-components-layout/SKILL.md +99 -0
- package/skills/ios/hig-components-layout/references/boxes.md +48 -0
- package/skills/ios/hig-components-layout/references/column-views.md +44 -0
- package/skills/ios/hig-components-layout/references/lists-and-tables.md +99 -0
- package/skills/ios/hig-components-layout/references/ornaments.md +56 -0
- package/skills/ios/hig-components-layout/references/outline-views.md +64 -0
- package/skills/ios/hig-components-layout/references/panels.md +75 -0
- package/skills/ios/hig-components-layout/references/scroll-views.md +123 -0
- package/skills/ios/hig-components-layout/references/sidebars.md +109 -0
- package/skills/ios/hig-components-layout/references/split-views.md +110 -0
- package/skills/ios/hig-components-layout/references/tab-bars.md +173 -0
- package/skills/ios/hig-components-layout/references/tab-views.md +68 -0
- package/skills/ios/hig-components-layout/references/windows.md +188 -0
- package/skills/ios/hig-components-menus/SKILL.md +81 -0
- package/skills/ios/hig-components-menus/references/action-button.md +61 -0
- package/skills/ios/hig-components-menus/references/buttons.md +261 -0
- package/skills/ios/hig-components-menus/references/context-menus.md +105 -0
- package/skills/ios/hig-components-menus/references/disclosure-controls.md +84 -0
- package/skills/ios/hig-components-menus/references/dock-menus.md +40 -0
- package/skills/ios/hig-components-menus/references/edit-menus.md +88 -0
- package/skills/ios/hig-components-menus/references/menus.md +171 -0
- package/skills/ios/hig-components-menus/references/pop-up-buttons.md +70 -0
- package/skills/ios/hig-components-menus/references/pull-down-buttons.md +77 -0
- package/skills/ios/hig-components-menus/references/the-menu-bar.md +303 -0
- package/skills/ios/hig-components-menus/references/toolbars.md +256 -0
- package/skills/ios/hig-components-search/SKILL.md +68 -0
- package/skills/ios/hig-components-search/references/page-controls.md +120 -0
- package/skills/ios/hig-components-search/references/path-controls.md +40 -0
- package/skills/ios/hig-components-search/references/search-fields.md +189 -0
- package/skills/ios/hig-components-status/SKILL.md +80 -0
- package/skills/ios/hig-components-status/references/activity-rings.md +105 -0
- package/skills/ios/hig-components-status/references/progress-indicators.md +116 -0
- package/skills/ios/hig-components-status/references/status-bars.md +38 -0
- package/skills/ios/hig-components-system/SKILL.md +88 -0
- package/skills/ios/hig-components-system/references/app-clips.md +387 -0
- package/skills/ios/hig-components-system/references/app-shortcuts.md +114 -0
- package/skills/ios/hig-components-system/references/complications.md +425 -0
- package/skills/ios/hig-components-system/references/home-screen-quick-actions.md +42 -0
- package/skills/ios/hig-components-system/references/live-activities.md +442 -0
- package/skills/ios/hig-components-system/references/notifications.md +153 -0
- package/skills/ios/hig-components-system/references/top-shelf.md +135 -0
- package/skills/ios/hig-components-system/references/watch-faces.md +40 -0
- package/skills/ios/hig-components-system/references/widgets.md +517 -0
- package/skills/ios/hig-foundations/SKILL.md +98 -0
- package/skills/ios/hig-foundations/references/accessibility.md +291 -0
- package/skills/ios/hig-foundations/references/app-icons.md +210 -0
- package/skills/ios/hig-foundations/references/branding.md +44 -0
- package/skills/ios/hig-foundations/references/color.md +274 -0
- package/skills/ios/hig-foundations/references/dark-mode.md +116 -0
- package/skills/ios/hig-foundations/references/icons.md +263 -0
- package/skills/ios/hig-foundations/references/images.md +176 -0
- package/skills/ios/hig-foundations/references/immersive-experiences.md +174 -0
- package/skills/ios/hig-foundations/references/inclusion.md +189 -0
- package/skills/ios/hig-foundations/references/layout.md +425 -0
- package/skills/ios/hig-foundations/references/materials.md +238 -0
- package/skills/ios/hig-foundations/references/motion.md +103 -0
- package/skills/ios/hig-foundations/references/privacy.md +231 -0
- package/skills/ios/hig-foundations/references/right-to-left.md +206 -0
- package/skills/ios/hig-foundations/references/sf-symbols.md +310 -0
- package/skills/ios/hig-foundations/references/spatial-layout.md +142 -0
- package/skills/ios/hig-foundations/references/typography.md +1146 -0
- package/skills/ios/hig-foundations/references/writing.md +91 -0
- package/skills/ios/hig-inputs/SKILL.md +94 -0
- package/skills/ios/hig-inputs/references/apple-pencil-and-scribble.md +148 -0
- package/skills/ios/hig-inputs/references/camera-control.md +107 -0
- package/skills/ios/hig-inputs/references/digital-crown.md +83 -0
- package/skills/ios/hig-inputs/references/eyes.md +120 -0
- package/skills/ios/hig-inputs/references/focus-and-selection.md +120 -0
- package/skills/ios/hig-inputs/references/game-controls.md +156 -0
- package/skills/ios/hig-inputs/references/gestures.md +208 -0
- package/skills/ios/hig-inputs/references/gyro-and-accelerometer.md +40 -0
- package/skills/ios/hig-inputs/references/keyboards.md +234 -0
- package/skills/ios/hig-inputs/references/nearby-interactions.md +70 -0
- package/skills/ios/hig-inputs/references/pointing-devices.md +237 -0
- package/skills/ios/hig-inputs/references/remotes.md +67 -0
- package/skills/ios/hig-inputs/references/spatial-interactions.md +70 -0
- package/skills/ios/hig-patterns/SKILL.md +104 -0
- package/skills/ios/hig-patterns/references/charting-data.md +81 -0
- package/skills/ios/hig-patterns/references/collaboration-and-sharing.md +86 -0
- package/skills/ios/hig-patterns/references/drag-and-drop.md +134 -0
- package/skills/ios/hig-patterns/references/entering-data.md +69 -0
- package/skills/ios/hig-patterns/references/feedback.md +67 -0
- package/skills/ios/hig-patterns/references/file-management.md +135 -0
- package/skills/ios/hig-patterns/references/going-full-screen.md +79 -0
- package/skills/ios/hig-patterns/references/launching.md +81 -0
- package/skills/ios/hig-patterns/references/live-viewing-apps.md +79 -0
- package/skills/ios/hig-patterns/references/loading.md +59 -0
- package/skills/ios/hig-patterns/references/managing-accounts.md +107 -0
- package/skills/ios/hig-patterns/references/managing-notifications.md +99 -0
- package/skills/ios/hig-patterns/references/modality.md +82 -0
- package/skills/ios/hig-patterns/references/multitasking.md +131 -0
- package/skills/ios/hig-patterns/references/offering-help.md +117 -0
- package/skills/ios/hig-patterns/references/onboarding.md +69 -0
- package/skills/ios/hig-patterns/references/playing-audio.md +124 -0
- package/skills/ios/hig-patterns/references/playing-haptics.md +280 -0
- package/skills/ios/hig-patterns/references/playing-video.md +180 -0
- package/skills/ios/hig-patterns/references/printing.md +50 -0
- package/skills/ios/hig-patterns/references/ratings-and-reviews.md +48 -0
- package/skills/ios/hig-patterns/references/searching.md +70 -0
- package/skills/ios/hig-patterns/references/settings.md +84 -0
- package/skills/ios/hig-patterns/references/undo-and-redo.md +58 -0
- package/skills/ios/hig-patterns/references/workouts.md +76 -0
- package/skills/ios/hig-platforms/SKILL.md +84 -0
- package/skills/ios/hig-platforms/references/designing-for-games.md +159 -0
- package/skills/ios/hig-platforms/references/designing-for-ios.md +66 -0
- package/skills/ios/hig-platforms/references/designing-for-ipados.md +64 -0
- package/skills/ios/hig-platforms/references/designing-for-macos.md +70 -0
- package/skills/ios/hig-platforms/references/designing-for-tvos.md +68 -0
- package/skills/ios/hig-platforms/references/designing-for-visionos.md +85 -0
- package/skills/ios/hig-platforms/references/designing-for-watchos.md +74 -0
- package/skills/ios/hig-project-context/SKILL.md +133 -0
- package/skills/ios/hig-technologies/SKILL.md +107 -0
- package/skills/ios/hig-technologies/references/airplay.md +125 -0
- package/skills/ios/hig-technologies/references/always-on.md +62 -0
- package/skills/ios/hig-technologies/references/apple-pay.md +441 -0
- package/skills/ios/hig-technologies/references/augmented-reality.md +247 -0
- package/skills/ios/hig-technologies/references/carekit.md +224 -0
- package/skills/ios/hig-technologies/references/carplay.md +119 -0
- package/skills/ios/hig-technologies/references/game-center.md +343 -0
- package/skills/ios/hig-technologies/references/generative-ai.md +110 -0
- package/skills/ios/hig-technologies/references/healthkit.md +120 -0
- package/skills/ios/hig-technologies/references/homekit.md +343 -0
- package/skills/ios/hig-technologies/references/icloud.md +52 -0
- package/skills/ios/hig-technologies/references/id-verifier.md +73 -0
- package/skills/ios/hig-technologies/references/imessage-apps-and-stickers.md +105 -0
- package/skills/ios/hig-technologies/references/in-app-purchase.md +263 -0
- package/skills/ios/hig-technologies/references/live-photos.md +54 -0
- package/skills/ios/hig-technologies/references/mac-catalyst.md +216 -0
- package/skills/ios/hig-technologies/references/machine-learning.md +394 -0
- package/skills/ios/hig-technologies/references/maps.md +221 -0
- package/skills/ios/hig-technologies/references/nfc.md +51 -0
- package/skills/ios/hig-technologies/references/photo-editing.md +40 -0
- package/skills/ios/hig-technologies/references/researchkit.md +134 -0
- package/skills/ios/hig-technologies/references/shareplay.md +142 -0
- package/skills/ios/hig-technologies/references/shazamkit.md +47 -0
- package/skills/ios/hig-technologies/references/sign-in-with-apple.md +288 -0
- package/skills/ios/hig-technologies/references/siri.md +523 -0
- package/skills/ios/hig-technologies/references/tap-to-pay-on-iphone.md +208 -0
- package/skills/ios/hig-technologies/references/voiceover.md +90 -0
- package/skills/ios/hig-technologies/references/wallet.md +420 -0
- package/skills/ios/ios-26-platform/SKILL.md +53 -0
- package/skills/ios/ios-26-platform/references/automatic-adoption.md +161 -0
- package/skills/ios/ios-26-platform/references/backward-compat.md +238 -0
- package/skills/ios/ios-26-platform/references/liquid-glass.md +255 -0
- package/skills/ios/ios-26-platform/references/swiftui-apis.md +277 -0
- package/skills/ios/ios-26-platform/references/toolbar-navigation.md +250 -0
- package/skills/ios/ios-bootstrap/SKILL.md +107 -0
- package/skills/ios/ios-bootstrap/references/apple-docs-mcp-config.md +28 -0
- package/skills/ios/ios-bootstrap/references/new-project-dialog.md +41 -0
- package/skills/ios/ios-bootstrap/references/xcode-mcp-config.md +29 -0
- package/skills/ios/ios-debugger-agent/LICENSE +21 -0
- package/skills/ios/ios-debugger-agent/SKILL.md +58 -0
- package/skills/ios/ios-debugger-agent/agents/openai.yaml +4 -0
- package/skills/ios/ios-entitlements-generator/SKILL.md +47 -0
- package/skills/ios/ios-info-plist-hardening/SKILL.md +130 -0
- package/skills/ios/ios-maestro-flow-author/SKILL.md +68 -0
- package/skills/ios/ios-maestro-flow-author/references/input-and-scroll.yaml +17 -0
- package/skills/ios/ios-maestro-flow-author/references/modal-and-dismiss.yaml +14 -0
- package/skills/ios/ios-maestro-flow-author/references/onboarding-flow.yaml +16 -0
- package/skills/ios/ios-maestro-flow-author/references/tab-navigation.yaml +13 -0
- package/skills/ios/ios-maestro-flow-author/references/tap-and-assert.yaml +9 -0
- package/skills/ios/swift-accessibility/LICENSE +21 -0
- package/skills/ios/swift-accessibility/SKILL.md +371 -0
- package/skills/ios/swift-accessibility/examples/before-after-appkit.md +446 -0
- package/skills/ios/swift-accessibility/examples/before-after-swiftui.md +441 -0
- package/skills/ios/swift-accessibility/examples/before-after-uikit.md +464 -0
- package/skills/ios/swift-accessibility/references/assistive-access.md +441 -0
- package/skills/ios/swift-accessibility/references/display-settings.md +491 -0
- package/skills/ios/swift-accessibility/references/dynamic-type.md +420 -0
- package/skills/ios/swift-accessibility/references/media-accessibility.md +421 -0
- package/skills/ios/swift-accessibility/references/motor-input.md +393 -0
- package/skills/ios/swift-accessibility/references/nutrition-labels.md +362 -0
- package/skills/ios/swift-accessibility/references/platform-specifics.md +515 -0
- package/skills/ios/swift-accessibility/references/semantic-structure.md +585 -0
- package/skills/ios/swift-accessibility/references/testing-auditing.md +507 -0
- package/skills/ios/swift-accessibility/references/voice-control.md +317 -0
- package/skills/ios/swift-accessibility/references/voiceover-swiftui.md +584 -0
- package/skills/ios/swift-accessibility/references/voiceover-uikit.md +519 -0
- package/skills/ios/swift-accessibility/references/wcag-mapping.md +167 -0
- package/skills/ios/swift-accessibility/resources/audit-template.swift +128 -0
- package/skills/ios/swift-accessibility/resources/qa-checklist.md +258 -0
- package/skills/ios/swift-actor-persistence/SKILL.md +143 -0
- package/skills/ios/swift-concurrency/LICENSE +21 -0
- package/skills/ios/swift-concurrency/SKILL.md +171 -0
- package/skills/ios/swift-concurrency/references/_index.md +50 -0
- package/skills/ios/swift-concurrency/references/actors.md +660 -0
- package/skills/ios/swift-concurrency/references/async-algorithms.md +847 -0
- package/skills/ios/swift-concurrency/references/async-await-basics.md +266 -0
- package/skills/ios/swift-concurrency/references/async-sequences.md +710 -0
- package/skills/ios/swift-concurrency/references/core-data.md +560 -0
- package/skills/ios/swift-concurrency/references/glossary.md +135 -0
- package/skills/ios/swift-concurrency/references/linting.md +155 -0
- package/skills/ios/swift-concurrency/references/memory-management.md +569 -0
- package/skills/ios/swift-concurrency/references/migration.md +1104 -0
- package/skills/ios/swift-concurrency/references/performance.md +593 -0
- package/skills/ios/swift-concurrency/references/sendable.md +598 -0
- package/skills/ios/swift-concurrency/references/tasks.md +636 -0
- package/skills/ios/swift-concurrency/references/testing.md +592 -0
- package/skills/ios/swift-concurrency/references/threading.md +495 -0
- package/skills/ios/swift-concurrency-6-2/SKILL.md +216 -0
- package/skills/ios/swift-protocol-di-testing/SKILL.md +190 -0
- package/skills/ios/swift-security-expert/LICENSE +21 -0
- package/skills/ios/swift-security-expert/SKILL.md +470 -0
- package/skills/ios/swift-security-expert/references/biometric-authentication.md +565 -0
- package/skills/ios/swift-security-expert/references/certificate-trust.md +592 -0
- package/skills/ios/swift-security-expert/references/common-anti-patterns.md +690 -0
- package/skills/ios/swift-security-expert/references/compliance-owasp-mapping.md +537 -0
- package/skills/ios/swift-security-expert/references/credential-storage-patterns.md +721 -0
- package/skills/ios/swift-security-expert/references/cryptokit-public-key.md +505 -0
- package/skills/ios/swift-security-expert/references/cryptokit-symmetric.md +497 -0
- package/skills/ios/swift-security-expert/references/keychain-access-control.md +508 -0
- package/skills/ios/swift-security-expert/references/keychain-fundamentals.md +596 -0
- package/skills/ios/swift-security-expert/references/keychain-item-classes.md +476 -0
- package/skills/ios/swift-security-expert/references/keychain-sharing.md +458 -0
- package/skills/ios/swift-security-expert/references/migration-legacy-stores.md +727 -0
- package/skills/ios/swift-security-expert/references/secure-enclave.md +539 -0
- package/skills/ios/swift-security-expert/references/testing-security-code.md +781 -0
- package/skills/ios/swift-testing-expert/LICENSE +21 -0
- package/skills/ios/swift-testing-expert/SKILL.md +79 -0
- package/skills/ios/swift-testing-expert/references/_index.md +12 -0
- package/skills/ios/swift-testing-expert/references/async-testing-and-waiting.md +127 -0
- package/skills/ios/swift-testing-expert/references/expectations.md +145 -0
- package/skills/ios/swift-testing-expert/references/fundamentals.md +141 -0
- package/skills/ios/swift-testing-expert/references/migration-from-xctest.md +127 -0
- package/skills/ios/swift-testing-expert/references/parallelization-and-isolation.md +95 -0
- package/skills/ios/swift-testing-expert/references/parameterized-testing.md +284 -0
- package/skills/ios/swift-testing-expert/references/performance-and-best-practices.md +187 -0
- package/skills/ios/swift-testing-expert/references/traits-and-tags.md +114 -0
- package/skills/ios/swift-testing-expert/references/xcode-workflows.md +70 -0
- package/skills/ios/swiftdata-pro/LICENSE +21 -0
- package/skills/ios/swiftdata-pro/SKILL.md +102 -0
- package/skills/ios/swiftdata-pro/agents/openai.yaml +10 -0
- package/skills/ios/swiftdata-pro/assets/swiftdata-pro-icon.png +0 -0
- package/skills/ios/swiftdata-pro/assets/swiftdata-pro-icon.svg +29 -0
- package/skills/ios/swiftdata-pro/references/class-inheritance.md +104 -0
- package/skills/ios/swiftdata-pro/references/cloudkit.md +10 -0
- package/skills/ios/swiftdata-pro/references/core-rules.md +20 -0
- package/skills/ios/swiftdata-pro/references/indexing.md +27 -0
- package/skills/ios/swiftdata-pro/references/predicates.md +73 -0
- package/skills/ios/swiftui-design-principles/AGENTS.md +21 -0
- package/skills/ios/swiftui-design-principles/LICENSE +21 -0
- package/skills/ios/swiftui-design-principles/README.md +41 -0
- package/skills/ios/swiftui-design-principles/SKILL.md +605 -0
- package/skills/ios/swiftui-design-principles/metadata.json +10 -0
- package/skills/ios/swiftui-design-tokens/SKILL.md +475 -0
- package/skills/ios/swiftui-liquid-glass/LICENSE +21 -0
- package/skills/ios/swiftui-liquid-glass/SKILL.md +95 -0
- package/skills/ios/swiftui-liquid-glass/agents/openai.yaml +4 -0
- package/skills/ios/swiftui-liquid-glass/references/liquid-glass.md +280 -0
- package/skills/ios/swiftui-performance-audit/LICENSE +21 -0
- package/skills/ios/swiftui-performance-audit/SKILL.md +111 -0
- package/skills/ios/swiftui-performance-audit/agents/openai.yaml +4 -0
- package/skills/ios/swiftui-performance-audit/references/code-smells.md +150 -0
- package/skills/ios/swiftui-performance-audit/references/demystify-swiftui-performance-wwdc23.md +46 -0
- package/skills/ios/swiftui-performance-audit/references/optimizing-swiftui-performance-instruments.md +29 -0
- package/skills/ios/swiftui-performance-audit/references/profiling-intake.md +44 -0
- package/skills/ios/swiftui-performance-audit/references/report-template.md +47 -0
- package/skills/ios/swiftui-performance-audit/references/understanding-hangs-in-your-app.md +33 -0
- package/skills/ios/swiftui-performance-audit/references/understanding-improving-swiftui-performance.md +52 -0
- package/skills/ios/swiftui-pro/LICENSE +21 -0
- package/skills/ios/swiftui-pro/SKILL.md +108 -0
- package/skills/ios/swiftui-pro/agents/openai.yaml +10 -0
- package/skills/ios/swiftui-pro/assets/swiftui-pro-icon.png +0 -0
- package/skills/ios/swiftui-pro/assets/swiftui-pro-icon.svg +29 -0
- package/skills/ios/swiftui-pro/references/accessibility.md +13 -0
- package/skills/ios/swiftui-pro/references/api.md +39 -0
- package/skills/ios/swiftui-pro/references/data.md +43 -0
- package/skills/ios/swiftui-pro/references/design.md +31 -0
- package/skills/ios/swiftui-pro/references/hygiene.md +9 -0
- package/skills/ios/swiftui-pro/references/navigation.md +14 -0
- package/skills/ios/swiftui-pro/references/performance.md +46 -0
- package/skills/ios/swiftui-pro/references/swift.md +56 -0
- package/skills/ios/swiftui-pro/references/views.md +35 -0
- package/skills/ios/swiftui-ui-patterns/LICENSE +21 -0
- package/skills/ios/swiftui-ui-patterns/SKILL.md +100 -0
- package/skills/ios/swiftui-ui-patterns/agents/openai.yaml +4 -0
- package/skills/ios/swiftui-ui-patterns/references/app-wiring.md +201 -0
- package/skills/ios/swiftui-ui-patterns/references/async-state.md +96 -0
- package/skills/ios/swiftui-ui-patterns/references/components-index.md +50 -0
- package/skills/ios/swiftui-ui-patterns/references/controls.md +57 -0
- package/skills/ios/swiftui-ui-patterns/references/deeplinks.md +66 -0
- package/skills/ios/swiftui-ui-patterns/references/focus.md +90 -0
- package/skills/ios/swiftui-ui-patterns/references/form.md +97 -0
- package/skills/ios/swiftui-ui-patterns/references/grids.md +71 -0
- package/skills/ios/swiftui-ui-patterns/references/haptics.md +71 -0
- package/skills/ios/swiftui-ui-patterns/references/input-toolbar.md +51 -0
- package/skills/ios/swiftui-ui-patterns/references/lightweight-clients.md +93 -0
- package/skills/ios/swiftui-ui-patterns/references/list.md +86 -0
- package/skills/ios/swiftui-ui-patterns/references/loading-placeholders.md +38 -0
- package/skills/ios/swiftui-ui-patterns/references/macos-settings.md +71 -0
- package/skills/ios/swiftui-ui-patterns/references/matched-transitions.md +59 -0
- package/skills/ios/swiftui-ui-patterns/references/media.md +73 -0
- package/skills/ios/swiftui-ui-patterns/references/menu-bar.md +101 -0
- package/skills/ios/swiftui-ui-patterns/references/navigationstack.md +159 -0
- package/skills/ios/swiftui-ui-patterns/references/overlay.md +45 -0
- package/skills/ios/swiftui-ui-patterns/references/performance.md +62 -0
- package/skills/ios/swiftui-ui-patterns/references/previews.md +48 -0
- package/skills/ios/swiftui-ui-patterns/references/scroll-reveal.md +133 -0
- package/skills/ios/swiftui-ui-patterns/references/scrollview.md +87 -0
- package/skills/ios/swiftui-ui-patterns/references/searchable.md +71 -0
- package/skills/ios/swiftui-ui-patterns/references/sheets.md +155 -0
- package/skills/ios/swiftui-ui-patterns/references/split-views.md +72 -0
- package/skills/ios/swiftui-ui-patterns/references/tabview.md +114 -0
- package/skills/ios/swiftui-ui-patterns/references/theming.md +71 -0
- package/skills/ios/swiftui-ui-patterns/references/title-menus.md +93 -0
- package/skills/ios/swiftui-ui-patterns/references/top-bar.md +49 -0
- package/skills/ios/swiftui-view-refactor/LICENSE +21 -0
- package/skills/ios/swiftui-view-refactor/SKILL.md +207 -0
- package/skills/ios/swiftui-view-refactor/agents/openai.yaml +4 -0
- package/skills/ios/swiftui-view-refactor/references/mv-patterns.md +161 -0
- package/skills/ios/widgetkit/LICENSE +131 -0
- package/skills/ios/widgetkit/SKILL.md +502 -0
- package/skills/ios/widgetkit/references/widgetkit-advanced.md +871 -0
- package/skills/ios/writing-for-interfaces/SKILL.md +75 -0
- package/skills/web/accessibility/SKILL.md +146 -0
- package/skills/web/aceternity-ui/SKILL.md +719 -0
- package/skills/web/aceternity-ui/metadata.json +10 -0
- package/skills/web/api-design/SKILL.md +523 -0
- package/skills/web/chart-accessibility/SKILL.md +332 -0
- package/skills/web/composition-patterns/AGENTS.md +946 -0
- package/skills/web/composition-patterns/README.md +60 -0
- package/skills/web/composition-patterns/SKILL.md +89 -0
- package/skills/web/composition-patterns/metadata.json +11 -0
- package/skills/web/composition-patterns/rules/_sections.md +29 -0
- package/skills/web/composition-patterns/rules/_template.md +24 -0
- package/skills/web/composition-patterns/rules/architecture-avoid-boolean-props.md +100 -0
- package/skills/web/composition-patterns/rules/architecture-compound-components.md +112 -0
- package/skills/web/composition-patterns/rules/patterns-children-over-render-props.md +87 -0
- package/skills/web/composition-patterns/rules/patterns-explicit-variants.md +100 -0
- package/skills/web/composition-patterns/rules/react19-no-forwardref.md +42 -0
- package/skills/web/composition-patterns/rules/state-context-interface.md +191 -0
- package/skills/web/composition-patterns/rules/state-decouple-implementation.md +113 -0
- package/skills/web/composition-patterns/rules/state-lift-state.md +125 -0
- package/skills/web/cost-aware-llm-pipeline/SKILL.md +183 -0
- package/skills/web/database-migrations/SKILL.md +429 -0
- package/skills/web/deployment-patterns/SKILL.md +427 -0
- package/skills/web/docker-patterns/SKILL.md +364 -0
- package/skills/web/e2e-testing/SKILL.md +326 -0
- package/skills/web/lighthouse-ci/SKILL.md +361 -0
- package/skills/web/mcp-server-patterns/SKILL.md +69 -0
- package/skills/web/next-best-practices/SKILL.md +153 -0
- package/skills/web/next-best-practices/async-patterns.md +87 -0
- package/skills/web/next-best-practices/bundling.md +180 -0
- package/skills/web/next-best-practices/data-patterns.md +297 -0
- package/skills/web/next-best-practices/debug-tricks.md +105 -0
- package/skills/web/next-best-practices/directives.md +73 -0
- package/skills/web/next-best-practices/error-handling.md +227 -0
- package/skills/web/next-best-practices/file-conventions.md +140 -0
- package/skills/web/next-best-practices/font.md +245 -0
- package/skills/web/next-best-practices/functions.md +108 -0
- package/skills/web/next-best-practices/hydration-error.md +91 -0
- package/skills/web/next-best-practices/image.md +173 -0
- package/skills/web/next-best-practices/metadata.md +301 -0
- package/skills/web/next-best-practices/parallel-routes.md +287 -0
- package/skills/web/next-best-practices/route-handlers.md +146 -0
- package/skills/web/next-best-practices/rsc-boundaries.md +159 -0
- package/skills/web/next-best-practices/runtime-selection.md +39 -0
- package/skills/web/next-best-practices/scripts.md +141 -0
- package/skills/web/next-best-practices/self-hosting.md +371 -0
- package/skills/web/next-best-practices/suspense-boundaries.md +67 -0
- package/skills/web/next-cache-components/SKILL.md +411 -0
- package/skills/web/postgres-best-practices/SKILL.md +14 -0
- package/skills/web/postgres-best-practices/references/schema-design.md +9 -0
- package/skills/web/react-best-practices/AGENTS.md +3810 -0
- package/skills/web/react-best-practices/README.md +123 -0
- package/skills/web/react-best-practices/SKILL.md +149 -0
- package/skills/web/react-best-practices/metadata.json +15 -0
- package/skills/web/react-best-practices/rules/_sections.md +46 -0
- package/skills/web/react-best-practices/rules/_template.md +28 -0
- package/skills/web/react-best-practices/rules/advanced-effect-event-deps.md +56 -0
- package/skills/web/react-best-practices/rules/advanced-event-handler-refs.md +55 -0
- package/skills/web/react-best-practices/rules/advanced-init-once.md +42 -0
- package/skills/web/react-best-practices/rules/advanced-use-latest.md +39 -0
- package/skills/web/react-best-practices/rules/async-api-routes.md +38 -0
- package/skills/web/react-best-practices/rules/async-cheap-condition-before-await.md +37 -0
- package/skills/web/react-best-practices/rules/async-defer-await.md +82 -0
- package/skills/web/react-best-practices/rules/async-dependencies.md +51 -0
- package/skills/web/react-best-practices/rules/async-parallel.md +28 -0
- package/skills/web/react-best-practices/rules/async-suspense-boundaries.md +99 -0
- package/skills/web/react-best-practices/rules/bundle-analyzable-paths.md +63 -0
- package/skills/web/react-best-practices/rules/bundle-barrel-imports.md +60 -0
- package/skills/web/react-best-practices/rules/bundle-conditional.md +31 -0
- package/skills/web/react-best-practices/rules/bundle-defer-third-party.md +49 -0
- package/skills/web/react-best-practices/rules/bundle-dynamic-imports.md +35 -0
- package/skills/web/react-best-practices/rules/bundle-preload.md +50 -0
- package/skills/web/react-best-practices/rules/client-event-listeners.md +74 -0
- package/skills/web/react-best-practices/rules/client-localstorage-schema.md +71 -0
- package/skills/web/react-best-practices/rules/client-passive-event-listeners.md +48 -0
- package/skills/web/react-best-practices/rules/client-swr-dedup.md +56 -0
- package/skills/web/react-best-practices/rules/js-batch-dom-css.md +107 -0
- package/skills/web/react-best-practices/rules/js-cache-function-results.md +80 -0
- package/skills/web/react-best-practices/rules/js-cache-property-access.md +28 -0
- package/skills/web/react-best-practices/rules/js-cache-storage.md +70 -0
- package/skills/web/react-best-practices/rules/js-combine-iterations.md +32 -0
- package/skills/web/react-best-practices/rules/js-early-exit.md +50 -0
- package/skills/web/react-best-practices/rules/js-flatmap-filter.md +60 -0
- package/skills/web/react-best-practices/rules/js-hoist-regexp.md +45 -0
- package/skills/web/react-best-practices/rules/js-index-maps.md +37 -0
- package/skills/web/react-best-practices/rules/js-length-check-first.md +49 -0
- package/skills/web/react-best-practices/rules/js-min-max-loop.md +82 -0
- package/skills/web/react-best-practices/rules/js-request-idle-callback.md +105 -0
- package/skills/web/react-best-practices/rules/js-set-map-lookups.md +24 -0
- package/skills/web/react-best-practices/rules/js-tosorted-immutable.md +57 -0
- package/skills/web/react-best-practices/rules/rendering-activity.md +26 -0
- package/skills/web/react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
- package/skills/web/react-best-practices/rules/rendering-conditional-render.md +40 -0
- package/skills/web/react-best-practices/rules/rendering-content-visibility.md +38 -0
- package/skills/web/react-best-practices/rules/rendering-hoist-jsx.md +46 -0
- package/skills/web/react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
- package/skills/web/react-best-practices/rules/rendering-hydration-suppress-warning.md +30 -0
- package/skills/web/react-best-practices/rules/rendering-resource-hints.md +85 -0
- package/skills/web/react-best-practices/rules/rendering-script-defer-async.md +68 -0
- package/skills/web/react-best-practices/rules/rendering-svg-precision.md +28 -0
- package/skills/web/react-best-practices/rules/rendering-usetransition-loading.md +75 -0
- package/skills/web/react-best-practices/rules/rerender-defer-reads.md +39 -0
- package/skills/web/react-best-practices/rules/rerender-dependencies.md +45 -0
- package/skills/web/react-best-practices/rules/rerender-derived-state-no-effect.md +40 -0
- package/skills/web/react-best-practices/rules/rerender-derived-state.md +29 -0
- package/skills/web/react-best-practices/rules/rerender-functional-setstate.md +74 -0
- package/skills/web/react-best-practices/rules/rerender-lazy-state-init.md +58 -0
- package/skills/web/react-best-practices/rules/rerender-memo-with-default-value.md +38 -0
- package/skills/web/react-best-practices/rules/rerender-memo.md +44 -0
- package/skills/web/react-best-practices/rules/rerender-move-effect-to-event.md +45 -0
- package/skills/web/react-best-practices/rules/rerender-no-inline-components.md +82 -0
- package/skills/web/react-best-practices/rules/rerender-simple-expression-in-memo.md +35 -0
- package/skills/web/react-best-practices/rules/rerender-split-combined-hooks.md +64 -0
- package/skills/web/react-best-practices/rules/rerender-transitions.md +40 -0
- package/skills/web/react-best-practices/rules/rerender-use-deferred-value.md +59 -0
- package/skills/web/react-best-practices/rules/rerender-use-ref-transient-values.md +73 -0
- package/skills/web/react-best-practices/rules/server-after-nonblocking.md +73 -0
- package/skills/web/react-best-practices/rules/server-auth-actions.md +96 -0
- package/skills/web/react-best-practices/rules/server-cache-lru.md +41 -0
- package/skills/web/react-best-practices/rules/server-cache-react.md +76 -0
- package/skills/web/react-best-practices/rules/server-dedup-props.md +65 -0
- package/skills/web/react-best-practices/rules/server-hoist-static-io.md +149 -0
- package/skills/web/react-best-practices/rules/server-no-shared-module-state.md +50 -0
- package/skills/web/react-best-practices/rules/server-parallel-fetching.md +83 -0
- package/skills/web/react-best-practices/rules/server-parallel-nested-fetching.md +34 -0
- package/skills/web/react-best-practices/rules/server-serialization.md +38 -0
- package/skills/web/seo/SKILL.md +154 -0
- package/skills/web/web-design-guidelines/SKILL.md +39 -0
- package/skills/web/zap-scan-config/SKILL.md +444 -0
- package/skills/web/zap-scan-config/assets/.gitkeep +9 -0
- package/skills/web/zap-scan-config/assets/github_action.yml +207 -0
- package/skills/web/zap-scan-config/assets/gitlab_ci.yml +226 -0
- package/skills/web/zap-scan-config/assets/zap_automation.yaml +196 -0
- package/skills/web/zap-scan-config/assets/zap_context.xml +192 -0
- package/skills/web/zap-scan-config/references/EXAMPLE.md +40 -0
- package/skills/web/zap-scan-config/references/api_testing_guide.md +475 -0
- package/skills/web/zap-scan-config/references/authentication_guide.md +431 -0
- package/skills/web/zap-scan-config/references/false_positive_handling.md +427 -0
- package/skills/web/zap-scan-config/references/owasp_mapping.md +255 -0
- package/src/lrr/aggregator.ts +80 -0
- package/src/orchestrator/hooks/context-header.ts +95 -0
- package/src/orchestrator/hooks/token-accounting-emitter.ts +77 -0
- package/src/orchestrator/hooks/token-accounting.ts +101 -0
- package/src/orchestrator/mcp/cycle-counter.ts +129 -0
- package/src/orchestrator/mcp/scribe.ts +283 -0
- package/src/orchestrator/mcp/state-save.ts +149 -0
- package/src/orchestrator/mcp/write-lease.ts +167 -0
- package/src/orchestrator/phase4-shared-context.ts +41 -0
- package/src/orchestrator/schemas/backward-edge.ts +46 -0
- package/agents/agentic-identity-trust.md +0 -121
- package/agents/data-consolidation-agent.md +0 -39
- package/agents/design-image-prompt-engineer.md +0 -105
- package/agents/design-visual-storyteller.md +0 -147
- package/agents/design-whimsy-injector.md +0 -89
- package/agents/engineering-autonomous-optimization-architect.md +0 -105
- package/agents/market-intel.md +0 -35
- package/agents/marketing-instagram-curator.md +0 -111
- package/agents/marketing-reddit-community-builder.md +0 -121
- package/agents/marketing-social-media-strategist.md +0 -74
- package/agents/marketing-tiktok-strategist.md +0 -123
- package/agents/marketing-twitter-engager.md +0 -124
- package/agents/marketing-wechat-official-account.md +0 -143
- package/agents/marketing-xiaohongshu-specialist.md +0 -136
- package/agents/marketing-zhihu-strategist.md +0 -160
- package/agents/product-behavioral-nudge-engine.md +0 -78
- package/agents/project-management-experiment-tracker.md +0 -102
- package/agents/report-distribution-agent.md +0 -43
- package/agents/risk-analysis.md +0 -45
- package/agents/sales-data-extraction-agent.md +0 -46
- package/agents/specialized-cultural-intelligence-strategist.md +0 -65
- package/agents/specialized-developer-advocate.md +0 -146
- package/agents/support-analytics-reporter.md +0 -133
- package/agents/support-executive-summary-generator.md +0 -64
- package/agents/support-finance-tracker.md +0 -145
- package/agents/support-legal-compliance-checker.md +0 -129
- package/agents/support-support-responder.md +0 -91
- package/agents/testing-accessibility-auditor.md +0 -110
- package/agents/testing-test-results-analyzer.md +0 -97
- package/agents/testing-tool-evaluator.md +0 -76
- package/agents/testing-workflow-optimizer.md +0 -99
- package/agents/user-research.md +0 -40
|
@@ -0,0 +1,277 @@
|
|
|
1
|
+
# SwiftUI 26 New APIs
|
|
2
|
+
|
|
3
|
+
**iOS 26+, iPadOS 26+, macOS Tahoe+**
|
|
4
|
+
|
|
5
|
+
## WebView & WebPage
|
|
6
|
+
|
|
7
|
+
### Basic WebView
|
|
8
|
+
```swift
|
|
9
|
+
import WebKit
|
|
10
|
+
|
|
11
|
+
struct ArticleView: View {
|
|
12
|
+
let articleURL: URL
|
|
13
|
+
|
|
14
|
+
var body: some View {
|
|
15
|
+
WebView(url: articleURL)
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
### WebPage (Observable Model)
|
|
21
|
+
```swift
|
|
22
|
+
import WebKit
|
|
23
|
+
|
|
24
|
+
struct BrowserView: View {
|
|
25
|
+
@State private var webPage = WebPage()
|
|
26
|
+
|
|
27
|
+
var body: some View {
|
|
28
|
+
VStack {
|
|
29
|
+
Text(webPage.title ?? "Loading...")
|
|
30
|
+
|
|
31
|
+
WebView(page: webPage)
|
|
32
|
+
|
|
33
|
+
HStack {
|
|
34
|
+
Button("Back") { webPage.goBack() }
|
|
35
|
+
.disabled(!webPage.canGoBack)
|
|
36
|
+
|
|
37
|
+
Button("Forward") { webPage.goForward() }
|
|
38
|
+
.disabled(!webPage.canGoForward)
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## @Animatable Macro
|
|
46
|
+
|
|
47
|
+
### Before (Manual animatableData)
|
|
48
|
+
```swift
|
|
49
|
+
struct HikingRouteShape: Shape {
|
|
50
|
+
var startPoint: CGPoint
|
|
51
|
+
var endPoint: CGPoint
|
|
52
|
+
var elevation: Double
|
|
53
|
+
|
|
54
|
+
// Tedious manual declaration
|
|
55
|
+
var animatableData: AnimatablePair<CGPoint.AnimatableData,
|
|
56
|
+
AnimatablePair<Double, CGPoint.AnimatableData>> {
|
|
57
|
+
get {
|
|
58
|
+
AnimatablePair(startPoint.animatableData,
|
|
59
|
+
AnimatablePair(elevation, endPoint.animatableData))
|
|
60
|
+
}
|
|
61
|
+
set {
|
|
62
|
+
startPoint.animatableData = newValue.first
|
|
63
|
+
elevation = newValue.second.first
|
|
64
|
+
endPoint.animatableData = newValue.second.second
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
### After (@Animatable Macro)
|
|
71
|
+
```swift
|
|
72
|
+
@Animatable
|
|
73
|
+
struct HikingRouteShape: Shape {
|
|
74
|
+
var startPoint: CGPoint
|
|
75
|
+
var endPoint: CGPoint
|
|
76
|
+
var elevation: Double
|
|
77
|
+
|
|
78
|
+
@AnimatableIgnored
|
|
79
|
+
var fillColor: Color // Excluded from animation
|
|
80
|
+
|
|
81
|
+
// animatableData automatically synthesized!
|
|
82
|
+
}
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
**Requirements**:
|
|
86
|
+
- Properties must be VectorArithmetic (Double, CGFloat, CGPoint)
|
|
87
|
+
- Use `@AnimatableIgnored` for non-animatable properties
|
|
88
|
+
|
|
89
|
+
## Chart3D
|
|
90
|
+
|
|
91
|
+
```swift
|
|
92
|
+
import Charts
|
|
93
|
+
|
|
94
|
+
struct ElevationChart: View {
|
|
95
|
+
let hikingData: [HikeDataPoint]
|
|
96
|
+
|
|
97
|
+
var body: some View {
|
|
98
|
+
Chart3D {
|
|
99
|
+
ForEach(hikingData) { point in
|
|
100
|
+
LineMark3D(
|
|
101
|
+
x: .value("Distance", point.distance),
|
|
102
|
+
y: .value("Elevation", point.elevation),
|
|
103
|
+
z: .value("Time", point.timestamp)
|
|
104
|
+
)
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
.chartXScale(domain: 0...10)
|
|
108
|
+
.chartYScale(domain: 0...3000)
|
|
109
|
+
.chartZScale(domain: startTime...endTime)
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
## TextEditor with AttributedString
|
|
115
|
+
|
|
116
|
+
```swift
|
|
117
|
+
struct CommentView: View {
|
|
118
|
+
@State private var comment = AttributedString("Enter your comment")
|
|
119
|
+
|
|
120
|
+
var body: some View {
|
|
121
|
+
TextEditor(text: $comment)
|
|
122
|
+
// Built-in formatting controls (bold, italic, etc.)
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
**Features**:
|
|
128
|
+
- Binding to `AttributedString` preserves formatting
|
|
129
|
+
- Automatic toolbar with formatting options
|
|
130
|
+
- Customizable paragraph styles and attribute constraints
|
|
131
|
+
|
|
132
|
+
## New View Modifiers
|
|
133
|
+
|
|
134
|
+
### sliderThumbVisibility
|
|
135
|
+
```swift
|
|
136
|
+
Slider(value: $progress)
|
|
137
|
+
.sliderThumbVisibility(.hidden)
|
|
138
|
+
// For media players, progress indicators
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
### safeAreaBar
|
|
142
|
+
```swift
|
|
143
|
+
List { ... }
|
|
144
|
+
.safeAreaBar(edge: .bottom) {
|
|
145
|
+
Text("Bottom Action Bar")
|
|
146
|
+
.padding(.vertical, 15)
|
|
147
|
+
}
|
|
148
|
+
.scrollEdgeEffectStyle(.soft, for: .bottom)
|
|
149
|
+
// Sticky bars with progressive blur
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
### In-App URL Opening
|
|
153
|
+
```swift
|
|
154
|
+
@Environment(\.openURL) var openURL
|
|
155
|
+
|
|
156
|
+
Button("Open In-App") {
|
|
157
|
+
openURL(website, prefersInApp: true) // SFSafariViewController style
|
|
158
|
+
}
|
|
159
|
+
// Default Link opens in Safari app
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
### Button Roles
|
|
163
|
+
```swift
|
|
164
|
+
Button(role: .close) {
|
|
165
|
+
showSheet = false
|
|
166
|
+
}
|
|
167
|
+
// Renders as X icon with glass effect in toolbars
|
|
168
|
+
|
|
169
|
+
Button(role: .confirm) {
|
|
170
|
+
confirmAction()
|
|
171
|
+
}
|
|
172
|
+
// System-styled confirmation button
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
### GlassButtonStyle (iOS 26.1+)
|
|
176
|
+
```swift
|
|
177
|
+
Button("Clear Glass") { }
|
|
178
|
+
.buttonStyle(GlassButtonStyle(.clear))
|
|
179
|
+
|
|
180
|
+
Button("Regular Glass") { }
|
|
181
|
+
.buttonStyle(GlassButtonStyle(.glass))
|
|
182
|
+
|
|
183
|
+
Button("Tinted Glass") { }
|
|
184
|
+
.buttonStyle(GlassButtonStyle(.tint))
|
|
185
|
+
.tint(.blue)
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
### buttonSizing
|
|
189
|
+
```swift
|
|
190
|
+
Button("Fit") { }
|
|
191
|
+
.buttonSizing(.fit) // Shrinks to label
|
|
192
|
+
|
|
193
|
+
Button("Stretch") { }
|
|
194
|
+
.buttonSizing(.stretch) // Fills available width
|
|
195
|
+
|
|
196
|
+
Button("Flexible") { }
|
|
197
|
+
.buttonSizing(.flexible) // Balanced
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
## Drag and Drop Enhancements
|
|
201
|
+
|
|
202
|
+
```swift
|
|
203
|
+
struct PhotoGrid: View {
|
|
204
|
+
@State private var selection: Set<Photo.ID> = []
|
|
205
|
+
let photos: [Photo]
|
|
206
|
+
|
|
207
|
+
var body: some View {
|
|
208
|
+
LazyVGrid(columns: columns) {
|
|
209
|
+
ForEach(photos) { photo in
|
|
210
|
+
PhotoCell(photo: photo)
|
|
211
|
+
.draggable(photo)
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
.dragContainer {
|
|
215
|
+
// Return selected items
|
|
216
|
+
selection.compactMap { id in
|
|
217
|
+
photos.first { $0.id == id }
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
.dragConfiguration(.init(supportedOperations: [.copy, .delete]))
|
|
221
|
+
.dragPreviewFormation(.stack)
|
|
222
|
+
.onDragSessionUpdated { session in
|
|
223
|
+
if case .ended(.delete) = session.phase {
|
|
224
|
+
deleteSelectedPhotos()
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
## visionOS Spatial Layout
|
|
232
|
+
|
|
233
|
+
### Alignment3D
|
|
234
|
+
```swift
|
|
235
|
+
HikingRouteView()
|
|
236
|
+
.overlay(alignment: sunAlignment) {
|
|
237
|
+
SunView()
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
var sunAlignment: Alignment3D {
|
|
241
|
+
Alignment3D(horizontal: .center, vertical: .top, depth: .back)
|
|
242
|
+
}
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
### Manipulable Objects
|
|
246
|
+
```swift
|
|
247
|
+
Model3D(named: "WaterBottle")
|
|
248
|
+
.manipulable() // Users can pick up and move
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
### Scene Snapping
|
|
252
|
+
```swift
|
|
253
|
+
@Environment(\.sceneSnapping) var sceneSnapping
|
|
254
|
+
|
|
255
|
+
var body: some View {
|
|
256
|
+
Model3D(named: item.modelName)
|
|
257
|
+
.overlay(alignment: .bottom) {
|
|
258
|
+
if sceneSnapping.isSnapped {
|
|
259
|
+
Pedestal()
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
```
|
|
264
|
+
|
|
265
|
+
## GlassEffectContainer
|
|
266
|
+
|
|
267
|
+
```swift
|
|
268
|
+
// Optimize multiple glass effects
|
|
269
|
+
GlassEffectContainer {
|
|
270
|
+
HStack {
|
|
271
|
+
Button("Action 1") { }.glassEffect()
|
|
272
|
+
Button("Action 2") { }.glassEffect()
|
|
273
|
+
Button("Action 3") { }.glassEffect()
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
// Benefits: Performance optimization, fluid morphing between shapes
|
|
277
|
+
```
|
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
# Toolbar & Navigation
|
|
2
|
+
|
|
3
|
+
**iOS 26+**
|
|
4
|
+
|
|
5
|
+
## Toolbar Spacer API
|
|
6
|
+
|
|
7
|
+
### Separate Button Groups
|
|
8
|
+
```swift
|
|
9
|
+
.toolbar {
|
|
10
|
+
ToolbarItemGroup(placement: .topBarTrailing) {
|
|
11
|
+
// Navigation group
|
|
12
|
+
Button("Up") { }
|
|
13
|
+
Button("Down") { }
|
|
14
|
+
|
|
15
|
+
Spacer(.fixed) // Separates groups visually
|
|
16
|
+
|
|
17
|
+
// Action group
|
|
18
|
+
Button("Settings") { }
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
**Visual Effect**: Items within group share Liquid Glass background. `.fixed` creates clear separation.
|
|
24
|
+
|
|
25
|
+
### Flexible Spacer
|
|
26
|
+
```swift
|
|
27
|
+
.toolbar {
|
|
28
|
+
ToolbarSpacer(.flexible, placement: .topBarTrailing)
|
|
29
|
+
|
|
30
|
+
ToolbarItem(placement: .topBarTrailing) {
|
|
31
|
+
Button(role: .close) {
|
|
32
|
+
dismiss()
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## Prominent Toolbar Buttons
|
|
39
|
+
|
|
40
|
+
```swift
|
|
41
|
+
.toolbar {
|
|
42
|
+
ToolbarItem(placement: .topBarTrailing) {
|
|
43
|
+
Button("Add Trip") {
|
|
44
|
+
addTrip()
|
|
45
|
+
}
|
|
46
|
+
.buttonStyle(.borderedProminent)
|
|
47
|
+
.tint(.blue) // Tinting works with Liquid Glass
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
**Best Practice**: Use for primary actions. Don't over-tint.
|
|
53
|
+
|
|
54
|
+
## Close & Confirm Buttons
|
|
55
|
+
|
|
56
|
+
```swift
|
|
57
|
+
.sheet(isPresented: $showSheet) {
|
|
58
|
+
NavigationStack {
|
|
59
|
+
VStack { }
|
|
60
|
+
.navigationTitle("Info")
|
|
61
|
+
.toolbar {
|
|
62
|
+
ToolbarSpacer(.flexible, placement: .topBarTrailing)
|
|
63
|
+
|
|
64
|
+
ToolbarItem(placement: .topBarTrailing) {
|
|
65
|
+
Button(role: .close) { // X icon with glass
|
|
66
|
+
showSheet = false
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
.presentationDetents([.medium])
|
|
72
|
+
}
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
## Search Placement
|
|
76
|
+
|
|
77
|
+
### Automatic Platform Placement
|
|
78
|
+
```swift
|
|
79
|
+
NavigationSplitView {
|
|
80
|
+
List { }
|
|
81
|
+
.searchable(text: $searchText)
|
|
82
|
+
}
|
|
83
|
+
// iPhone: Bottom-aligned (ergonomic)
|
|
84
|
+
// iPad: Top trailing corner
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
### Search Tab Role
|
|
88
|
+
```swift
|
|
89
|
+
TabView {
|
|
90
|
+
SearchView()
|
|
91
|
+
.tabItem { Label("Search", systemImage: "magnifyingglass") }
|
|
92
|
+
.tabRole(.search) // Separated, morphs into search field
|
|
93
|
+
|
|
94
|
+
TripsView()
|
|
95
|
+
.tabItem { Label("Trips", systemImage: "map") }
|
|
96
|
+
}
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
### Compact Search Toolbar
|
|
100
|
+
```swift
|
|
101
|
+
List { ... }
|
|
102
|
+
.navigationTitle("Search Users")
|
|
103
|
+
.searchable(text: $searchText)
|
|
104
|
+
.searchToolbarBehavior(.minimize) // Compact when unfocused
|
|
105
|
+
.toolbar {
|
|
106
|
+
ToolbarSpacer(.flexible, placement: .bottomBar)
|
|
107
|
+
DefaultToolbarItem(kind: .search, placement: .bottomBar)
|
|
108
|
+
}
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
### Prevent Title Hiding (iOS 17.1+)
|
|
112
|
+
```swift
|
|
113
|
+
.searchable(text: $searchText)
|
|
114
|
+
.searchPresentationToolbarBehavior(.avoidHidingContent)
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
## Tab Bar Adaptations
|
|
118
|
+
|
|
119
|
+
### Sidebar Adaptable
|
|
120
|
+
```swift
|
|
121
|
+
TabView {
|
|
122
|
+
ContentView()
|
|
123
|
+
.tabItem { Label("Home", systemImage: "house") }
|
|
124
|
+
}
|
|
125
|
+
.tabViewStyle(.sidebarAdaptable)
|
|
126
|
+
// iPad: Can switch to sidebar
|
|
127
|
+
// iPhone: Remains tab bar
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
### Tab Bar Minimization
|
|
131
|
+
```swift
|
|
132
|
+
TabView { ... }
|
|
133
|
+
.tabBarMinimizationBehavior(.onScrollDown)
|
|
134
|
+
// .onScrollDown - Minimize when scrolling down
|
|
135
|
+
// .onScrollUp - Minimize when scrolling up
|
|
136
|
+
// .automatic - System decides
|
|
137
|
+
// .never - Always visible
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
## Navigation Hierarchy
|
|
141
|
+
|
|
142
|
+
### Clear Layer Separation
|
|
143
|
+
```
|
|
144
|
+
Navigation Layer (Liquid Glass)
|
|
145
|
+
├── Tab bar
|
|
146
|
+
├── Navigation bar
|
|
147
|
+
├── Toolbar
|
|
148
|
+
└── Floating controls
|
|
149
|
+
|
|
150
|
+
Content Layer (No Glass)
|
|
151
|
+
└── Lists, tables, images, text
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
### Split Views
|
|
155
|
+
```swift
|
|
156
|
+
NavigationSplitView {
|
|
157
|
+
// Sidebar (gets glass automatically)
|
|
158
|
+
List(folders, selection: $selectedFolder) {
|
|
159
|
+
Label($0.name, systemImage: $0.icon)
|
|
160
|
+
}
|
|
161
|
+
} content: {
|
|
162
|
+
// Main content
|
|
163
|
+
List(items, selection: $selectedItem) { ... }
|
|
164
|
+
} detail: {
|
|
165
|
+
// Inspector
|
|
166
|
+
InspectorView(item: selectedItem)
|
|
167
|
+
}
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
## Menus
|
|
171
|
+
|
|
172
|
+
### Standard Actions Get Icons Automatically
|
|
173
|
+
```swift
|
|
174
|
+
Menu("Actions") {
|
|
175
|
+
Button(action: cut) { Text("Cut") } // Gets scissors icon
|
|
176
|
+
Button(action: copy) { Text("Copy") } // Gets documents icon
|
|
177
|
+
Button(action: paste) { Text("Paste") } // Gets clipboard icon
|
|
178
|
+
}
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
### Match Swipe and Context Menu Actions
|
|
182
|
+
```swift
|
|
183
|
+
List(emails) { email in
|
|
184
|
+
EmailRow(email)
|
|
185
|
+
.swipeActions(edge: .trailing) {
|
|
186
|
+
Button("Delete", systemImage: "trash", role: .destructive) {
|
|
187
|
+
delete(email)
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
.contextMenu {
|
|
191
|
+
// Same actions at top of menu
|
|
192
|
+
Button("Delete", systemImage: "trash", role: .destructive) {
|
|
193
|
+
delete(email)
|
|
194
|
+
}
|
|
195
|
+
Divider()
|
|
196
|
+
// Additional actions below
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
## iPad Menu Bar
|
|
202
|
+
|
|
203
|
+
```swift
|
|
204
|
+
.commands {
|
|
205
|
+
TextEditingCommands()
|
|
206
|
+
|
|
207
|
+
CommandGroup(after: .newItem) {
|
|
208
|
+
Button("Add Note") {
|
|
209
|
+
addNote()
|
|
210
|
+
}
|
|
211
|
+
.keyboardShortcut("n", modifiers: [.command, .shift])
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
// Creates menu bar on iPad via swipe down
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
## Icons vs Text in Toolbars
|
|
218
|
+
|
|
219
|
+
### Consistent Style Per Group
|
|
220
|
+
```swift
|
|
221
|
+
// Correct: All icons in group
|
|
222
|
+
.toolbar {
|
|
223
|
+
ToolbarItemGroup {
|
|
224
|
+
Button { share() } label: {
|
|
225
|
+
Image(systemName: "square.and.arrow.up")
|
|
226
|
+
}
|
|
227
|
+
Button { save() } label: {
|
|
228
|
+
Image(systemName: "square.and.arrow.down")
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
// Wrong: Mixed icons and text
|
|
234
|
+
.toolbar {
|
|
235
|
+
ToolbarItemGroup {
|
|
236
|
+
Button("Save") { } // Text
|
|
237
|
+
Button { } label: { Image(systemName: "...") } // Icon
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
### Accessibility Labels Required
|
|
243
|
+
```swift
|
|
244
|
+
Button {
|
|
245
|
+
share()
|
|
246
|
+
} label: {
|
|
247
|
+
Image(systemName: "square.and.arrow.up")
|
|
248
|
+
}
|
|
249
|
+
.accessibilityLabel("Share")
|
|
250
|
+
```
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ios-bootstrap
|
|
3
|
+
description: Bootstraps a new iOS project — gates Xcode 26.3, guides the Xcode New Project dialog, wires XcodeBuildMCP + apple-docs-mcp, installs Maestro. Use when project_type=ios and no .xcodeproj exists in the project root.
|
|
4
|
+
version: 0.2.0
|
|
5
|
+
status: ready
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# iOS Bootstrap (Phase -1)
|
|
9
|
+
|
|
10
|
+
## Purpose
|
|
11
|
+
Phase -1 bring-up for a fresh iOS project. Enforces the Xcode 26.3 hard requirement, walks the user through Xcode's New Project dialog (no Tuist), and wires the MCP + CLI tooling stack the rest of the iOS workflow depends on.
|
|
12
|
+
|
|
13
|
+
## When this fires
|
|
14
|
+
- `project_type=ios` AND no `.xcodeproj` / `.xcworkspace` at project root
|
|
15
|
+
- User explicitly invokes `/build` iOS branch on an empty directory
|
|
16
|
+
- First-run provisioning for an iOS mode session
|
|
17
|
+
|
|
18
|
+
## Inputs
|
|
19
|
+
- `app_name` (string)
|
|
20
|
+
- `bundle_id_prefix` (string, e.g. `com.acme`)
|
|
21
|
+
- `team_id` (string, optional — Apple Developer team ID)
|
|
22
|
+
- `deployment_target` (string, default `iOS 26.0`)
|
|
23
|
+
- `ship_to_device` (bool, default false — skip signing if simulator-only)
|
|
24
|
+
|
|
25
|
+
## Outputs
|
|
26
|
+
- `.xcodeproj` created by Xcode (user-assisted via dialog)
|
|
27
|
+
- `docs/plans/` and `maestro/` directories created
|
|
28
|
+
- MCP config updated with XcodeBuildMCP + apple-docs-mcp
|
|
29
|
+
- Maestro installed via Homebrew and on PATH
|
|
30
|
+
- `.build-state.md` seeded with toolchain versions
|
|
31
|
+
|
|
32
|
+
## Workflow
|
|
33
|
+
|
|
34
|
+
### 1. Xcode version gate (blocking)
|
|
35
|
+
Run `xcodebuild -version`. Parse the first line (`Xcode <version>`). Require `Xcode 26.3` or later.
|
|
36
|
+
If missing or older: fail with `"Install Xcode 26.3 from the Mac App Store, then run xcode-select -s /Applications/Xcode.app"`. Do not proceed.
|
|
37
|
+
|
|
38
|
+
### 2. Host environment check
|
|
39
|
+
- `sw_vers -productVersion` — require macOS 26.0+ (Tahoe). Warn if older; Xcode 26.3 may still run but is unsupported.
|
|
40
|
+
- `uname -m` — require `arm64` (Apple Silicon). Intel Macs are not a supported dev host for iOS 26 SDKs.
|
|
41
|
+
|
|
42
|
+
### 3. Create project directory structure
|
|
43
|
+
From project root, create:
|
|
44
|
+
- `docs/plans/` — holds `.build-state.md`, `ios-design-board.md`, task lists
|
|
45
|
+
- `maestro/` — canonical name for Maestro YAML flows
|
|
46
|
+
|
|
47
|
+
### 4. User-assisted Xcode New Project dialog
|
|
48
|
+
Instruct the user to run `open -a Xcode` then **File → New → Project** (`⇧⌘N`). Exact selections:
|
|
49
|
+
|
|
50
|
+
| Step | Choice |
|
|
51
|
+
|---|---|
|
|
52
|
+
| Platform tab | **iOS** |
|
|
53
|
+
| Template | **App** |
|
|
54
|
+
| Product Name | `{app_name}` |
|
|
55
|
+
| Team | user's default (or None for sim-only) |
|
|
56
|
+
| Organization Identifier | `{bundle_id_prefix}` (becomes `{bundle_id_prefix}.{app_name}`) |
|
|
57
|
+
| Interface | **SwiftUI** |
|
|
58
|
+
| Language | **Swift** |
|
|
59
|
+
| Storage | **SwiftData** |
|
|
60
|
+
| Include Tests | **checked** |
|
|
61
|
+
| Save location | project root (do NOT create a nested git repo) |
|
|
62
|
+
|
|
63
|
+
See `references/new-project-dialog.md` for the full click path.
|
|
64
|
+
|
|
65
|
+
### 5. Wire XcodeBuildMCP
|
|
66
|
+
Run `claude mcp list` and check for an `xcodebuildmcp` entry. If absent:
|
|
67
|
+
```bash
|
|
68
|
+
claude mcp add xcodebuildmcp -- npx -y xcodebuildmcp@latest
|
|
69
|
+
```
|
|
70
|
+
If the command succeeds, record `configured`. If it fails, fall back to showing the user the JSON snippet from `references/xcode-mcp-config.md` for manual addition. Either way, a Claude Code restart is required for the MCP to load — tell the user.
|
|
71
|
+
|
|
72
|
+
### 6. Wire apple-docs-mcp
|
|
73
|
+
Run `claude mcp list` and check for an `apple-docs` entry. If absent:
|
|
74
|
+
```bash
|
|
75
|
+
claude mcp add apple-docs -- npx -y apple-docs-mcp@latest
|
|
76
|
+
```
|
|
77
|
+
Same fallback and restart note as Step 5.
|
|
78
|
+
|
|
79
|
+
### 7. Install Maestro
|
|
80
|
+
```bash
|
|
81
|
+
which maestro || brew install maestro
|
|
82
|
+
maestro --version # verify — expect 1.x
|
|
83
|
+
```
|
|
84
|
+
If `brew` missing: halt and instruct user to install Homebrew (`brew.sh`) first, then `brew install maestro`.
|
|
85
|
+
|
|
86
|
+
### 8. Signing defaults (conditional)
|
|
87
|
+
If `ship_to_device=true`: prompt user for Team ID, write to project's `.xcconfig` or target build settings via XcodeBuildMCP. If `false` (simulator-only): skip — user can add signing later.
|
|
88
|
+
|
|
89
|
+
### 9. Deferred (do NOT install here)
|
|
90
|
+
- **fastlane** — Phase 7 only (distribution). Skip.
|
|
91
|
+
- **Optional Apple Developer account check** — only runs if `ship_to_device=true`.
|
|
92
|
+
|
|
93
|
+
## Handoff checklist
|
|
94
|
+
- [ ] `xcodebuild -version` ≥ 26.3
|
|
95
|
+
- [ ] `.xcodeproj` exists at root, opens in Xcode, builds clean for simulator
|
|
96
|
+
- [ ] `docs/plans/` and `maestro/` present
|
|
97
|
+
- [ ] `maestro --version` prints a version
|
|
98
|
+
- [ ] `claude mcp list` shows `xcodebuildmcp` and `apple-docs`
|
|
99
|
+
- [ ] Claude Code restarted (MCPs load on restart)
|
|
100
|
+
|
|
101
|
+
## References
|
|
102
|
+
- `references/xcode-mcp-config.md` — fallback JSON snippet if `claude mcp add` fails
|
|
103
|
+
- `references/apple-docs-mcp-config.md` — fallback JSON snippet if `claude mcp add` fails
|
|
104
|
+
- `references/new-project-dialog.md` — exact Xcode click path
|
|
105
|
+
|
|
106
|
+
---
|
|
107
|
+
_Part of buildanything iOS mode. See `protocols/ios-context.md` for Senior iOS Engineer persona._
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# apple-docs-mcp — MCP config snippet
|
|
2
|
+
|
|
3
|
+
Add under `mcpServers` in `~/.claude.json` or `./.mcp.json`:
|
|
4
|
+
|
|
5
|
+
```json
|
|
6
|
+
{
|
|
7
|
+
"mcpServers": {
|
|
8
|
+
"apple-docs": {
|
|
9
|
+
"command": "npx",
|
|
10
|
+
"args": ["-y", "apple-docs-mcp@latest"]
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
## What it gives you
|
|
17
|
+
- Live query against developer.apple.com/documentation
|
|
18
|
+
- Framework → symbol lookup (protocols, methods, availability annotations)
|
|
19
|
+
- Deprecation flags and iOS-version gating
|
|
20
|
+
- Sample-code snippets for specific APIs
|
|
21
|
+
|
|
22
|
+
## When to use it
|
|
23
|
+
- Before writing any non-trivial iOS code, confirm the current API (especially for iOS 26 additions: FoundationModels, AlarmKit, SwiftUI `WebView`, Visual Intelligence).
|
|
24
|
+
- Whenever a symbol triggers a deprecation warning — find the replacement.
|
|
25
|
+
- When `ios-frameworks-map.md` is ambiguous about which framework covers a capability.
|
|
26
|
+
|
|
27
|
+
## Verification
|
|
28
|
+
After restarting Claude Code, confirm tools prefixed `mcp__apple-docs__` appear.
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# Xcode 26.3 — New Project Dialog click path
|
|
2
|
+
|
|
3
|
+
## Launch
|
|
4
|
+
- `open -a Xcode` (or click Xcode in /Applications)
|
|
5
|
+
- Menu: **File → New → Project…** (`⇧⌘N`)
|
|
6
|
+
|
|
7
|
+
## Dialog screens
|
|
8
|
+
|
|
9
|
+
### Screen 1 — Choose a template
|
|
10
|
+
- Platform tabs at top: select **iOS**
|
|
11
|
+
- Template grid: select **App**
|
|
12
|
+
- Click **Next**
|
|
13
|
+
|
|
14
|
+
### Screen 2 — Choose options
|
|
15
|
+
| Field | Value |
|
|
16
|
+
|---|---|
|
|
17
|
+
| Product Name | `{app_name}` (e.g. `HabitForge`) |
|
|
18
|
+
| Team | your Apple Developer team (or **None** for simulator-only) |
|
|
19
|
+
| Organization Identifier | `{bundle_id_prefix}` (e.g. `com.acme`) |
|
|
20
|
+
| Bundle Identifier | auto-populated: `{bundle_id_prefix}.{app_name}` |
|
|
21
|
+
| Interface | **SwiftUI** |
|
|
22
|
+
| Language | **Swift** |
|
|
23
|
+
| Storage | **SwiftData** |
|
|
24
|
+
| Include Tests | **checked** |
|
|
25
|
+
|
|
26
|
+
Click **Next**.
|
|
27
|
+
|
|
28
|
+
### Screen 3 — Save location
|
|
29
|
+
- Navigate to the project root directory (NOT a subdirectory).
|
|
30
|
+
- **Uncheck** "Create Git repository on my Mac" if a git repo already exists at the root (avoid nested repos).
|
|
31
|
+
- Click **Create**.
|
|
32
|
+
|
|
33
|
+
## Verification after creation
|
|
34
|
+
- `.xcodeproj` bundle is at project root
|
|
35
|
+
- `⌘B` builds clean with no errors
|
|
36
|
+
- `⌘R` launches the default "Hello, world!" SwiftUI view in a booted simulator
|
|
37
|
+
|
|
38
|
+
## Common pitfalls
|
|
39
|
+
- Choosing UIKit storyboard template by mistake — re-do, the iOS mode assumes SwiftUI lifecycle.
|
|
40
|
+
- Saving into a nested folder — breaks downstream path assumptions in MCP tools.
|
|
41
|
+
- Selecting CoreData instead of SwiftData — iOS 26 default is SwiftData; CoreData is legacy.
|