Как собрать и запустить SwiftUI-приложение на iPhone без MacBook

Разработка приложений для iPhone долгое время была тесно связана с macOS: даже проекты на Flutter или Kotlin Multiplatform нельзя было полноценно собрать под iOS на Linux или Windows. Утилита xtool меняет эту ситуацию. Она воспроизводит часть возможностей Xcode и позволяет собирать приложения на Swift Package Manager, а затем устанавливать их на физический iPhone без Mac или MacBook.
Проект пока находится в активной разработке. На текущем этапе xtool поддерживает проекты SwiftPM, а разработчики планируют добавить работу с файлами XcodeProj. Для взаимодействия с аккаунтом Apple Developer по-прежнему требуется скачать Xcode.xip, однако сама macOS для этого процесса не нужна.
Проверка на SwiftUI-проектах
Для первого эксперимента использовался новый Apple ID — именно такой вариант рекомендуют авторы проекта для тестирования. Команда xtool new example создаёт простой проект Hello World. После успешной установки этого приложения на iPhone был проверен более практичный пример — небольшой todo-лист на SwiftUI.
После исправления ошибки, связанной с багом в xtool, проект удалось собрать командой xtool dev. Утилита загрузила зависимости из Package.swift, скомпилировала их и подготовила приложение для устройства. Весь процесс занял около 5,6 секунды на этапе сборки, после чего xtool автоматически дождалась подключения iPhone и выполнила распаковку, подготовку, подпись, упаковку и установку приложения.
Таким образом, приложение действительно запустилось на физическом смартфоне, хотя сборка выполнялась не на компьютере Apple. Для учебных задач и небольших личных проектов это существенно снижает порог входа в разработку под iOS.
Ограничения и технические проблемы
Во время эксперимента обнаружилась проблема с cross-import overlay при сборке на Linux с Swift 6.4 и более новых версий. В предыдущих версиях Swift использовалась конфигурация, где ошибка уже была исправлена. Для решения проблемы автор эксперимента подготовил pull request в xtool, и исправление вошло в версию 1.23.0.
Полноценной заменой Xcode утилита пока не стала. Через xtool нельзя опубликовать приложение в App Store, а симуляторы за пределами macOS не поддерживаются. Отладку проекта протестировать не удалось. KMP-проект собрать получилось только после дополнительного патчинга компилятора; другой проект — xcross — призван упростить этот сценарий.
Есть и ограничения при работе с Tuist. xtool пока не умеет обрабатывать файлы xcodeproj, которые генерирует Tuist. Кроме того, версия Tuist для Linux не может создавать такие файлы, поэтому связка инструментов в текущем виде практически непригодна для сборки.
Запуск в Windows через WSL
В Windows эксперимент проводился внутри WSL. Для работы с проектом удобно установить официальный плагин WSL для VS Code, открыть каталог из Linux-среды и дополнительно установить расширение Swift. Основная сложность связана с передачей подключённого iPhone из Windows в WSL.
Документация xtool предлагает использовать USBIPD, но этот способ может работать нестабильно. Альтернативный вариант — установить iTunes из Microsoft Store, разрешить входящие подключения к виртуальному интерфейсу WSL и настроить перенаправление порта 27015. После этого в WSL задаётся адрес USB-мультиплексора, а наличие устройства проверяется командами ideviceinfo и xtool devices.
В конкретной конфигурации ideviceinfo сообщала, что устройство не найдено, тогда как xtool devices корректно видела iPhone и позволяла продолжить сборку. Если WSL работает в режиме mirrored, часть сетевых настроек можно пропустить. Переменную USBMUXD_SOCKET_ADDRESS также можно добавить в файл .bashrc, чтобы не задавать её при каждом запуске терминала.
Лицензионные вопросы и альтернативы
Отдельно остаётся вопрос соответствия такого сценария лицензии Apple. В соглашении Xcode и Apple SDKs указано, что программное обеспечение Apple нельзя устанавливать, использовать или запускать на компьютерах и устройствах, не имеющих маркировки Apple. Поэтому применение xtool вне экосистемы macOS может противоречить условиям лицензии, и этот риск необходимо учитывать.
Существуют и другие проекты. xcross предназначен для запуска и установки на iOS приложений, созданных с использованием Flutter и Compose Multiplatform, причём WSL ему, судя по описанию, не требуется. Ещё один вариант — omarchy-apple-dev: набор скриптов для сборки SwiftUI-приложений в Omarchy Linux поверх xtool. Проект обещает поддержку отладки через LLDB, но на момент эксперимента был совсем новым.
Итоги
xtool пока не подходит компаниям, которым нужны стабильная отладка, полноценная интеграция с Xcode и публикация приложений в App Store. Однако для хобби, прототипирования и изучения SwiftUI это заметный шаг вперёд. Разработчик может собрать приложение на Linux или Windows, подключить настоящий iPhone и проверить результат без покупки отдельного Mac.
Главные функции, которых ждут от проекта дальше, — поддержка XcodeProj, публикация в App Store и запуск симуляторов вне macOS. Если эти возможности появятся, xtool сможет стать более серьёзной альтернативой традиционному инструментарию, хотя вопрос лицензии Apple всё равно останется открытым.


