// macOS menu bar app · free & open source

Build and run Xcode projects from the menu bar.

Xcode Pilot drives xcodebuild, simctl and devicectl for you. Pick a scheme and a device, press ⌃⌥⌘R in any app, and read errors and print output right in the panel. Xcode.app can stay closed.

download for macOS ↓source on GitHub

  • macOS 14+
  • Xcode 26
  • MIT license
Xcode Pilot panel under its menu bar icon after a failed build: two errors with the compiler’s code snippets and two warnings

// the panel

Everything you open Xcode for

01/03

Errors and warnings

With the code snippet from the compiler and a filter by type. Copy an issue as file:line:col: error: …, copy all of them at once, or open it at the right line in Xcode, VS Code, Cursor or Zed. After the build the list is reconciled with the .xcresult, so nothing gets lost or duplicated.

Issues tab: a failed build with two errors, their code snippets, and two warnings

02/03

Build log

Condensed to tasks, diagnostics and the result, or in full with ⌘F search. Copy it in one click or open the full log as a file.

Log tab: the condensed log of a successful build

03/03

Console of the running app

Run builds, installs and launches the app on a simulator, a connected device or the Mac, and stays attached: print output streams here. The filter works like Xcode’s — Return turns the text into a token, a token that starts with a minus hides lines.

Console tab: print output of the sample app running on an iPhone simulator

// features

The small things add up

// shortcuts

Hands stay on the keyboard

from any app

  • ⌃⌥⌘Rrun
  • ⌃⌥⌘Bbuild
  • ⌃⌥⌘.stop
  • ⌃⌥⌘Xshow or hide the panel

in the panel

  • ⌘Rrun
  • ⌘Bbuild
  • ⌘.stop
  • ⌘Utest
  • ⇧⌘Kclean build folder

// under the hood

Just Apple’s command-line tools

No private frameworks and no Xcode plugins. Xcode Pilot runs the tools you would run in Terminal and parses their output. It shares DerivedData with Xcode, so incremental builds stay incremental in both.

Permissions

  • Accessibility — only for the Organizer and Devices and Simulators buttons. Xcode has no URL scheme or AppleScript command for these windows, so the app presses their items in Xcode’s Window menu.
  • Notifications — asked for with the first build-finished notification.
$ xcodebuild build -project Forecast.xcodeproj -scheme Forecast \
    -destination id=4F2A…C91E -resultBundlePath Build.xcresult
** BUILD SUCCEEDED **
$ xcrun xcresulttool get build-results --path Build.xcresult --compact
$ xcrun simctl install 4F2A…C91E Forecast.app
$ xcrun simctl launch --console-pty 4F2A…C91E dev.example.Forecast
[network] GET /v1/forecast?city=Lisbon
[network] 200 OK forecast?city=Lisbon (142 ms)

// good to know

Limitations

// install

Free and open source

Download the notarized DMG, drag Xcode Pilot to Applications and open it: it lives in the menu bar. It is released under the MIT license.

download the DMG ↓source on GitHub →

// or build it from source with Xcode 26

# project generators and the linter
brew install xcodegen swiftgen swiftlint
git clone https://github.com/ivoneug/xcode-pilot.git
# generates XcodePilot.xcodeproj
cd xcode-pilot/Scripts && ./generateProject.sh
open ../XcodePilot.xcodeproj

Set your team in Scripts/project.env (DEVELOPMENT_TEAM_ID) and run the XcodePilot scheme. Signing with your team keeps macOS from resetting the Accessibility permission after every rebuild.