Сингапур
В первую очередь рассмотрите этот узел, если основная часть команды находится в Юго-Восточной Азии. Проверьте на практике и привычное подключение к Mac, и загрузку зависимостей.
Часовой пояс команды: UTC+8
От заказа до первой сборки — по шагам. Получите выделенный Mac, проверьте подключение, инструменты и подпись, а затем передайте ту же команду в CI.
Выделенный физический Mac mini, не виртуальная машина. Два тарифа на Mac с Apple M4 — от $19.2 в день, доступен 365 дней в году.
Уже есть заказ? Получите данные для подключения в консоли и продолжите с шага первого входа на этой странице.
На регистрацию, настройку, оплату и назначение Mac отведите примерно по 1 минуте — при удачном стечении обстоятельств весь процесс займёт около 4 минут. Это ориентировочное время настройки, а не гарантированный срок выдачи. Ориентируйтесь на статус в консоли: получение письма, подтверждение оплаты и назначение системы могут занять разное время.
Подготовьте рабочий адрес электронной почты, на который можно получить код подтверждения, пройдите регистрацию по подсказкам на странице и задайте пароль. Используйте почту, за которой постоянно следит кто-то из команды: так будет удобнее проверять заказы, продлевать аренду и отслеживать заявки. Не пересылайте коды подтверждения в общедоступные журналы сборки.
Выберите Push M4 S или Push M4 L, затем срок оплаты и узел. Для повседневного CI одного приложения можно начать с тарифа 16 ГБ, а для параллельного архивирования нескольких target — рассмотреть 24 ГБ. Фактическая доступность отображается в консоли в реальном времени.
Выберите USDT-TRC20 или оплатите картой Visa / Mastercard / Amex через Stripe. Доступные способы оплаты указаны на странице оформления заказа. При переводе в блокчейне проверьте сеть, адрес и сумму и дождитесь подтверждения в консоли. Отправленный платёж ещё не означает, что Mac уже готов.
После назначения Mac проверьте узел, адрес подключения, порт и имя пользователя в заказе или сведениях об инстансе, затем получите данные для SSH/VNC. Для обращения в поддержку достаточно номера заказа — пароль и закрытый ключ не передавайте.
Все 5 узлов доступны в двух конфигурациях выделенного Mac. Сначала выбирайте по расположению участников, которые чаще всего работают с машиной сборки, затем проверьте маршруты передачи данных между репозиторием, источниками зависимостей и хранилищем артефактов. Удобный часовой пояс не гарантирует низкую задержку в сети: отдельно проверьте работу через VNC и загрузку зависимостей.
В первую очередь рассмотрите этот узел, если основная часть команды находится в Юго-Восточной Азии. Проверьте на практике и привычное подключение к Mac, и загрузку зависимостей.
Часовой пояс команды: UTC+8
Подойдёт для команды, работающей преимущественно по будням в Японии. Зафиксируйте метку runner, чтобы задания не попадали на другие узлы.
Часовой пояс команды: UTC+9
Подойдёт, если участники команды в Корее часто работают через графический интерфейс. Проверьте отзывчивость рабочего стола из обычной офисной сети.
Часовой пояс команды: UTC+9
Рассмотрите этот узел для взаимодействия с Южным Китаем и Юго-Восточной Азией. Используйте удалённый рабочий стол для работы с интерфейсом, а SSH — для командной строки; журналы храните в системе сборки.
Часовой пояс команды: UTC+8
Рассмотрите этот узел, если в рабочее время в Северной Америке нужно взаимодействовать с машиной. Для передачи задач между регионами фиксируйте время в UTC.
Часовой пояс команды: UTC−5 / UTC−4
На востоке США часовой пояс меняется сезонно. Если в обоих регионах нужны частые сеансы работы, арендуйте узлы поближе к каждой команде и распределяйте задания через очередь CI. Даже на одном выделенном Mac необходимо ограничивать число параллельных ресурсоёмких задач.
Адрес, порт и имя пользователя берите из консоли — не используйте данные от другого заказа. Команды ниже запросят нужные значения. Перед запуском убедитесь, что на вашем компьютере установлен SSH-клиент.
Выполните команду в локальном терминале. При первом подключении проверьте отпечаток ключа сервера. Если в консоли нет данных для проверки, сначала уточните их через заявку в поддержку — не отключайте проверку подлинности сервера.
printf 'Адрес подключения: '
read -r MAC_HOST
printf 'Порт SSH: '
read -r MAC_PORT
printf 'Имя пользователя: '
read -r MAC_USER
ssh -p "$MAC_PORT" "$MAC_USER@$MAC_HOST"
После входа выполните whoami и sw_vers, чтобы проверить имя пользователя и сведения о системе. При настройке SSH-ключей загружайте только открытый ключ; закрытый ключ храните на своём устройстве или в хранилище секретов CI.
Используйте рабочий стол для подтверждений в графическом интерфейсе, а командную строку — для воспроизводимых сценариев. Если подключение прерывается по тайм-ауту, проверьте порт, состояние инстанса и локальную сеть, затем отправьте заявку в поддержку. Многократная смена пароля не поможет диагностировать проблемы сети.
Первую сборку нужно проверить по четырём пунктам: инструменты, проект, подпись и экспорт. Команды ниже подходят для проекта iOS с workspace. Если у вас только project, замените -workspace на -projectи укажите имя файла проекта.
Проверьте, какая версия Xcode выбрана для работы, а не только какие версии установлены в каталоге приложений. Если установлено несколько версий, переключитесь на путь к приложению, принятый в проекте, затем ещё раз проверьте версию Xcode и SDK.
xcode-select -p
xcodebuild -version
xcodebuild -showsdks
sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer
Укажите адрес репозитория, к которому у вас есть доступ на чтение. Для аутентификации используйте SSH-ключ или безопасное хранилище учётных данных — не добавляйте токен доступа прямо в команду. Сначала выполните предусмотренную проектом подготовку зависимостей, затем найдите workspace и схему.
printf 'Адрес репозитория: '
read -r REPOSITORY_URL
git clone "$REPOSITORY_URL" app
cd app
git rev-parse HEAD
find . -name '*.xcworkspace' -prune
xcodebuild -list -workspace MyApp.xcworkspace
Замените MyApp.xcworkspace и MyApp на реальные имена, подтверждённые на предыдущем шаге. Для сборки с подписью для устройства безопасно импортируйте подходящие сертификат и профиль подготовки и убедитесь, что процесс сборки может получить доступ к Связке ключей.
mkdir -p build
xcodebuild \
-workspace MyApp.xcworkspace \
-scheme MyApp \
-configuration Release \
-destination 'generic/platform=iOS' \
-derivedDataPath build/DerivedData \
-archivePath build/MyApp.xcarchive \
archive
ExportOptions.plist Файл должен соответствовать принятым в проекте настройкам подписи и распространения приложения — не копируйте его настройки у другой команды. Успешное создание архива не гарантирует успешный экспорт: сохраняйте коды завершения и журналы обоих этапов отдельно.
xcodebuild -exportArchive \
-archivePath build/MyApp.xcarchive \
-exportPath build/export \
-exportOptionsPlist ExportOptions.plist
test -d build/MyApp.xcarchive
find build/export -maxdepth 1 -type f -print
Запишите SHA коммита, версию Xcode, фактическое имя схемы и путь к артефакту. При первой ошибке начните с самого раннего сообщения: если не разрешаются зависимости, проверьте сеть и версии в lock-файле; при ошибке подписи — сертификат и профиль подготовки; при сбое экспорта — настройки экспорта. Не меняйте одновременно узел, инструменты и настройки подписи при повторном запуске.
Сначала вручную выполните сборку от имени того же пользователя, что будет работать в CI, и только потом зарегистрируйте собственный runner. Постоянная доступность Mac обеспечивает питание и работу машины, но автозапуск процесса runner, актуальность сертификатов и очередь заданий команда должна настраивать и проверять самостоятельно.
В настройках проекта или организации на платформе CI получите команду установки runner для macOS ARM64. Используйте регистрационные данные текущего проекта, а не устаревший токен. Метки должны указывать узел, архитектуру и назначение runner.
При первом подключении запустите только одну задачу сборки. Проверьте использование памяти, диска и время выполнения, а затем решите, сколько задач выполнять параллельно. Выделенный Mac не означает, что можно одновременно запускать все задачи архивирования.
После распаковки и регистрации runner GitHub Actions скрипты служб из комплекта можно запустить в каталоге установки. Эти команды не скачивают runner и не регистрируют его: сначала выполните предыдущий шаг по инструкции платформы CI.
./svc.sh install
./svc.sh start
./svc.sh status
Убедитесь, что скрипт сообщает о работающей службе, а на платформе CI runner отображается как доступный. LaunchAgent обычно требует активного сеанса пользователя. Для запуска без участия пользователя настройте и проверьте поддерживаемый для runner способ — установка службы сама по себе не гарантирует, что сборка запустится после перезагрузки.
Закройте терминал, из которого вручную запускали runner, и отправьте контролируемое задание из CI. Проверьте пользователя, выбранную версию Xcode, доступ к Связке ключей, каталоги кэша и загрузку артефактов. Для узла, предназначенного для работы без участия пользователя, проверьте состояние runner после восстановления. Перед перезагрузкой убедитесь, что другие задания не выполняются.
На выделенном Mac можно хранить DerivedData и кэш зависимостей. Ключ кэша должен учитывать как минимум инструменты, lock-файлы зависимостей и конфигурацию сборки. Прежде чем сохранять артефакты, настройте очистку, чтобы кэш не заполнил системный диск.
После проверки подключения и первой сборки запишите узел, инструменты и команды сборки в журнал передачи дел команды. Подробности о переключении версий и кэше — в руководстве; если нужны дополнительные мощности, сначала сравните тарифы.