xtool: замена Xcode для Linux, Windows и macOS
Обзор xtool — кроссплатформенного CLI-инструмента для сборки и деплоя iOS-приложений на Linux, Windows и macOS без Xcode.
xtool: замена Xcode для Linux, Windows и macOS
«Наконец-то стало возможным собирать и деплоить iOS-приложения с Linux и Windows» — Swift Forums
xtool — это кроссплатформенный (Linux/WSL/macOS) инструмент, воспроизводящий функциональность Xcode с опорой на открытые стандарты. На GitHub у проекта уже более 5 600 звёзд, он написан на Swift и распространяется под лицензией MIT.
Для кого это?
Инструмент ориентирован на 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 из него.
Плюсы и минусы
| ✅ Плюсы | ❌ Минусы |
|---|---|
| Полностью бесплатный open-source (MIT) | Нет поддержки Interface Builder / Storyboards |
| Работает на Linux, Windows (WSL), macOS | Asset Catalogs не поддерживаются |
| Декларативный, SwiftPM-based подход | App Store деплой пока не реализован |
| Встраиваемая библиотека XKit | Требует Xcode.xip для извлечения SDK |
| Автоматическое управление provisioning | На Windows работает только через WSL |
| Подходит для CI/CD без macOS-раннеров | Нет встроенного отладчика для iOS 17+ |
| Активное сообщество, ~5 700 ⭐ на GitHub | Потенциальные юридические риски с ADPLA |
Сравнение с альтернативами
| Параметр | xtool | XcodeGen | Tuist |
|---|---|---|---|
| Платформа | Linux, Windows, macOS | macOS only | macOS only |
| Подход | SwiftPM + CLI | Генерация .xcodeproj | Генерация .xcodeproj |
| Xcode необходим? | Только SDK (Xcode.xip) | Да, полностью | Да, полностью |
| Подписание приложений | ✅ Встроено | ❌ Нет | ❌ Нет |
| App Store деплой | 🚧 В разработке | ❌ Нет (нужен fastlane) | ❌ Нет (нужен fastlane) |
| Встраиваемая библиотека | ✅ XKit | ❌ | ❌ |
| Лицензия | MIT | MIT | MIT |
| Цена | Бесплатно | Бесплатно | Бесплатно |
| CI без macOS | ✅ Да | ❌ | ❌ |
xtool не является заменой XcodeGen или Tuist: он использует собственный xtool.yml и SwiftPM Package.swift вместо генерации .xcodeproj-файлов.
Задача: собрать 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 |