Claude Code changed how I ship iOS apps

I've used most of the AI coding tools at this point. Copilot, ChatGPT, Cursor. They're fine for one-off questions or autocomplete, but none of them became part of how I actually work. Claude Code did.

It lives in the terminal

Claude Code is a CLI tool. It runs in a terminal pane next to where I'm already running xcodebuild and git. No browser tab, no VS Code extension. I type claude and I'm talking to something that can see my whole project.

When you're already juggling six windows as a solo dev, not adding a seventh matters more than you'd think.

The CLAUDE.md file

This is probably the feature I'd miss most. I keep a CLAUDE.md in the root of every project. It tells Claude Code my build commands, test conventions, architecture patterns. Gets read automatically at the start of every session.

For Math Hero, mine includes stuff like:

- Swift Testing framework for unit tests (@Test, #expect())
- SwiftData for persistence with in-memory containers for testing
- Bundle ID, CI workflows, fixture patterns

So I don't have to re-explain that my tests use @Test instead of XCTestCase, or that I have fixture helpers like UserFixture.basic(). The context carries over. Chat tools can't do this, and it's the difference between a neat demo and something I open every morning.

Scaffolding a feature last week

I needed a new subject selector in the lesson flow. I described what I wanted, Claude Code read my existing views, picked up my naming conventions, and generated the SwiftUI view, view model, and test suite in one pass.

The tests used my project's patterns. Swift Testing's @Suite and @Test, my TestModelContainer.makeContainer() helper, #expect() assertions. Then it ran xcodebuild test in the same terminal to check everything compiled and passed.

That loop -- describe, generate, test, iterate -- happening in one place without copying between windows is where the speed comes from.

Multi-file refactors

When I add a field to a SwiftData model and it needs to ripple through services, views, and tests, Claude Code handles the coordination. It reads what it needs, edits across files, and I review with git diff before committing. It understands that changing a model property means updating the view model that reads it and the test that asserts on it.

Where it falls short

Xcode project files are still a problem. Swift source files, all day. But .pbxproj files are dense XML and Claude Code sometimes mangles them. I add files to Xcode targets by hand.

Long debugging sessions drift. If a bug takes twenty back and forth messages across a dozen files, the conversation loses focus. I've learned to keep sessions short.

And it gets things wrong with confidence. It'll generate code that looks right, compiles, and still misuses an API. The xcodebuild integration catches a lot of this, but you can't stop reviewing.

Why I stopped using chat tools

ChatGPT and Copilot Chat don't have your project. You're copying snippets in, explaining context, pasting solutions back. Claude Code just reads the files, edits them, and runs builds. I tried going back to the copy paste workflow after a couple weeks and couldn't do it.


-- Daniel