xtool: замена Xcode для Linux, Windows и macOS

«Наконец-то стало возможным собирать и деплоить iOS-приложения с Linux и Windows» — Swift Forums

xtool — это кроссплатформенный (Linux/WSL/macOS) инструмент, воспроизводящий функциональность Xcode с опорой на открытые стандарты. На GitHub у проекта уже более 5 600 звёзд, он написан на Swift и распространяется под лицензией MIT.

ℹ Что такое xtool
xtool — это CLI-инструмент, а не IDE. Он берёт ваш SwiftPM-пакет и превращает его в подписанное iOS-приложение, которое можно установить на реальное устройство — с Linux, Windows (WSL) или macOS.

Для кого это?

Инструмент ориентирован на Swift-разработчиков, которые не хотят зависеть исключительно от Xcode на Mac. Конкретнее:

  • Swift-разработчики на Linux или Windows, желающие собирать и деплоить SwiftPM-based iOS-приложения;
  • разработчики, которым нужны командные строчные воркфлоу для подписания и установки iOS-приложения на устройство;
  • команды, желающие автоматизировать взаимодействие с Apple Developer Services;
  • Swift-разработчики, создающие собственные инструменты с доступом к Apple Developer Services или iOS-устройствам через XKit.

xtool подойдёт команде, принявшей решение не использовать macOS для iOS-сборок, или той, что хочет автоматизировать работу с Apple Developer Services через скрипты, а не GUI.


Ключевые возможности

Три кита функциональности

xtool умеет:

  • ✅ Собирать SwiftPM-пакет в iOS-приложение;
  • ✅ Подписывать и устанавливать iOS-приложения;
  • ✅ Программно взаимодействовать с Apple Developer Services.

CLI — основной интерфейс

Полный список подкоманд:

CONFIGURATION SUBCOMMANDS:
  setup    Set up xtool for iOS development
  auth     Manage Apple Developer Services authentication
  sdk      Manage the Darwin Swift SDK

DEVELOPMENT SUBCOMMANDS:
  new      Create a new xtool SwiftPM project
  dev      Build and run an xtool SwiftPM project
  ds       Interact with Apple Developer Services

DEVICE SUBCOMMANDS:
  devices  List devices
  install  Install an ipa file to your device
  uninstall Uninstall an installed app
  launch   Launch an installed app

Встраиваемая библиотека XKit

xtool включает библиотеку XKit, которую можно использовать для взаимодействия с Apple Developer Services, iOS-устройствами и многим другим из собственного приложения.

Подключить XKit можно как SwiftPM-зависимость:

// package dependency:
.package(url: "https://github.com/xtool-org/xtool", .upToNextMinor(from: "1.2.0"))
// target dependency:
.product(name: "XKit", package: "xtool")

Поддержка app-расширений

xtool позволяет разрабатывать, собирать и управлять iOS-проектами, включая сложные app-расширения и виджеты, напрямую с Linux, Windows или macOS.

Провизионирование и сертификаты

Инструмент поддерживает автоматическое управление provisioning и сертификатами. Аутентификация предлагает публичные API-ключи для платных аккаунтов разработчика или парольную аутентификацию через приватные Apple API.

💡 Первый запуск

Перед первой сборкой обязательно выполните три настроечных шага:

xtool setup   # настройка окружения iOS-разработки
xtool auth    # авторизация в Apple Developer Services
xtool sdk     # загрузка Darwin Swift SDK

Только после этого xtool new и xtool dev заработают корректно.


Как работает xtool


graph TD
    A[SwiftPM Package.swift] --> B[xtool new / xtool dev]
    B --> C{Платформа}
    C -->|Linux / WSL| D[Darwin Swift SDK]
    C -->|macOS| E[Локальный тулчейн]
    D --> F[Сборка iOS-бандла]
    E --> F
    F --> G[Подпись приложения]
    G --> H[Apple Developer Services auth]
    H --> I[Установка на устройство]
    I --> J[xtool launch]


Тарифы и цены

xtool — это кроссплатформенный open-source инструмент. Он распространяется бесплатно под лицензией MIT. Затраты на сам инструментарий минимальны, однако вам может периодически понадобиться доступ к macOS — для отладки визуального UI или финальной загрузки в App Store.

КомпонентСтоимость
xtool (сам инструмент)🆓 Бесплатно (MIT)
Apple Developer Program$99/год (требуется для подписи)
macOS-машина / CI-раннерПо необходимости

Ограничения и текущие «gotchas»

Interface Builder — воспроизведение его функциональности потребовало бы огромных усилий, и автор считает это нецелесообразным, поскольку SwiftUI во многом его заменяет. Asset Catalogs требуют реверс-инжиниринга для реализации; пока что изображения можно добавлять как обычные файлы, хотя это менее эффективно.

App Store deployment: вы можете собрать приложение и запустить его на своём устройстве, однако деплой билдов в App Store Connect пока не поддерживается.

xtool не включает никаких следов Apple SDK или тулчейнов — поэтому процесс установки просит пользователей самостоятельно скачать Xcode.xip и собирает iOS SDK из него.

⚠ Правовой нюанс
Некоторый функционал xtool опирается на компоненты Apple SDK и API, которые лицензионные соглашения Apple иногда ограничивают использованием только на оборудовании Apple. Сообщество рекомендует использовать xtool для разработки и CI-экспериментов, а финальные сборки и загрузку в App Store выполнять из macOS-окружения.

Плюсы и минусы

✅ Плюсы❌ Минусы
Полностью бесплатный open-source (MIT)Нет поддержки Interface Builder / Storyboards
Работает на Linux, Windows (WSL), macOSAsset Catalogs не поддерживаются
Декларативный, SwiftPM-based подходApp Store деплой пока не реализован
Встраиваемая библиотека XKitТребует Xcode.xip для извлечения SDK
Автоматическое управление provisioningНа Windows работает только через WSL
Подходит для CI/CD без macOS-раннеровНет встроенного отладчика для iOS 17+
Активное сообщество, ~5 700 ⭐ на GitHubПотенциальные юридические риски с ADPLA

Сравнение с альтернативами

ПараметрxtoolXcodeGenTuist
ПлатформаLinux, Windows, macOSmacOS onlymacOS only
ПодходSwiftPM + CLIГенерация .xcodeprojГенерация .xcodeproj
Xcode необходим?Только SDK (Xcode.xip)Да, полностьюДа, полностью
Подписание приложений✅ Встроено❌ Нет❌ Нет
App Store деплой🚧 В разработке❌ Нет (нужен fastlane)❌ Нет (нужен fastlane)
Встраиваемая библиотека✅ XKit❌❌
ЛицензияMITMITMIT
ЦенаБесплатноБесплатноБесплатно
CI без macOS✅ Да❌❌

xtool не является заменой XcodeGen или Tuist: он использует собственный xtool.yml и SwiftPM Package.swift вместо генерации .xcodeproj-файлов.

📝 Типичный CI/CD сценарий с xtool

Задача: собрать iOS-приложение на GitHub Actions без macOS-раннера.

jobs:
  build-ios:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Setup Swift
        uses: swift-actions/setup-swift@v2
      - name: Build with xtool
        run: |
          xtool setup
          xtool auth --apple-id $APPLE_ID --password $APP_PASSWORD
          xtool dev

Вердикт

xtool — это смелый и технически интересный проект, закрывающий реальную боль Swift-разработчиков: необходимость держать macOS-машину ради сборки iOS-приложений. Это новый open-source кроссплатформенный buildchain, позволяющий разработчикам собирать и запускать iOS-приложения без Xcode, обеспечивая быстрое построение, подписание и запуск Swift Packages как iOS-приложений на устройствах или симуляторах под macOS, Linux и Windows.

При этом у xtool есть ряд ограничений, однако проект развивается быстро — с частыми обновлениями и новыми функциями.

Кому подойдёт:

  • Backend-командам на Linux, добавляющим iOS-клиент;
  • CI/CD-инженерам, желающим убрать macOS из пайплайна;
  • Open-source Swift-разработчикам, пишущим инструменты для iOS.

Кому пока не подойдёт:

  • Командам с UI-тяжёлыми проектами на Storyboards;
  • Тем, кто готовится к деплою в App Store прямо сейчас.

Рейтинг: 7.5 / 10

КритерийОценка
Функциональность7/10
Простота использования7/10
Зрелость / стабильность6/10
Уникальность идеи10/10
Перспективы развития9/10