Quick Start
After runningflowdeck config set, workspace, scheme, and simulator are saved to project state. Run tests with:
flowdeck config set saves runtime selection state. If you pass --config, that uses the explicit command config format, which is separate from .flowdeck/config.json and .flowdeck/config.local.json.Running All Tests
Running Tests on macOS
Use--device "My Mac" for macOS-only test targets:
Filtering Tests
By Test Target
Run specific test targets:By Test Class or Method
The--only option supports flexible matching:
Skipping Tests
Skip specific tests:Test Plans
Run a specific test plan by name or by path:Smoke can
be run with --only or --test-cases even when another plan skips it. Without
--plan, FlowDeck uses the scheme’s default test plan.
If a selected plan is not attached to the scheme, its referenced file is
missing, or the plan is malformed, FlowDeck stops before test execution and
points to flowdeck test plans for the available plan names.
List Test Plans
List test plans referenced by a scheme (no build required):Test Discovery
Discover all available tests before running. Test discovery uses static source parsing (like Xcode’s Test Navigator) and does not require building the project.--plan) are excluded from discovery results. Use
--include-skipped-tests to show excluded and unselected tests marked as
skipped in the output.
When --plan is present on both the parent test command and the discover
subcommand, the value after discover wins. Plan-selection failures are not
silently ignored.
Example output:
--include-skipped-tests:
JSON Output
For CI/CD integration, use JSON output:flowdeck.test object is authoritative: its totals and verdict come from the finalized xcresult, reconciled with the real xcodebuild status. Live events remain useful for progress and richer failure locations. Any nonzero xcodebuild status—including 65—keeps success false.
Finalized Result Bundles
Every real test run saves a finalized bundle to~/.flowdeck/logs/<project-hash>/test.xcresult. The optional absolute resultBundlePath in the final JSON points to that bundle. Supply -resultBundlePath through --xcodebuild-options to choose another location; the final supplied value wins and applies only to the test phase.
Verbose output preserves canonical ** TEST SUCCEEDED **, ** TEST FAILED **, and ** TEST EXECUTE FAILED ** verdict lines. Human output also branches on the overall success value, so a process or infrastructure failure cannot be labeled as passing merely because zero failed tests were parsed.
CI/CD Integration
GitHub Actions Example
Parsing Results
Test Output
Human-Readable Output
Tips
Test discovery uses static source parsing and doesn’t require building. It finds
XCTestCase subclasses, test* methods, @Suite structs, and @Test functions directly from source files.Troubleshooting
Tests Not Discovered
Test discovery parses source files directly. If tests aren’t found:- Ensure test files are in the scheme’s test targets
- Verify test classes inherit from
XCTestCaseor use@Test/@Suite - Check that XCTest methods start with
test
