Apple development CLI for iOS and macOS
The entire Apple build loop, one tool.
FlowDeck runs xcodebuild under the hood and wraps everything around it: build, run, test, simulators, devices, and logs. Same commands in terminal, CI, or your editor.
The Apple build loop is fragmented
You end up gluing it together yourself.
A typical workflow needs:
xcodebuildto compilexcrun simctlto manage simulatorsxcrun devicectlto run on deviceslog streamcommands to see OSLog output- Test flags that change every year
- Regex to parse the output
That is not a workflow. That is duct tape.
Side by side
| What you are doing | Apple tools | FlowDeck |
|---|---|---|
| Discover schemes | xcodebuild -list and wait |
flowdeck context |
| Run on simulator | Find UDID, then xcodebuild, then simctl install |
flowdeck run -S "iPhone 16" |
| Run on device | xcrun devicectl and manual UDIDs |
flowdeck run -D "iPhone" |
| Stream logs | log stream with predicates |
flowdeck logs |
| Run tests | Long -only-testing flags |
flowdeck test --only LoginTests |
| Machine output | Parse logs with regex | --json |
One CLI for the whole loop
Apple's tooling:
xcodebuildxcrunsimctldevicectllogxcresulttoolxctrace...
FlowDeck:
contextbuildruntestcleansimulatordevicelogs
Learn once. Use everywhere.
Output you can actually use
Unstructured output:
CompileSwift normal arm64 /Users/dev/MyApp/View.swift
/Users/dev/MyApp/View.swift:42:15: error: cannot convert value...
...hundreds more lines...
Good luck parsing that.
FlowDeck output:
{
"type": "build_failed",
"file": "View.swift",
"line": 42,
"message": "cannot convert value"
}
Your CI parses it. Your AI agent understands it. You see what matters.
What does not change
Your
.xcodeproj and .xcworkspace
Your schemes and build settings
Your signing configuration
Your SPM dependencies
Your test targets
FlowDeck reads your project. It does not own it.
Try the Apple development CLI
7-day free trial. No credit card required.
curl -sSL https://flowdeck.studio/install.sh | sh