How to set up Claude Code and Codex CLI for iOS development

Claude Code or Codex can build your iOS app. They call xcodebuild, pass the scheme, pick a simulator, compile. On a good run, it works.

Then it doesn’t. xcodebuild dumps 2,000 lines into one stream. The agent burns context looking for the error on line 847, misreads a linker error as a warning, retries with the wrong flag, grabs a simctl UDID that doesn’t exist on this machine. Two bad iterations and you’re back in the terminal doing it yourself.

The raw tools work often enough to be promising. They fail often enough to be unusable for autonomous work.

Where it breaks down

Apple’s CLI surface is four tools with nothing in common.

xcodebuild mixes errors, warnings, and progress into unstructured text. The agent parses this with regex that breaks silently between Xcode versions. xcrun simctl needs UDIDs that change per machine. xcrun devicectl has a completely different syntax. log stream shows every process on the system.

Orchestrating all four is where it falls apart. Not on the first build. On the fifth, when the simulator didn’t boot, the UDID was stale, and the agent is three tool calls deep into a dead end.

And none of them give the agent eyes. Claude Code/Codex can’t see the simulator screen, tap a button, or verify that the login form appeared. They write UI code blind and hope you’ll check.

There are open source wrappers that try to solve this. They expose Apple’s tools as 60 to 76 individual MCP operations, run on Node.js with a background daemon, and route every call through the MCP protocol before it reaches xcodebuild. Some ship with telemetry enabled by default. The approach works for experimentation. For production development where you need reliability, privacy, and a tool you can leave running unattended, the overhead adds up.

What you need is a professional tool: one interface, structured output, no telemetry, no runtime dependencies, and the ability to see what’s on screen.

The setup

FlowDeck is a native Swift CLI built for exactly this. No Node.js. No MCP server. No daemon. No telemetry. Eight commands, structured JSON on everything, and built-in UI automation. Here’s how to wire it to Claude Code/Codex.

Install.

curl -sSL https://flowdeck.studio/install.sh | sh
flowdeck license activate [YOUR_LICENSE_KEY]

Activate with the license key from your purchase email.

Install the skill pack.

flowdeck -i

Press A, select Install Skills, choose Claude Code, then Global or Project. This drops a SKILL.md that Claude Code reads on startup. Every command, every workflow pattern, one rule: use FlowDeck, not xcodebuild. The skill gives Claude Code full project context. No additional configuration.

FlowDeck ships skill packs for Claude Code, Codex CLI, OpenCode, and Gemini CLI. The CLI is identical. The skill file is what changes. Claude Code reads SKILL.md. Codex reads AGENTS.md. Both get the same commands, the same workflow patterns, the same rule: use FlowDeck, not xcodebuild. If you use multiple agents on the same project, install both. They don’t conflict.

Two steps. Under two minutes.

What the agent loop looks like

Claude Code/Codex discover the project, build, launch, observe. The whole cycle.

flowdeck context --json
flowdeck build -w App.xcworkspace -s MyApp -S "iPhone 16"
flowdeck run -w App.xcworkspace -s MyApp -S "iPhone 16"

Build output is NDJSON. Errors are typed events with file paths and line numbers. Build fails, agent reads the error, fixes the code, rebuilds. No regex. No guessing. No 2,000 lines of noise.

Building and running is table stakes. The part that changes the workflow is visual verification.

flowdeck ui simulator screen --json

Screenshot and full accessibility tree, returned as JSON. Claude Code/Codex see the UI. Find elements by label. Decide what to do next.

flowdeck ui simulator tap "Log In"
flowdeck ui simulator type "user@test.com"
flowdeck ui simulator assert visible "Welcome"

Tap, type, assert, scroll, swipe. The agent drives the app the way a QA engineer would, then verifies the result before moving on.

flowdeck apps
flowdeck logs <app-id>

Runtime logs. print() and OSLog output streamed from the running app. The agent sees behavior, not just compiler output.

Build, launch, screenshot, verify. Under 60 seconds. No human. No Xcode.

What this is and isn’t

FlowDeck is the build and observation layer. Claude Code/Codex write the code. FlowDeck handles everything between writing code and knowing whether it worked.

Code signing and provisioning still need Xcode’s one-time setup. After that, Xcode stays closed.

Native Swift. Runs locally. No data leaves your machine. No telemetry, no usage tracking, no background analytics. License validation is the only network call FlowDeck makes.

Works with Claude Code, Codex CLI, OpenCode, and Gemini CLI.

Further reading

Try FlowDeck free for 7 days.

One CLI for builds, simulators, tests, logs, and UI automation. Native Swift. Runs locally. No telemetry.

Start Free Trial Read the Docs
$59/yr after trial · Zero telemetry