Skip to main content
FlowDeck provides full access to xcodebuild’s capabilities through custom arguments and environment variables. You can configure builds using three methods.

Methods Overview

When multiple sources provide arguments, they’re merged with CLI taking highest priority.

Preferred Project Settings Format

For shared project settings, prefer storing xcodebuild passthrough values in:
  • .flowdeck/config.json
  • .flowdeck/config.local.json
Example:
Use the top-level xcodebuild block for project-wide defaults, and schemes.<scheme>.xcodebuild for per-scheme overrides.

CLI Options

Xcodebuild Arguments

Use --xcodebuild-options to pass arguments to xcodebuild:
Use = syntax (e.g., --xcodebuild-options='...') when values start with - to avoid argument parsing issues.

Xcodebuild Environment

Use --xcodebuild-env to set environment variables for the build:

Combining Options

All options can be combined:

Works with All Commands

Test Result Bundle Routing

flowdeck test owns one result bundle per xcodebuild phase so each bundle is finalized exactly once:
  • build-for-testing writes ~/.flowdeck/logs/<project-hash>/build-test.xcresult.
  • test-without-building writes ~/.flowdeck/logs/<project-hash>/test.xcresult by default.
  • A caller-supplied -resultBundlePath overrides only the test-phase path.
Both -resultBundlePath <path> and -resultBundlePath=<path> are accepted. When arguments from multiple sources contain the flag, the last valid value wins. FlowDeck removes the duplicates before invoking xcodebuild and normalizes the selected result to an absolute path. The final flowdeck.test JSON snapshot reports that same path as resultBundlePath.

Legacy Local Build Settings

Create .flowdeck/build-settings.json in your project root for settings that apply to all FlowDeck commands automatically:
This file is a legacy compatibility format and is still auto-loaded by current CLI runtime paths.
Prefer .flowdeck/config.json or .flowdeck/config.local.json for new setup. Keep .flowdeck/build-settings.json only when you need compatibility with older workflows.

Structure

Config File

Include xcodebuild settings in your --config JSON file:
Use with:
--config uses the explicit command config format, which is separate from .flowdeck/config.json and .flowdeck/config.local.json. See Configuration File for the difference.

Priority and Merging

When arguments come from multiple sources, they’re combined in this order:
  1. Config file (lowest priority) - base configuration
  2. Local build-settings.json - compatibility override for current CLI auto-load behavior
  3. CLI options (highest priority) - appended last, takes effect
Example:

Common Arguments Reference

Build Settings

Xcodebuild Flags

Compiler Flags

Environment Variables

Set environment variables for the xcodebuild process:

Via CLI

In Local Settings

In Config File

Common Environment Variables

The canonical shared project-settings format is xcodebuild inside .flowdeck/config.json or .flowdeck/config.local.json. The separate build-settings.json file remains a legacy compatibility input.

Use Cases

Extract coverage after tests:
Or create .flowdeck/build-settings.json:

Viewing the Final Command

Use --dry-run to see the complete xcodebuild command with all arguments without executing:
Use --verbose to see the command during actual execution:

Troubleshooting

Values Starting with Dash

Use = syntax when values start with -:

Build Settings Format

Use KEY=VALUE format (no spaces around =):

JSON Array Format

In config files, each argument is a separate array element:
Not: