Сначала найдите причину

Не останавливайте сборки

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

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

Начните с нужного этапа

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

Аккаунт и оплата

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

Подключение и удалённый рабочий стол

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

Xcode и подпись

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

Интеграция с CI/CD

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

Данные и переустановка

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

Проверьте одной командой

Частые вопросы о сборках Mac

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

Как переключаться между версиями Xcode с помощью xcode-select?

Сначала проверьте текущую папку разработчика и версию, а также убедитесь, что нужная версия Xcode установлена. В примере системная папка по умолчанию меняется на /Applications/Xcode.app; для другой версии укажите фактический путь к приложению.

xcode-select -p
xcodebuild -version
sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer
xcodebuild -version
xcrun --find swift

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

DEVELOPER_DIR=/Applications/Xcode.app/Contents/Developer \
xcodebuild -list -workspace MyApp.xcworkspace

После переключения выведите список Scheme и выполните пробную сборку Archive. Если не хватает компонентов платформы или не завершена первоначальная настройка, сначала запустите нужные инструменты через графический интерфейс macOS, а затем возобновите автоматические задачи.

Как установить сертификат распространения и профиль подготовки?

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

  1. Войдите в macOS под пользователем, от имени которого запускается сборка, откройте «Связку ключей» и импортируйте сертификат в его связку ключей.
  2. Разверните сертификат и убедитесь, что под ним указан соответствующий закрытый ключ. Проверьте действующие идентификаторы подписи командой ниже.
  3. Установите профиль подготовки в соответствии с используемой версией Xcode. В настройках подписи проекта проверьте Team, Bundle Identifier и способ распространения.
  4. По отдельности проверьте настройки подписи приложения, Widget и Extension, затем выполните Archive и проверьте экспорт.
security find-identity -v -p codesigning

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

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

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

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

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

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

Как продлить аренду до её окончания?

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

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

Если статус счёта не совпадает со статусом экземпляра, укажите номер заказа, номер счёта и данные для поиска транзакции. Не пытайтесь исправить статус повторной оплатой и не отправляйте в заявке полный номер карты. До окончания аренды сохраните артефакты и нужные файлы: продление не заменяет резервное копирование.

Не удаётся подключиться по SSH или к удалённому рабочему столу. Что проверить?

Сначала проверьте в консоли адрес и порт узла, имя пользователя и состояние экземпляра. Отличайте тайм-аут подключения от ошибки аутентификации: в первом случае проверьте доступность сети, во втором — имя пользователя, пароль или ключ. У SSH и VNC разные данные подключения; не используйте их порты взаимозаменяемо.

ssh -v -p PORT USER@HOST

Замените PORTнаUSERиHOST фактическими данными. Если в журнале указано, что отпечаток ключа хоста изменился, сначала выясните причину по надёжной информации в консоли или через заявку. Не отключайте проверку подлинности хоста.

Удалённый рабочий стол подходит для проверки графического интерфейса macOS, связки ключей и настроек Xcode; SSH — для командной строки и CI. Перед отправкой журнала удалите конфиденциальные имена пользователей, адреса и локальные пути, оставив только тип ошибки и последовательность событий.

Почему задача всё время ожидает после регистрации self-hosted runner?

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

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

whoami
pwd
xcode-select -p
xcodebuild -version
security find-identity -v -p codesigning

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

Проект компилируется, но Archive завершается с ошибкой. Как найти причину?

Сначала убедитесь, что выбраны нужные workspace, общий Scheme и конфигурация Release. Archive и сборка для симулятора — разные процессы; подпись, архитектуру и параметры экспорта для устройства нужно проверять отдельно.

xcodebuild -list -workspace MyApp.xcworkspace
xcodebuild archive \
  -workspace MyApp.xcworkspace \
  -scheme MyApp \
  -configuration Release \
  -destination 'generic/platform=iOS' \
  -archivePath build/MyApp.xcarchive

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

Не хватает места на диске. Можно ли сразу удалить весь кэш?

Сначала проверьте использование диска и состояние задач, затем отделите кэш, который можно создать заново, от артефактов, которые нужно сохранить. Не удаляйте каталог, пока его использует выполняющаяся задача; не считайте исходный код, материалы для подписи или ещё не загруженный Archive кэшем.

df -h
du -sh ~/Library/Developer/Xcode/DerivedData
du -sh ~/Library/Developer/Xcode/Archives

Задайте отдельные правила хранения для кэша и артефактов. После очистки первая компиляция и загрузка зависимостей могут идти медленнее — считайте её проверкой сборки с чистого состояния. Если места постоянно не хватает, сначала оцените рост проекта и артефактов, затем подберите более подходящую конфигурацию или дополнительный SSD.

Говорите с поддержкой на одном языке

Восемь распространённых терминов об оборудовании, подключении, сборке и подписи. Указывайте конкретные объекты — так потребуется меньше уточнений.

Физический узел
Mac mini, на котором непосредственно работает macOS. XCRent предоставляет отдельный физический компьютер, а не виртуальную машину. Данные узла помогают найти экземпляр и не являются номером CI-задачи проекта.
Выделенный
В течение срока аренды физическим узлом пользуется один клиент. Задачи самого клиента всё равно конкурируют за процессор, память и диск, поэтому параллелизм и изоляцию рабочих папок нужно настраивать самостоятельно.
VNC
Способ подключения к удалённому рабочему столу для работы с графическим интерфейсом macOS. Подходит для проверки настроек Xcode, связки ключей и состояния системы. Фактический адрес и данные для входа доступны в консоли после авторизации.
SSH
Защищённое подключение к командной строке для выполнения команд, передачи файлов и автоматизации развёртывания. При аутентификации по ключу защищайте закрытый ключ и проверяйте подлинность сервера. SSH — не протокол удалённого рабочего стола.
self-hosted runner
Процесс CI, запущенный на собственном узле. Он получает задачи проекта и выполняет их от имени заданного пользователя. Возможность запуска зависит от состояния подключения, меток, прав доступа и рабочей папки.
Archive
Архив сборки Xcode, содержащий приложение и связанные данные для последующего экспорта. Успешное создание Archive не означает, что экспорт прошёл: отдельно проверьте подпись и настройки распространения.
Профиль подготовки (Provisioning Profile)
Файл подписи, который задаёт идентификатор приложения, разрешённые возможности, сертификаты и область распространения. Он должен соответствовать настройкам Target и не заменяет сертификат распространения с соответствующим закрытым ключом.
Унифицированная память
Общая для CPU и GPU память в Apple Silicon. При одновременной компиляции, запуске симулятора и выполнении задач с моделями оценивайте общую нагрузку на память: нельзя выделить весь объём одному заданию.
Доступность и компенсация

Учитывайте месячную доступность, а не ошибки сборки

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

Месячная гарантия доступности

99.9%

Если месячная доступность ниже гарантированного уровня, срок аренды компенсируется пропорционально периоду недоступности. Для рассмотрения заявки укажите экземпляр, время сбоя и записи о подключении. Специалисты проверят серверные журналы и применимые условия.

Данные за последние 90 дней

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

Период
Последние 90 дней
Состояние данных на странице
Данные мониторинга не подключены
Период расчёта компенсации
Проверка помесячно

Какие данные сохранить

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

Отправьте заявку с данными для диагностики

Если вы уже арендуете узел, отправьте заявку через консоль. По вопросам до покупки, деловым запросам и сообщениям о безопасности пишите на support@xcoderent.com. Эти два канала предназначены для всех обращений в поддержку.

  1. 01

    Укажите экземпляр

    Укажите номер заказа, город размещения узла и конфигурацию. Узлы находятся в Сингапуре, Токио, Сеуле, Гонконге, восточной части США и западной части США. Укажите модель XR Build 16, XR Build 24 или XR Build Pro 64, а не просто «тот Mac для сборки».

  2. 02

    Опишите проблему

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

  3. 03

    Приложите минимальный сценарий воспроизведения

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

  4. 04

    Уточните масштаб проблемы

    Различайте сбой одного проекта, всех задач и подключение к узлу. Если другие задачи продолжают работать, укажите, какие проходят успешно, а какие завершаются с ошибкой. Это поможет специалистам определить, связана ли проблема с инструментами, проектом или экземпляром.

Где посмотреть статус заявки?

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

Не нашли ответ?

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