Найти в руководстве

Сборка iOS с нуля

Пишите код на Windows или Linux, а собирайте iOS-приложение на облачном Mac. Сначала подключитесь, затем проверьте инструменты и настройте зависимости и подпись.

Уже оформили заказ? Проверьте статус инстанса и данные для подключения в панели управления. Платёжные данные не являются паролем для подключения.

Сначала настройте среду

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

  1. Проверьте данные для подключения

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

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

  2. Войдите в macOS

    В локальном VNC-клиенте отдельно укажите адрес, порт и пароль. При первом подключении выберите невысокое разрешение и проверьте работу клавиатуры, мыши и окон.

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

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

  3. Проверьте инструменты разработки

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

    xcode-select -p
    xcodebuild -version
    xcodebuild -showsdks

    Если нет iOS SDK, сначала установите недостающие компоненты Xcode. Лицензионное соглашение принимайте только при соответствующем запросе. Не пытайтесь скрыть отсутствие SDK, меняя каталог.

Flutter

Начните с doctor

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

Установите необходимые инструменты

Подготовьте Flutter SDK, полную версию Xcode и CocoaPods. Если в проекте зафиксированы версии Flutter или Ruby, сначала установите их в соответствии с настройками репозитория. Так локальная среда и машина для сборки будут использовать одинаковые версии.

Запустите диагностику и по очереди устраните замечания по инструментам iOS. Предупреждение о подключении устройства не всегда мешает созданию архива, а вот отсутствие Xcode, SDK или настроек подписи нужно исправить заранее.

Различайте два вида проверки

Чтобы проверить, проходит ли компиляция, сначала можно выполнить release-сборку без подписи. Она не заменяет подписанный установочный пакет и не подходит для распространения приложения.

Перед экспортом .ipa проверьте в Xcode раздел Signing & Capabilities: Team, Bundle Identifier, сертификат и профиль подготовки. Затем выполните сборку для выпуска.

Выполняйте команды по порядку

flutter --version
flutter doctor -v
flutter pub get
flutter build ios --release --no-codesign
flutter build ipa --release

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

Сначала определите, на каком этапе произошёл сбой, и только потом очищайте кеш
Признак ошибки Что сделать сначала Чего не делать в первую очередь
CocoaPods не установлен Проверьте, установлен ли CocoaPods и находит ли текущий терминал команду pod. Не удаляйте сразу весь проект iOS.
Нет профилей / ошибка подписи Проверьте, соответствуют ли друг другу Bundle Identifier, Team и тип экспорта, а также не истёк ли срок действия профиля подготовки. Не смешивайте ошибки зависимостей с ошибками подписи.
Целевая версия iOS Сверьтесь с требованиями плагинов, задайте одинаковую минимальную версию iOS в проекте и Podfile, затем установите зависимости. Не меняйте только один target, а затем сразу не запускайте архивацию повторно.

React Native

Зафиксируйте версии зависимостей

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

Сначала установите JS-зависимости

Выберите npm, Yarn или другой менеджер пакетов, указанный в файле блокировки проекта. Приведённая ниже команда подходит для проекта npm с package-lock.json. В остальных случаях используйте принятую в проекте команду установки.

Если в репозитории есть Gemfile, используйте Bundler, чтобы зафиксировать версию CocoaPods. Если Gemfile нет, запускайте pod нужной проекту версии напрямую. Не смешивайте глобальные инструменты с инструментами проекта.

Затем откройте workspace

После установки Pods откройте файл .xcworkspace в каталоге iOS, а не только .xcodeproj. Выберите нужную схему приложения и создайте архив с конфигурацией Release.

Перед созданием архива проверьте номер версии, номер сборки и настройки подписи. После успешной архивации экспортируйте приложение через Organizer для тестирования или распространения. Сборка для симулятора не заменяет пакет для установки на устройство.

Воспроизведите среду проекта

node --version
ruby --version
npm ci
bundle install
cd ios
bundle exec pod install

Две команды Bundler применимы, только если в проекте есть Gemfile. Если установка завершилась ошибкой, сначала сохраните первое сообщение об ошибке и сведения о версиях, а уже потом пробуйте исправить проблему.

Проверьте Hermes отдельно

Если сборка Hermes завершается ошибкой, сначала проверьте совместимость версий React Native и Xcode, файла блокировки Pods и нативных зависимостей. Если в журнале сказано, что скрипт не может найти Node, проверьте путь к Node в настройках скрипта сборки. Не отключайте Hermes и не удаляйте все файлы блокировки: это изменит работу проекта и набор зависимостей.

Unity

Перенесите и экспортируйте проект

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

Сначала проверьте модули

Убедитесь, что ваша версия и способ установки Unity позволяют экспортировать проект iOS на этом компьютере, и установите соответствующий модуль iOS Build Support. Если экспорт на локальном компьютере невозможен, перенесите проект Unity на Mac и соберите его в той же версии редактора.

Перед экспортом проверьте Bundle Identifier, backend для скриптов, минимальную версию ОС и настройки платформ плагинов. Сохраните использованные параметры.

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

Упакуйте и перенесите экспортированный проект Xcode вместе с ресурсами, нативными плагинами и скриптами сборки. После распаковки проверьте структуру каталогов, чтобы не пропустить скрытые настройки или случайно не перенести только .xcodeproj.

Если плагину нужны CocoaPods, сначала выполните требуемые им шаги установки зависимостей, затем откройте созданный workspace. Не запускайте сборку прямо из временного архива.

Ищите ошибку по этапам

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

Для крупных наборов ресурсов можно рассмотреть тариф Pro: M4 Pro / 64GB / 2TB SSD. Сначала проверьте объём ресурсов и доступное место — не выбирайте конфигурацию только по названию проекта.

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

Разберитесь в терминах

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

Физический узел
Физическое оборудование Mac, на котором работает macOS. Расположение выбранного узла влияет на удалённое управление и передачу файлов, но не меняет требования к подписи проекта.
Выделенный
На срок аренды вам выделяется отдельный физический Mac, а не виртуальная машина. Вы не делите процессор и память с другими пользователями, но самостоятельно отвечаете за права доступа к проекту и учётные данные для сборки.
VNC
Способ просматривать удалённый графический рабочий стол и управлять им. Удобен при первой настройке Xcode и проверке архивации. Скорость отклика зависит от локальной сети и разрешения экрана.
self-hosted runner
Исполнитель CI, установленный на машине под управлением вашей команды. Сборка выполняется на этом Mac. Команда должна настроить токен регистрации, права задач и правила очистки.
Унифицированная память
Общая память Apple Silicon для задач процессора и графики. Её объём зависит от размера проекта, параллельной компиляции и количества одновременно запущенных инструментов.
Сертификат подписи
Учётные данные, подтверждающие личность при подписи приложения. Для подписи обычно также нужен соответствующий приватный ключ. Если импортировать сертификат без связанного ключа, подписать приложение всё равно не получится.
Provisioning Profile
Профиль, связывающий идентификатор приложения, права на подпись и способ распространения. Он должен соответствовать сертификату, Team, возможностям приложения и типу экспорта.
.ipa
Пакет приложения для устройств iOS. Само наличие файла не гарантирует установку на любое устройство: доступность установки или распространения зависит от подписи и способа экспорта.

Проверьте всё после сборки

Скачайте результат сборки и заранее продумайте срок аренды и работу с данными. Закрытие окна удалённого рабочего стола не прекращает аренду.

Работа ещё не закончена. Как продлить аренду?

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

Сборка готова. Как остановить аренду?

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

Что будет с файлами после окончания срока?

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

Какие способы оплаты доступны для продления?

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

Опишите ошибку подробно

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

Укажите условия воспроизведения

Укажите номер заказа, версии фреймворка и Xcode, последовательность действий и время сбоя с часовым поясом. Для проблем со сборкой приложите первую ошибку и строки журнала до и после неё, а не только последнюю строку «сбой».

Удалите конфиденциальные данные

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

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

На каком шаге возникла проблема?

Укажите номер заказа и приложите первое сообщение об ошибке — разберёмся с конкретным шагом.