Build, sign, and deploy iOS/macOS apps using Zed Editor and CLI-only workflows without Xcode UI. Use when: (1) Setting up a new iOS/macOS project with XcodeGen, (2) Configuring secure credential management via xcconfig files, (3) Setting up Zed Editor with Swift LSP, (4) Building/deploying to physical devices via CLI, (5) Creating CI/CD pipelines for Apple apps, (6) Troubleshooting CLI build issues. Covers XcodeGen, xcode-build-server, justfile commands, devicectl, and GitHub Actions scaffolding following 2026 best practices.
Build iOS/macOS apps without Xcode UI using XcodeGen, justfile, and Zed Editor.
# Install tools
brew install xcodegen just xcode-build-server
# Generate Xcode project from project.yml
cd Apps/MyApp && xcodegen generate
Use xcconfig files to keep Team ID out of git. See references/credentials.md.
Apps/MyApp/Configs/
├── Project.xcconfig # Committed (loads local + defaults)
├── Project.local.xcconfig # Gitignored (your Team ID)
└── Project.local.xcconfig.example # Committed template
Quick setup (auto-detects Team ID from keychain):
just ios::setup-credentials
Generate buildServer.json for code completion. See references/zed-setup.md.
just ios::setup-lsp
# Or manually:
xcode-build-server config -project Apps/MyApp/MyApp.xcodeproj -scheme MyApp
Simulator:
just ios::build # Build for simulator
just ios::run # Build + install + launch
Physical Device (iOS 17+):
just ios::device-deploy # Build + install + launch on iPhone
See references/justfile.md for all commands.
GitHub Actions scaffold at .github/workflows/ios-build.yml.disabled. See references/ci-cd.md.
| File | Purpose |
|------|---------|
| project.yml | XcodeGen project definition |
| Configs/Project.xcconfig | Base build settings (committed) |
| Configs/Project.local.xcconfig | Credentials (gitignored) |
| buildServer.json | LSP configuration (gitignored) |
| justfile or ios.just | Build commands |
# Credentials
*.local.xcconfig
!*.local.xcconfig.example
# Editor integration
buildServer.json
# XcodeGen output
*.xcodeproj/
Copy from assets/templates/ when bootstrapping:
Project.xcconfig - Base xcconfig (committed)Project.local.xcconfig.example - Credential template (committed)project.yml - XcodeGen project definitionios.just - Justfile module for iOS commandsios-build.yml.disabled - GitHub Actions scaffold"Unable to find module dependency" in CLI builds: Disable hardened runtime during development:
# project.yml
settings:
base:
ENABLE_HARDENED_RUNTIME: NO
ENABLE_ENHANCED_SECURITY: NO
No code completion in Zed:
Regenerate after building: just ios::setup-lsp
Device install fails:
Ensure device is trusted and connected: just ios::devices
Search for places (restaurants, cafes, etc.) via Google Places API proxy on localhost.
Interact with GitHub using the `gh` CLI. Use `gh issue`, `gh pr`, `gh run`, and `gh api` for issues, PRs, CI runs, and advanced queries.
Create or update AgentSkills. Use when designing, structuring, or packaging skills with scripts, references, and assets.
Start voice calls via the OpenClaw voice-call plugin.
Notion API for creating and managing pages, databases, and blocks.
Gemini CLI for one-shot Q&A, summaries, and generation.
Category:developer