- Explicit command config used with
--config - Project settings config stored in
.flowdeck/config.jsonor.flowdeck/config.local.json
--config for reproducible command invocations in CI, scripts, and one-off runs.
Use the project settings files for shared project defaults and per-scheme overrides inside a repository.
Today, explicit
--config remains the clearest way to drive a full build, run, or test invocation from the CLI. The project settings files are the canonical shared on-disk format, while legacy sidecar files remain supported for compatibility in current runtime paths.Explicit Command Config (--config)
Explicit Command Config Structure
Explicit Command Config Field Reference
Explicit Command Config Target Resolution Priority
When determining the build target, FlowDeck uses this priority order:deviceUdid- Physical device (if specified and connected)simulatorUdid- Exact simulator by UDIDplatform+version- Auto-resolve best matching simulatorplatform: "macOS"- Native Mac build (no simulator needed)
Explicit Command Config Examples
Minimal iOS Configuration
Minimal iOS Configuration
macOS Native Build
macOS Native Build
Physical Device Build
Physical Device Build
flowdeck device list --json.Specific Simulator Version
Specific Simulator Version
CI Release Build
CI Release Build
watchOS Build
watchOS Build
visionOS Build
visionOS Build
Project Settings Files
Project settings files are the shared on-disk format for project-level defaults:.flowdeck/config.json— shared team config, usually committed.flowdeck/config.local.json— per-user local override, usually gitignored
config.local.json exists and is valid JSON, it fully replaces config.json — it is not merged with the shared file. This is enforced by both the CLI (build/run/test) and the macOS app’s Settings UI.
If config.local.json exists but fails to parse, the CLI ignores it and falls back to config.json, printing a warning that names the file and the decode error rather than silently treating the project as unconfigured. The same applies to a malformed config.json with no local override present. (The macOS app’s Settings UI falls back the same way but does not yet surface an equivalent warning.)
Config Discovery
build, run, and test no longer require you to invoke them from the exact directory that owns .flowdeck/. FlowDeck walks upward from the working directory (or --project, if passed) looking for the nearest ancestor directory that contains .flowdeck/config.json, .flowdeck/config.local.json, or one of the legacy compatibility files, and loads project settings from there.
The walk stops before your home directory and before /, so it never mistakes your ~/.flowdeck/ global state (CLI state, license cache, etc.) for a project config.
This discovered directory — the “config root” — is used only for loading
.flowdeck/config.json and its sidecars. Derived data, saved state, and other paths keyed by project location still use the exact directory you invoked FlowDeck from or passed via --project.--verbose to see which directory FlowDeck resolved as the config root, along with the final merged launch args and env — see App Launch Settings for details.
Project Settings Structure
Project Settings Field Reference
Each entry under
schemes may contain:
configurationappLaunchxcodebuild
Legacy Compatibility Files
Older FlowDeck setups may still contain:.flowdeck/schemes.json.flowdeck/app-launch-settings.json.flowdeck/build-settings.json
- Missing fields in the new project settings config may be filled from legacy files.
- Present-but-empty fields are treated as intentional and should not fall back to legacy files.
Custom Derived Data
Specify a custom derived data path to:- Avoid conflicts with Xcode
- Enable parallel builds with separate derived data
- Use faster storage (e.g., RAM disk)
xcodebuild Passthrough in --config
The xcodebuild section passes arguments and environment variables directly to xcodebuild:
See Xcodebuild Arguments for complete passthrough documentation and common arguments.
App Launch Settings in --config
The appLaunch section passes arguments and environment variables to your app when it launches (for run command only):
simctl launch or the device launch process, not to xcodebuild.
See App Launch Settings for complete documentation, common arguments, and local settings file support.
File Locations
Project Config
Store shared project settings in your repository:config.local.json gitignored so local overrides do not replace the shared team config for everyone else.
Multiple Configurations
Create separate explicit--config files for different scenarios:
CLI Override
Command-line parameters override config file values:Generating Config Files
From Interactive Mode
- Run
flowdeck -iin your project directory - Configure your build settings
- Press
P, then select Export Project Config - Save the exported explicit command config where you want to reuse it for
--config
Troubleshooting
Config File Not Found
Ensure the path is correct:Invalid JSON
Validate your JSON syntax:Workspace Not Found
Workspace paths are relative to the project root (where you run FlowDeck), not the config file location:Simulator Not Available
If the specified simulator doesn’t exist:- FlowDeck will try to resolve from
platform+version - If a matching runtime exists, it creates a new simulator
- Otherwise, it uses the first available simulator for that platform
