Skip to main content
Build, run, and test Xcode apps without opening Xcode

One command builds your app, launches it on a simulator or a real device, and streams the logs into your terminal. sweetpad drives Xcode's own build tools underneath, so it's the same build with output a person can read.

$ brew install sweetpad-dev/tap/sweetpad
$ sweetpad run --on "iPhone 16 Pro"
SweetPad logo
1,800+stars on GitHub61,000+VS Code extension installs
5Apple platforms: iOS, macOS, tvOS, watchOS, visionOS

Inside the CLI

🛠️ Build & run

One command builds the app, launches it, and streams its logs into your terminal. Press r to rebuild without leaving.

🔥 Hot reload

Save a Swift file and the running app updates in place, keeping its current screen and state. No rebuild, no relaunch.

🧠 Autocomplete anywhere

One command wires SourceKit-LSP to SweetPad's build server, so completions work in Neovim, Zed, Helix, or Emacs.

✅ Testing

Run the suite, narrow it to one test, watch for saves, and pull the screenshots a failing UI test recorded.

📱 Simulators & devices

Run on a simulator by name, on a connected iPhone, or on your Mac. SweetPad remembers the choice, so you pick once.

🐛 Debug & diagnose

Follow logs until a line matches, script an lldb session, or catch the first crash and get a structured report.

🤖 Scripts & CI

Every command speaks JSON and returns meaningful exit codes, so it drops into git hooks and pipelines.

🧩 AI agent skills

Vendor-neutral skill files that teach a coding agent to drive the CLI instead of guessing at xcodebuild.

📖 Every command

Commands, flags, config keys, and exit codes. The whole surface on one page.

Also: Swift Package dependencies, archiving and export, Tuist and XcodeGen, and git merge drivers that resolve .pbxproj conflicts semantically.

xcodebuild for humans

Same compiler, same build system, same app. What changes is what lands in your terminal: seven lines instead of 350, on the same build.

xcodebuild350 lines
Command line invocation:
/Applications/Xcode.app/Contents/Developer/usr/bin/xcodebuild -project MyApp.xcodeproj -scheme MyApp -destination …
 
ComputePackagePrebuildTargetDependencyGraph
 
Prepare packages
 
CreateBuildRequest
 
SendProjectDescription
 
CreateBuildOperation
 
ComputeTargetDependencyGraph
note: Building targets in dependency order
note: Target dependency graph (1 target)
Target 'MyApp' in project 'MyApp' (no dependencies)
 
GatherProvisioningInputs
 
CreateBuildDescription
sweetpad7 lines
building MyApp (Debug) for platform=iOS Simulator,id=F92801F8-…
Linking __preview.dylib
Compiling ContentView.swift
Compiling MyApp.swift
Linking MyApp.debug.dylib
Linking MyApp
✓ Build succeeded (6.7s)

And when it breaks, the error is the third line instead of the forty-fourth.

$ sweetpad build
building MyApp (Debug) for platform=iOS Simulator,id=F92801F8-…
Compiling ContentView.swift
error: Sources/App/ContentView.swift:12:14: cannot find 'greeting' in scope
✗ Build failed
error: building the project
xcodebuild exited with a non-zero status

Works with Xcode projects and workspaces, Tuist, XcodeGen, and Swift Packages.

🧩 Prefer to work in VS Code?

The SweetPad extension does the same builds, runs, and tests from the VS Code sidebar, and adds breakpoints, a native Testing panel, format-on-save, and autocomplete. It works in Cursor too.

It's a separate install, and it doesn't need the CLI. Which one do I need?

Try it on a project you already have

Install it, change into any Xcode project, and run one command. A Mac with Xcode is the whole dependency list.

$ brew install sweetpad-dev/tap/sweetpad
$ cd MyApp && sweetpad run

Free and open source under the MIT license. SweetPad writes nothing into your project unless you ask it to, and brew uninstall sweetpad takes it all back out.