
SweetPad (sweetpad.sweetpad, v0.1.94, MIT) wraps the full xcodebuild pipeline inside VS Code — build, debug, test, and simulator/device management for iOS/macOS/tvOS/watchOS/visionOS. Covers setup, launch.json config, hot reload via InjectionNext, the DoorDash case study (60% CI speedup), and four open issues to watch.
xcodebuild, SweetPad (sweetpad.sweetpad) is the missing piece. The extension wraps the full xcodebuild CLI pipeline — build, run, debug, test, and device deployment — and surfaces it through VS Code's native sidebar panels and task system. 1launch, build, run, clean, test, resolve-dependencies, debugging-launch, debugging-run) are auto-registered as VS Code tasksvadimcn.vscode-lldb), which is a hard dependency; press F5 after a one-time launch.json setuppymobiledevice3swift-format from the active Xcode toolchain (or a custom formatter path)swiftlang.swift-vscode (the official Swift language extension): that extension handles SourceKit-LSP (code completion, diagnostics, go-to-definition); SweetPad handles Xcode project management. The two share xcode-build-server as a BSP bridge. 4xcodebuild). VS Code ≥ 1.85.0. 1# 1. Install system dependencies
brew install xcode-build-server xcbeautify.xcworkspace or .xcodeproj folder — SweetPad auto-detects it and shows a Build panel in the sidebarbuildServer.json in the project root.vscode/launch.json looks like this: 5{
"configurations": [
{
"type": "sweetpad-lldb",
"name": "Debug — SweetPad",
"request": "launch",
"preLaunchTask": "sweetpad: launch",
"continueOnAttach": true
}
]
}preLaunchTask: "sweetpad: launch" builds and launches the app before LLDB attaches. Set breakpoints in your Swift source files and press F5 — no further configuration required.
settings.json entries: 6{
// Filter noisy auto-generated schemes
"sweetpad.build.schemes.include": ["MyApp*", "MyLib*"],
"sweetpad.build.schemes.exclude": ["*-Debug-*"],
// Pin a specific Xcode version (useful for CI parity)
"sweetpad.build.xcodebuildCommand": "/Applications/Xcode-16.3.app/Contents/Developer/usr/bin/xcodebuild",
// Custom DerivedData location (keep out of project root)
"sweetpad.build.derivedDataPath": "${workspaceFolder}/../.build/DerivedData",
// Pass extra xcodebuild flags
"sweetpad.build.args": ["-skipMacroValidation"],
// Enable build output beautifier (requires: brew install xcbeautify)
"sweetpad.build.useXcbeautify": true,
// Format Swift on save
"[swift]": {
"editor.defaultFormatter": "sweetpad.sweetpad",
"editor.formatOnSave": true
}
}xcodebuild for read-only operations like listing schemes and reading build settings: 7{
// Experimental: routes -list/-showBuildSettings/-version to a bundled Rust binary
// "Significantly faster for large projects" — package.json setting description
"sweetpad.system.useSweetpadLib": true
}
sweetpad.hotReload.enabled: true). This works for simulator and macOS builds only — physical devices are not supported yet. 7sweetpad CLI binary lets external scripts and AI agents trigger builds and read project state without a VS Code UI interaction. DoorDash used this to let Cursor drive XCTest → Swift Testing migration autonomously: their MCP server exposed execute_vscode_command, accepting command IDs like sweetpad.build.build and sweetpad.build.test. Matheus Gois (DoorDash engineer) described the result: "It does not matter whether the tests are triggered from a local terminal or through SweetPad and Cursor. The same targets run, the same ten-run rule applies, and every package is held to the same standard." 3| Issue | Status | Condition |
|---|---|---|
| Empty simulator list with Xcode 26 (#191) | Open | xcrun simctl list -j returns empty JSON under Xcode 26 |
| Large project crash after build (#206) | Open | Projects with hundreds of targets + SwiftPM deps; TypeError: c.map is not a function in output parsing |
| ObjC header false positives (#238) | Open | Mixed ObjC/Swift projects; UIKit.h not-found diagnostics appear but code compiles fine |
| Physical device breakpoints (#211) | Open | Breakpoints don't hit on physical devices in some configurations |
xcrun text output as a workaround to identify device UDIDs manually, or stay on Xcode 16.x. For large projects: if your workspace has hundreds of Swift targets and you hit the crash, the sweetpad.system.useSweetpadLib flag (v0.1.94) may help, as it bypasses the xcodebuild output parsing path that triggers the bug. For ObjC codebases: diagnostics are cosmetic-only — builds and debugging work correctly.sweetpad.sweetpad · Version: v0.1.94 1
Language: Swift/Objective-C · IDE: VS Code ≥ 1.85.0 · OS: macOS only · License: MIT · Installs: 55,979 · Rating: 4.75/5
Required dependencies: Xcode + xcodebuild, CodeLLDB (vadimcn.vscode-lldb), xcode-build-server
Optional: xcbeautify (build output), pymobiledevice3 (iOS 17+ physical device tunneling)
Install: sweetpad.sweetpad on VS Code Marketplace · GitHubmarketplace.visualstudio.com
github.com
sweetpad.hyzyla.dev
sweetpad.hyzyla.dev
sweetpad.hyzyla.dev
github.com
github.com
This story was produced automatically by a channel. One sentence is all it takes for Neodrop to keep producing for you.