Руководство по подключению сборки

Подключите узел к конвейеру сборки

Вся физическая машина выделена вашей команде. Сначала проверьте подключение, затем зафиксируйте инструментарий и зарегистрируйте runner. Используйте этот список для первых 30 минут; установка зависимостей и полная сборка займут столько времени, сколько требует ваш проект.

Ещё не арендуете узел? Apple Silicon M4 / M4 Pro, выделенная физическая машина — от $20.1 в день.

Проверка после получения · начните с неё

Сначала убедитесь, что можете подключиться к узлу

Перед регистрацией автоматизированных задач сохраните работающее графическое подключение, а затем проверьте SSH. Не отключайте вход по паролю, пока не проверили единственный доступный способ подключения.

  1. 01

    Получите данные для подключения

    Войдите в консоль, откройте сведения о нужном экземпляре и сверьте номер узла, адрес, имя пользователя и инструкции по подключению. Данные доступа доступны только в аккаунте — не копируйте их в текст заявки, настройки конвейера или репозиторий.

  2. 02

    Откройте рабочий стол и смените пароль

    Откройте браузерный удалённый рабочий стол из сведений об экземпляре и убедитесь, что видите macOS именно этого экземпляра. После первого входа смените пароль системного пользователя и сохраните его в менеджере паролей команды. Заранее определите, кто отвечает за продление и смену учётных данных.

  3. 03

    Настройте удалённый вход

    В настройках macOS проверьте параметр «Удалённый вход» в разделе общего доступа и разрешите доступ только нужным пользователям. Подключайтесь по адресу и порту из консоли; если используется нестандартный порт, явно укажите его в команде ssh.

  4. 04

    Проверьте вход по ключу

    Создайте отдельный SSH-ключ на рабочем компьютере и добавьте на узел только открытый ключ в authorized_keys. Не закрывая текущий сеанс, откройте другой терминал и проверьте вход по ключу. После этого можно менять остальные параметры аутентификации.

Проверьте права доступа на узле

mkdir -p ~/.ssh
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
whoami
sw_vers
uname -m

Проверьте результаты: имя пользователя должно совпадать с данными экземпляра, версия системы — соответствовать требованиям проекта, а архитектура Apple Silicon должна выводиться как arm64. При первом подключении по SSH проверьте подлинность узла, если появится запрос на подтверждение отпечатка. Не отключайте проверку ключа узла ради подключения.

После подключения · сначала запустите команды

Сначала проверьте команды вручную, потом подключайте CI

Ниже приведён пример формата вывода, а не результаты проверки вашего узла. Пример использует проект TeamApp: замените workspace, scheme и параметры подписи на значения из своего репозитория.

glide-m4 — ssh
$ ssh "$NODE_USER@$NODE_ADDRESS"
Authenticated using "publickey".
$ uname -m
arm64

$ xcodebuild -workspace TeamApp.xcworkspace \
  -scheme TeamApp -configuration Release \
  -destination 'generic/platform=iOS' \
  -archivePath build/TeamApp.xcarchive archive
** ARCHIVE SUCCEEDED **

$ bundle exec fastlane gym --scheme TeamApp
Successfully exported and compressed dSYM file
Successfully exported and compressed ipa file
Successfully generated ipa file:
build/TeamApp.ipa

Успешный вход по SSH ещё не означает, что среда готова

После подключения по SSH проверьте Ruby, Bundler и зависимости проекта. По возможности используйте зафиксированные в репозитории версии, чтобы глобальным обновлением не менять среду сборки всей команды.

Проверка: тот же пользователь может открыть репозиторий и установить зависимости.

Архивацию и экспорт проверяйте отдельно

Если архив создан, но экспорт IPA завершился ошибкой, сначала проверьте способ экспорта, сертификат подписи и профиль обеспечения. Сохраните первое сообщение об ошибке вместе с контекстом, а не только последнюю строку сбоя.

Проверка: в целевом каталоге есть артефакт сборки, который можно использовать в следующих задачах.

Автоматизация · подключите репозиторий команды

Направляйте задачи на этот Mac с помощью понятных меток

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

GitHub Actions self-hosted runner

В настройках Actions репозитория или организации добавьте self-hosted runner и выберите macOS и ARM64. Выполните команды загрузки, проверки и регистрации, предложенные на странице. Не используйте устаревшие установочные пакеты из неизвестных источников.

Для регистрации используйте отдельного системного пользователя и добавьте метки назначения vmfly,ios-build и другие. В workflow укажите нужные метки в параметре runs-on , чтобы задача не запускалась в общей среде выполнения.

runs-on: [self-hosted, macOS, ARM64, vmfly, ios-build]

Проверка: в панели управления runner отображается как доступный, а запущенная вручную задача выполняется на этом узле.

GitLab Runner

Используйте версию Runner, совместимую с вашей средой GitLab, и получите токен аутентификации по инструкции для проекта или группы. В macOS выберите shell executor и присвойте узлу метку macos-arm64 и метки назначения.

Укажите те же tags в задаче конвейера. Убедитесь, что рабочий каталог Runner принадлежит пользователю, от имени которого он работает. Сертификаты, кэш зависимостей и артефакты должны быть доступны тому же пользователю — иначе команда сработает в интерактивном терминале, но завершится ошибкой в автоматической задаче.

ios_archive:
  tags:
    - macos-arm64
    - ios-build
  script:
    - bundle exec fastlane gym

Проверка: тестовая задача выводит архитектуру системы и видит инструментарий, необходимый проекту.

Проверьте восстановление после перезагрузки

Для GitHub runner в каталоге регистрации выполните сервисный скрипт ./svc.sh install и ./svc.sh start. Для GitLab Runner выполните команды согласно способу установки: gitlab-runner install и gitlab-runner start. Не настраивайте для одного runner сразу два механизма автозапуска.

Службы macOS, работающие как пользовательский LaunchAgent, обычно зависят от сеанса входа этого пользователя. Проверьте фактическую конфигурацию службы и пользователя, от имени которого она запущена: включение при запуске системы не означает, что пользователь сборки вошёл в систему. Когда задачи публикации не выполняются, проверьте запуск после перезагрузки, пути, доступ к связке ключей и экспорт артефактов.

Храните материалы для подписи в защищённом месте

Передавайте сертификаты сборки и профили обеспечения утверждённым командой защищённым способом. Для подписи сертификату нужен соответствующий закрытый ключ — одного открытого сертификата недостаточно. Храните пароль разблокировки и токены автоматизации в защищённых переменных CI и ограничьте список веток и задач, которым они доступны.

Командам, использующим fastlane match, следует придерживаться действующих правил хранения и доступа. При чтении имеющихся материалов для подписи в CI по возможности используйте режим только для чтения. Прежде чем разбираться с самой командой архивации, проверьте bundle identifier, команду разработчиков, способ экспорта и срок действия профиля обеспечения.

Для автоматизированных задач без участия пользователя обеспечьте доступ к нужной связке ключей. Не храните долговременные пароли в скриптах в открытом виде и не выводите в журнал все переменные окружения. Перед передачей журнала удалите из него закрытые ключи, токены, пароли и содержимое материалов для подписи.

Проверка инструментария · воспроизводимые версии

Зафиксируйте путь к Xcode, управляйте кэшем отдельно

Сначала проверьте текущую среду узла, а затем решите, нужно ли устанавливать версию для проекта. Не считайте, что runner использует ту же версию Xcode, которая выбрана в графическом интерфейсе.

Проверьте выбранную версию; замените путь на фактический каталог установки

xcodebuild -version
xcode-select -p
xcrun simctl list runtimes

sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer
xcodebuild -checkFirstLaunchStatus

Несколько версий Xcode

Используйте понятные имена приложений для разных версий Xcode. Если проекты на общем узле требуют разных версий, задавайте DEVELOPER_DIRдля конкретной задачи вместо смены системной версии перед каждой сборкой.

Проверка: в журнале фактической задачи runner выведите xcodebuild -versionи убедитесь, что версия соответствует требованиям проекта.

Среды выполнения симулятора

Установите нужные проекту среды выполнения в настройках Xcode, а затем проверьте доступные устройства командой xcrun simctl list . В UI-тестах явно задайте destination, чтобы задача не ожидала отсутствующую версию системы или устройство.

Проверка: сначала отдельно запустите нужный симулятор, затем выполните минимальный набор UI-тестов.

DerivedData и артефакты сборки

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

Проверка: для зависимостей, кэша и IPA выделены понятные каталоги, а свободного места достаточно для следующей архивации.

Установите компоненты, необходимые для первого запуска Xcode, до подключения автоматизации. Если интерактивный терминал находит команду, а CI — нет, сравните пользователя, PATH, рабочий каталог и способ инициализации shell. Не переустанавливайте все зависимости, не проверив эти параметры.

Графическое подключение · запасной вариант для работы

Выберите способ подключения под задачу отладки

Браузерный рабочий стол удобен для первоначальной настройки, для длительной работы с графическим интерфейсом можно использовать клиентское подключение, а сборки без участия пользователя запускать через SSH и runner. Не храните исходный код и артефакты только в одном из этих графических сеансов.

Рекомендации для начала работы; задержка сети и производительность изображения не гарантируются.
Способ подключения Подходящие задачи Начальная настройка Что проверить при задержках
Браузерный удалённый рабочий стол Первый вход, системные настройки, временный просмотр процесса сборки Откройте сведения об экземпляре в консоли; начните с одного экрана и умеренного разрешения Локальная сеть, масштаб браузера и количество одновременно открытых сеансов рабочего стола
VNC-клиент Длительная работа с графическим интерфейсом, настройка кодирования и качества изображения в клиенте Настройте подключение по инструкции для экземпляра; начните с автоматического кодирования или сбалансированного качества Постепенно снижайте качество или глубину цвета, меняя по одному параметру за раз
Общий доступ к экрану macOS Отладка и вспомогательная работа на рабочем столе с локального Mac Используйте поддерживаемый экземпляром способ подключения; начните с одного экрана с разрешением 1920 × 1080 Высокое разрешение, динамичное изображение и подключение через разные сети — сначала снизьте разрешение и сравните результат

Разделяйте задержки изображения и сборки

Шлейфы изображения на рабочем столе не означают, что сборка замедлилась. По SSH проверьте вывод задачи и загрузку ресурсов, чтобы понять, продолжается ли сборка. И наоборот, плавное изображение не гарантирует, что подпись, загрузка зависимостей или доступ к удалённому репозиторию работают правильно.

При проблемах с подключением запишите способ подключения, время и часовой пояс, тип локальной сети, а также доступность SSH. Меняя настройки удалённого входа или общего доступа к экрану, сохраните текущий рабочий сеанс, чтобы не потерять все способы подключения.

Управление подпиской · сначала проверьте заказ

Согласуйте изменения в счёте с графиком сборок

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

Продление и окончание срока

Проверьте в консоли текущую подписку, дату окончания и неоплаченные счета. После оплаты ещё раз проверьте статус подписки. До окончания срока скопируйте код, резервные копии сертификатов и артефакты сборки в защищённое командное хранилище. Не используйте узел с истекающей арендой как постоянное хранилище резервных копий.

После окончания срока узел без продления отключается, а его диск полностью стирается. Заранее перенесите все данные, которые нужно сохранить.

Смена конфигурации и расширение хранилища

Glide M4: Apple Silicon M4, 16 ГБ памяти и SSD на 256 ГБ; Cruise M4 Pro: Apple Silicon M4 Pro, 64 ГБ памяти и SSD на 2 ТБ. Перед сменой конфигурации уточните порядок действий через заявку в поддержку. Это не мгновенное увеличение памяти исходной машины.

При оформлении заказа проверьте варианты с SSD на +1 ТБ, +2 ТБ и подключением Thunderbolt 5. Чтобы изменить конфигурацию уже арендованного узла, сначала отправьте заявку и уточните порядок действий.

Проверка оплаты и зачисления

Поддерживаются только USDT-TRC20 и Visa / Mastercard / Amex через Stripe. Расчёты производятся в долларах США. Доступность платёжного шлюза определяется ответом интерфейса; выделение физической машины начинается после подтверждения оплаты.

Если статус оплаты не обновился, приложите номер заказа и подтверждение платежа; для USDT также укажите хеш транзакции. Не платите повторно и не отправляйте полный номер карты.

Передайте команде поддержки данные о проблеме

Если у вас уже есть аккаунт, создайте заявку в консоли и отслеживайте её там. Укажите номер узла, время и часовой пояс ошибки, шаги для её воспроизведения и фрагмент журнала без конфиденциальных данных. Если вы ещё не стали клиентом или не можете войти, контактные данные support@vmfly.com доступны на странице связи.

Опишите ожидаемый и фактический результат, а также укажите, доступны ли ещё SSH, рабочий стол и runner. Не прикладывайте пароли, закрытые ключи и полные данные платёжной карты.