feature/darwin-platforms-extension
Apple Platform Overlay
This directory contains hand-authored files for the Apple platform targets
(tvOS, watchOS, visionOS) and the Tuist project configuration. It lives
outside gen/apple/ so it survives rm -rf gen/apple && cargo tauri ios init.
Directory Layout
apple/
├── bootstrap.sh ← copies everything into gen/apple/
├── README.md ← you are here
├── Project.swift ← Tuist project manifest (source of truth)
├── Tuist.swift ← Tuist configuration
├── mise.toml ← pins the Tuist version
├── apple.gitignore ← becomes gen/apple/.gitignore
├── tauri-app_tvOS/
│ ├── App.swift
│ └── Info.plist
├── tauri-app_watchOS/
│ ├── App.swift
│ ├── Info.plist
│ └── Assets.xcassets/ ← watchOS-specific app icon
└── tauri-app_visionOS/
├── App.swift
└── Info.plist
Workflow
The full setup from a clean state:
# 1. Tauri scaffolds gen/apple/ (Sources, Assets, iOS target, etc.)
cargo tauri ios init
# 2. Overlay our Apple platform targets + Tuist config into gen/apple/
./src-tauri/apple/bootstrap.sh
# 3. Install pinned Tuist via mise
cd src-tauri/gen/apple
mise install
# 4. Generate the Xcode project from Project.swift
tuist generate --no-open
After this, open gen/apple/tauri-app.xcworkspace in Xcode.
Idempotency
This workflow is idempotent. You can run it any number of times:
rm -rf src-tauri/gen/apple
cargo tauri ios init
./src-tauri/apple/bootstrap.sh
cd src-tauri/gen/apple && tuist generate --no-open
gen/apple/ is fully git-ignored. The source of truth is:
| What | Where |
|---|---|
| iOS scaffold (Sources, assets, Info.plist) | cargo tauri ios init (from tauri.conf.json) |
| Tuist manifest + Apple platform targets | src-tauri/apple/ (this directory) |
| Xcode project | tuist generate (from Project.swift) |
Editing
To change tvOS / watchOS / visionOS targets or Tuist config:
edit the files in this apple/ directory, then re-run bootstrap.sh.
To change the iOS target or Tauri build settings:
edit tauri.conf.json and re-run cargo tauri ios init + bootstrap.sh.
Never edit files directly inside gen/apple/ — they will be overwritten
on the next scaffold or bootstrap.