Памятка по сборке

Что делать на Mac
после написания кода?

Разрабатывайте локально на Windows или Linux, а в день сборки перенесите проект на облачный Mac. Сначала проверьте подключение и окружение, затем восстановите зависимости, импортируйте материалы для подписи и соберите приложение для iOS с помощью своего фреймворка.

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

Уже арендовали Mac? Начните со списка переноса ниже. Данные для подключения и состояние инстанса доступны только в консоли после входа.

Разделите перенос на этапы

Для проекта, инструментов и CI нужны разные подходы.

Локальный проект с Mac или Windows можно восстановить из репозитория. Сначала перенесите воспроизводимые настройки, затем конфиденциальные материалы. Не копируйте целиком кеш со старой машины.

Передача проекта

Заберите проект и материалы для подписи

Клонируйте проект из Git-репозитория, к которому у вас есть доступ. Передавайте адрес репозитория через переменную окружения и не сохраняйте токен доступа в истории команд или на скриншотах.

  1. Синхронизируйте ветки и подмодули, сохраните lock-файлы фреймворка и менеджера пакетов.
  2. Если нужна подпись, передайте сертификат и профиль provisioning по защищённому каналу. Импортируйте только материалы, необходимые для этой задачи.
  3. Для больших файлов используйте SSH, если передача по SSH включена и доступна. Возможность загрузки файлов через браузерный рабочий стол зависит от интерфейса текущего подключения.
git clone "$PROJECT_REPOSITORY" project
cd project
git submodule update --init --recursive
git rev-parse HEAD
git status --short

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

Настройка окружения

Сначала проверьте версии, затем установите зависимости

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

  1. Проверьте путь и версию Xcode, доступные SDK и убедитесь, что инструменты командной строки указывают на нужную версию.
  2. Восстановите необходимые проекту инструменты через Homebrew и Brewfile, затем проверьте CocoaPods, Flutter SDK и Node.
  3. Для проекта Unity используйте совместимую версию редактора и проверьте в Unity Hub наличие iOS Build Support.
xcode-select -p
xcodebuild -version
xcodebuild -showsdks
brew --version
brew bundle check
pod --version
flutter --version
node --version

Проверка: запускайте её в каталоге с Brewfile, если он есть. Если команда не найдена, сначала установите соответствующий инструмент. Условия лицензии Unity проверьте самостоятельно.

Подготовка CI

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

Сначала выполните сборку в интерактивном сеансе и убедитесь, что зависимости и подпись настроены правильно. Затем зарегистрируйте временный self-hosted runner, чтобы не смешивать ошибки окружения с проблемами конвейера.

  1. Скачайте на платформе CI пакет runner для macOS и нужной архитектуры процессора, а также краткосрочный токен регистрации.
  2. Зарегистрируйте runner в распакованном каталоге по инструкциям платформы. Проверьте метки задач, рабочий каталог и пользователя запуска.
  3. Если в проекте уже настроен fastlane, сначала просмотрите список lane, а затем запустите принятую в команде процедуру сборки.
./config.sh --url "$CI_REPOSITORY_URL" --token "$RUNNER_TOKEN"
./run.sh

bundle check
bundle exec fastlane lanes

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

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

Выберите свой тип проекта

Три способа собрать приложение — и результат не сводится к сообщению «сборка успешна».

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

Flutter: соберите архив и ipa из проекта

Требования:Flutter SDK соответствует требованиям проекта; доступны проект iOS, зависимости плагинов и инструментарий Xcode; материалы для подписи соответствуют идентификатору приложения.

flutter doctor -v
flutter pub get
flutter build ipa

Сначала устраните проблемы flutter doctor -v с инструментарием iOS, указанные в выводе команды. Если не удаётся восстановить зависимости, проверьте сеть, ограничения версий и доступ к закрытым пакетам. Не запускайте архивирование снова и снова, пытаясь скрыть ошибки, которые нужно устранить заранее.

Ожидаемый результат:После успешной сборки проверьте build/ios/archive на наличие архива, а также build/ios/ipa на наличие экспортированных файлов. Фактические каталоги и поведение экспорта зависят от версии Flutter и вывода сборки.

Если архив создан, но ipa нет, проверьте ошибки экспорта и подписи. Завершение сборки не отправляет установочный пакет в TestFlight автоматически.

React Native: архивируйте из правильной рабочей области

Требования:Node, менеджер пакетов и lock-файл проекта должны соответствовать друг другу. Если проект использует CocoaPods, установите зависимости iOS и убедитесь, что выбрана нужная схема.

node --version
bundle check
cd ios
bundle exec pod install
open .

Если в проекте есть Gemfile, используйте принятую в нём среду Bundler. Если Bundler не используется, устанавливайте зависимости по процедуре команды. Откройте в Xcode созданный файл .xcworkspace— не открывайте файл проекта без зависимостей Pods.

Ожидаемый результат:Выберите нужную схему и подходящий тип устройства для архивации. Создайте архив через Product → Archive, чтобы получить файл .xcarchiveЗатем в Organizer экспортируйте его или загрузите в соответствии со способом распространения.

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

Unity: после экспорта настройте проект в Xcode

Требования:Версия редактора Unity соответствует проекту, модуль iOS доступен, сторонние нативные плагины и ресурсы на месте, а лицензия разрешает использовать редактор.

xcodebuild -version
xcodebuild -list -project "$EXPORTED_XCODE_PROJECT"

В Unity выберите платформу сборки iOS и экспортируйте проект Xcode. Для проектов на IL2CPP необходимо скомпилировать сгенерированный нативный код. Один только экспорт проекта ещё не создаёт установочный пакет, готовый к распространению.

Ожидаемый результат:В Xcode настройте подпись, зависимости и параметры цели, затем выполните Archive. После создания архива экспортируйте ipa или загрузите его согласно процедуре распространения. Если плагин создал рабочую область, продолжайте работу в ней.

Для крупных проектов заранее оцените потребность в памяти и месте для промежуточных файлов. В каталоге есть конфигурация для больших проектов: Apple Silicon M4 Pro / 64GB RAM / 2TB SSD. Фиксированное время компиляции не гарантируется.

После первой успешной сборки сохраните и всё необходимое для её повторения.

Запишите хеш коммита, версии Xcode и фреймворка, lock-файл зависимостей, используемую схему, команду сборки и путь к артефактам. Добавьте общедоступные настройки в систему контроля версий, а закрытый ключ подписи и токены доступа храните отдельно. При следующей посуточной аренде Mac восстановите окружение по этим записям, а не настраивайте всё наугад.

Сначала выясните, тормозит рабочий стол или сборка

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

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

  1. 01

    Проверьте узел и сеть

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

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

  2. 02

    Снизьте нагрузку на изображение

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

    Важно: это может снизить нагрузку на кодирование и передачу изображения, но не сократит физическую задержку сети и не ускорит компиляцию на CPU.

  3. 03

    Сравните с клиентом VNC

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

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

  4. 04

    Сохраните данные об ошибке

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

    Важно: снимок экрана может помочь с диагностикой, но не заменяет текст ошибки, который можно скопировать. Не ограничивайтесь сообщениями «всё тормозит» или «сборка не работает» — добавьте шаги для воспроизведения.

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

Всего доступно 5 узлов. Диапазоны относятся к указанным регионам и не гарантируют задержку от любого города до выбранного узла.

Узел → регион обслуживания → справочный диапазон задержки туда и обратно
УзелРегион обслуживанияЗадержка туда и обратно
СингапурЮго-Восточная Азия20~50ms
ТокиоВосточная Азия30~60ms
СеулСеверо-Восточная Азия30~50ms
ГонконгЮжный Китай и Юго-Восточная Азия20~40ms
Восток СШАВосточная часть Северной Америки и Западная Европа25~35ms

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

Перед переносом проверьте заказ

Прежде чем менять узел, разделите проект и аренду.

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

Сначала уточните условия, затем действуйте с текущим инстансом

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

Если нужна отдельная аренда, сначала проверьте конфигурацию нового заказа, срок аренды и текущую доступность. Завершение или продление старого заказа по-прежнему регулируется условиями этого заказа и сервиса.

Относитесь к новому инстансу как к новому Mac

Сначала отправьте незакоммиченный код в репозиторий и экспортируйте артефакты сборки. Отдельно сохраните необходимые настройки, сертификаты и профили provisioning. На новом инстансе заново проверьте версии инструментов, права доступа и подпись. Не считайте, что содержимое старого диска уже перенесено.

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

Составьте первое обращение так, чтобы проблему можно было воспроизвести

Укажите, на какой машине и на каком шаге возникла проблема.

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

Перед отправкой соберите эти сведения

  • Заказ и узел:номер заказа, модель Mac, текущий узел и инстанс, на котором возникла проблема.
  • Время и окружение:время возникновения, часовой пояс, локальная операционная система, версия браузера или клиента VNC.
  • Действия и результат:с какой страницы или команды вы начали, что должно было произойти и что произошло фактически.
  • Ошибка и материалы:текст ошибки, скриншот без конфиденциальных данных, фрагменты соответствующих логов и сведения о том, повторяется ли проблема.
  • Что уже пробовали:смена сети, настройка качества изображения, повторное подключение и результат каждого действия.

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

Шаблон текста обращения

Заполните поля ниже в обращении через консоль. Загружать весь проект не нужно.

Что проверить
Номер заказа, узел, модель Mac
Время возникновения
Точное время и часовой пояс
Как воспроизвести
Порядок действий, команда, текст ошибки
Окружение
Версии браузера, Xcode и фреймворка
Результаты проверки
Что уже пробовали и что изменилось

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

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

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

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

Проверьте условия сервиса

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

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

Разобраться с вопросом

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

Часто задаваемые вопросы

Выбрать узел

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

Как выбрать узел

Ознакомиться с условиями

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

Условия обслуживания

Проверьте окружение перед сборкой, а при сбое приложите записи.

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