// приложение для строки меню macOS · open source

Собирайте и запускайте Xcode-проекты из строки меню.

Xcode Pilot сам вызывает xcodebuild, simctl и devicectl. Выберите схему и устройство, нажмите ⌃⌥⌘R в любом приложении — ошибки и вывод print появятся прямо в панели. Xcode.app при этом может быть закрыт.

скачать для macOS ↓исходники на GitHub

  • macOS 14+
  • Xcode 26
  • лицензия MIT
Панель Xcode Pilot под иконкой в строке меню после неудачной сборки: две ошибки с фрагментами кода от компилятора и два предупреждения

// панель

Всё, ради чего открывают Xcode

01/03

Ошибки и предупреждения

С фрагментом кода от компилятора и фильтром по типу. Любую ошибку можно скопировать в формате file:line:col: error: …, скопировать все разом или открыть на нужной строке в Xcode, VS Code, Cursor или Zed. После сборки список сверяется с .xcresult, так что ничего не теряется и не дублируется.

Вкладка «Ошибки»: неудачная сборка, две ошибки с фрагментами кода и два предупреждения

02/03

Лог сборки

Краткий — задачи, диагностика и результат — или полный, с поиском по ⌘F. Его можно скопировать одной кнопкой или открыть полный лог файлом.

Вкладка «Лог»: краткий лог успешной сборки

03/03

Консоль запущенного приложения

Run собирает, ставит и запускает приложение на симуляторе, подключённом устройстве или Mac и остаётся к нему подключённым: вывод print идёт сюда. Фильтр — как в Xcode: Return превращает текст в токен, токен с минусом в начале скрывает строки.

Вкладка «Консоль»: вывод print тестового приложения, запущенного на симуляторе iPhone

// возможности

Мелочи, из которых всё и складывается

// клавиши

Руки остаются на клавиатуре

из любого приложения

  • ⌃⌥⌘Rзапустить
  • ⌃⌥⌘Bсобрать
  • ⌃⌥⌘.остановить
  • ⌃⌥⌘Xпоказать или скрыть панель

в панели

  • ⌘Rзапустить
  • ⌘Bсобрать
  • ⌘.остановить
  • ⌘Uтесты
  • ⇧⌘Kочистить сборку

// под капотом

Только инструменты командной строки Apple

Никаких приватных фреймворков и плагинов для Xcode. Xcode Pilot запускает те же утилиты, что вы запустили бы в терминале, и разбирает их вывод. DerivedData общая с Xcode, поэтому инкрементальная сборка работает и там, и тут.

Разрешения

  • Универсальный доступ — только для кнопок Organizer и Devices and Simulators. У Xcode нет ни URL-схемы, ни AppleScript-команды для этих окон, поэтому приложение нажимает их пункты в меню Window.
  • Уведомления — спрашиваются при первом уведомлении о завершении сборки.
$ 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)

// стоит знать

Ограничения

// установка

Бесплатно и с открытым кодом

Скачайте нотаризованный DMG, перетащите Xcode Pilot в «Программы» и запустите: он живёт в строке меню. Распространяется по лицензии MIT.

скачать DMG ↓исходники на GitHub →

// или соберите из исходников в Xcode 26

# генераторы проекта и линтер
brew install xcodegen swiftgen swiftlint
git clone https://github.com/ivoneug/xcode-pilot.git
# создаёт XcodePilot.xcodeproj
cd xcode-pilot/Scripts && ./generateProject.sh
open ../XcodePilot.xcodeproj

Укажите свою команду в Scripts/project.env (DEVELOPMENT_TEAM_ID) и запустите схему XcodePilot. Подпись своей командой нужна, чтобы macOS не сбрасывала разрешение на универсальный доступ после каждой пересборки.