Anvil is a macOS app built with SwiftUI and modular local Swift packages. This repo is app-first: the primary development entry point is Anvil.xcodeproj, not the repo folder and not a root Swift package workspace.
- Canonical execution roadmap:
ROADMAP_NATIVE_2026.md - UI implementation governance:
UI_IMPLEMENTATION_GOVERNANCE.md - Mac UI direction:
MAC_UI_DIRECTION.md - Shell vocabulary north star:
ARCHITECTURE/SHELL_VOCABULARY.md - Shell standardization backlog:
ARCHITECTURE/SHELL_STANDARDIZATION_TASKS.md - Whole-app truth matrix:
TRUTH_MATRIX.md - Shell model:
ARCHITECTURE/UX_SHELL.md - Provider model:
ARCHITECTURE/PROVIDER_MODEL.md - Native UI PR checklist:
docs/pr-checklists/native-ui.md - Feature completeness PR checklist:
docs/pr-checklists/feature-completeness.md - Older audit/task docs are historical snapshots only and may contain stale completion claims.
xcode-select -p
xcodegen --version
cd /Users/allie/Develop/anvil
./scripts/devThat will:
- Generate
Anvil.xcodeprojfromproject.yml - Open the project in Xcode
- Open
Anvil.xcodeproj - Select the
Anvilscheme - Press
Cmd-R
Do not open the repo root in Xcode. If Xcode opens the folder as a Swift package workspace, you are in the wrong entry point and app lifecycle behavior will be wrong.
project.ymlis the source of truth for the macOS app project.Anvil.xcodeprojis committed soCmd-Rworks immediately for contributors.Packages/*contains the modular Swift packages used by the app.- There is intentionally no root
Package.swift, because a root package manifest causes Xcode to treat the repo like a package workspace when you open the folder. - UI and feature work are governed by the docs above. If a visible control, shortcut, sidebar row, or command is not in
TRUTH_MATRIX.md, it should not ship.
Generate or refresh the project:
./scripts/dev --generate-onlyOpen the project:
open Anvil.xcodeprojBuild the app from the command line:
xcodebuild -project Anvil.xcodeproj -scheme Anvil -derivedDataPath /tmp/anvil-derived buildRun deterministic UI-test scenarios and visual screenshots with:
ANVIL_UITEST_SCENARIO=review-diff xcodebuild -project Anvil.xcodeproj -scheme Anvil -derivedDataPath /tmp/anvil-derived buildSupported seed scenarios live in Packages/AnvilUI/Sources/App/UITestScenario.swift.
Run package tests across all local packages:
./scripts/test-packagesApp/macOS app target sources, assets, and plistPackages/local Swift packagesTests/UITests/macOS UI tests for the app targetproject.ymlXcodeGen source for the app projectAnvil.xcodeprojgenerated Xcode project committed for normal app development
- Xcode 16+
- Swift 6+
- XcodeGen 2.40+
If Xcode or Swift look outdated in Terminal, make sure the active developer directory points to full Xcode:
sudo xcode-select -s /Applications/Xcode.app/Contents/Developer