Для лёгкой сборки одного проекта, модульных тестов и архивирования при низкой параллельности. Кэш зависимостей нужно регулярно очищать, чтобы рабочий каталог не занял всё локальное хранилище.
Арендовать ZoneMini M4 CoreОблачный Mac для задач после отправки кода
ZoneMini предоставляет постоянно работающие выделенные физические облачные Mac, а не виртуальные машины. Передавайте отправленный код фиксированному узлу, а отчёты о тестах, архивы, результаты моделей и готовые медиафайлы — в существующий конвейер поставки.
- Модель ресурсов
- Один заказ — один выбранный выделенный физический узел
- Масштаб каталога
- 3 конфигурации, 5 доступных узлов
- Варианты доступа
- SSH, графический интерфейс macOS и CI Runner
-
01Отправка кода Событие репозитория, расписание или ручной запуск ставят задачу в очередьINPUT
-
02Выполнение сборки Восстановление зависимостей, запуск тестов, подпись и создание архиваRUN
-
03Передача артефактов Передача IPA, журналов, отчётов, метрик модели или медиафайловOUTPUT
От триггера репозитория до проверки IPA — шесть воспроизводимых этапов
Стабильная облачная сборка iOS — это не просто команда Archive. Нужны фиксированный стек инструментов, управляемый кэш, ограниченные права подписи и чёткая проверка артефактов. Каждый этап должен оставлять отслеживаемый журнал, чтобы при сбое определить источник: зависимости, компиляция, подпись или экспорт.
-
01
Принять триггер репозитория
Запускайте сборку после слияния в основную ветку, публикации тега или ручного запуска. Записывайте имя ветки, хеш коммита, номер версии и номер сборки в контекст задачи, чтобы артефакт можно было сопоставить с исходным кодом.
-
02
Восстановить зафиксированные зависимости
Устанавливайте Swift Package, CocoaPods или JavaScript-зависимости по lock-файлу. Разделяйте кэш по проекту, версии инструментов и сводке lock-файла, чтобы разные ветки не использовали неподходящие зависимости.
-
03
Открыть права подписи
Разблокируйте нужные сертификаты и профили подготовки только на этапе сборки и ограничьте область чтения Runner. После завершения задачи закройте временный доступ; не записывайте в журналы закрытые ключи, токены или полные пароли.
-
04
Запустить тесты и архивирование
Сначала выполняйте статические проверки и модульные тесты, затем запускайте Xcode Archive. При сбое тестов немедленно прекращайте подпись и сохраняйте результаты тестов, вывод компилятора и неуспешные сценарии.
-
05
Экспортировать IPA
Создавайте IPA с помощью версионируемой конфигурации экспорта и одновременно сохраняйте dSYM, архив и журнал экспорта. Не оставляйте только финальный пакет: без остальных данных диагностика сбоев и возврат к версии будут затруднены.
-
06
Выполнить проверки перед загрузкой
Проверьте Bundle ID, номер версии, номер сборки, результат подписи, манифест конфиденциальности и изменения размера пакета. После успешной проверки передавайте артефакты на загрузку или согласование публикации.
Три конфигурации для трёх типов нагрузки сборки
Сначала оцените пиковое потребление памяти, количество параллельных задач и длительность одного запуска, а затем выбирайте модель. Не ориентируйтесь только на название проекта и не принимайте рост дискового кэша за вычислительную потребность.
Для повседневной разработки, конвейеров с несколькими ветками, нативной сборки React Native или Flutter и команд, которым требуется хранить больше кэша зависимостей.
Арендовать ZoneMini M4 PlusДля параллельных сборок с высокой нагрузкой, инференса больших моделей, крупных медиа-задач и длительных пакетных запусков. Задачи с большим потреблением памяти сначала проверяйте на этой конфигурации.
Арендовать ZoneMini M4 ProРассматривайте несколько фиксированных Runner как планируемый ресурс, а не общую рабочую станцию
Главная задача фермы сборки — не направлять любую задачу на любую машину, а закрепить за узлами стабильные роли. Метки, очереди, границы кэша, архивирование журналов и распределение по регионам нужно проектировать вместе, чтобы сбои можно было локализовать, а ёмкость — оценивать.
Разделяйте очереди по длительности и правам
Не объединяйте проверку отправок, релизное архивирование и задачи с большим потреблением памяти в одну очередь без правил. Для длительных задач задавайте отдельные метки, чтобы короткие тесты не ждали слишком долго.
Изолируйте кэш по проекту и версии
Ключ кэша зависимостей должен включать как минимум проект, стратегию ветвления, версию инструментов и сводку lock-файла. При проблемах с попаданием в кэш очищайте только проект, а не весь узел.
Архивируйте журналы сбоев единообразно
Сохраняйте идентификатор коммита, метку Runner, версию Xcode, сводку зависимостей, этап сбоя и обезличенный журнал. У журнала должен быть срок хранения; токены доступа недопустимы.
Размещайте узлы рядом с репозиторием и командой
Доступны узлы в Сингапуре, Японии (Токио), Южной Корее (Сеул), Гонконге и восточной части США. Учитывайте расположение репозитория, часовой пояс команды и направление передачи артефактов.
В React Native и Flutter узким местом обычно становится нативный слой
Код JavaScript или Dart можно разрабатывать в разных средах, но разрешение зависимостей iOS, тестирование симулятора, подпись и архивирование по-прежнему требуют macOS и Xcode. Фиксированный облачный Mac позволяет перенести эту часть с личных компьютеров в командный конвейер.
Разделяйте управление JavaScript- и нативными зависимостями
- Восстановление зависимостей:Установите пакеты Node.js по lock-файлу, затем перейдите в каталог iOS и восстановите зависимости CocoaPods.
- Границы кэша:Задайте отдельные ключи для кэша менеджера пакетов, кэша Pods и DerivedData; не кэшируйте весь рабочий каталог.
- Порядок тестирования:Сначала выполните проверку типов и тесты JavaScript, затем запустите нативные модульные тесты или проверку в симуляторе.
- Сборка с подписью:Ветка релиза вызывает фиксированную Scheme и создаёт Archive, IPA, dSYM и журнал экспорта.
- Стратегия веток:Функциональные ветки используются только для проверки, а права подписи открываются лишь для ветки-кандидата, чтобы не создавать релизный пакет при каждом коммите.
Ведите раздельные журналы этапов Dart и Xcode
- Проверка окружения:Зафиксируйте версии Flutter, Dart, CocoaPods и Xcode и выведите сводку версий в начале задачи.
- Нативные зависимости:Восстановите зависимости плагинов iOS и проверьте, требуются ли плагину дополнительные системные разрешения или минимальная версия развёртывания.
- Тестирование в симуляторе:Разделяйте тесты компонентов и тесты в симуляторе iOS; при сбое сохраняйте отчёт и снимки экрана.
- Архивирование с подписью:Создайте iOS Archive через контролируемую конфигурацию, затем проверьте параметры экспорта и результат подписи.
- Изоляция веток:Используйте разные рабочие каталоги для стабильной и экспериментальной веток, чтобы артефакты сборки и кэш не перезаписывали друг друга.
Если объявления зависимостей меняются, а lock-файл нет, воспроизвести расхождение между успешной локальной сборкой и сбоем CI будет сложно.
Перед обновлением плагина проверьте условия для Xcode, цели развёртывания и CocoaPods, а затем обновите фиксированные узлы.
Любой кэш должен удаляться и пересоздаваться; нельзя считать его единственным источником зависимостей.
Поручите узлам с большим объёмом памяти длительные эксперименты с моделями
Облачные Mac подходят для подготовки моделей, запуска инференса, записи метрик и экспорта результатов в фиксированной среде Apple Silicon. Это не замена платформе обучения, а среда для проверки локального инференса, пакетных экспериментов и наблюдения за ресурсами в целевой среде macOS.
ZoneMini M4 Pro
M4 Pro · 64GB · 2TB
Запишите версию модели, источник, сводку файлов, способ квантования и версию скрипта запуска. Большие файлы сначала проверьте на целостность, затем помещайте в каталог эксперимента.
Создавайте отдельное окружение для каждого эксперимента и фиксируйте пакеты Python и нативные зависимости. Не позволяйте временным обновлениям менять проверенную базовую конфигурацию.
Постепенно увеличивайте нагрузку по размеру пакета, длине входных данных и числу параллельных задач; записывайте пиковую память, длительность, неуспешные образцы и количество повторов.
Экспортируйте параметры, сводку окружения, выходные файлы и обезличенные журналы вместе. Не сохраняйте только итоговое среднее: аномальные образцы также должны отслеживаться.
Передайте длительное транскодирование фиксированному узлу, а готовые файлы — в систему архивирования
Аудио- и видеозадачи обычно одновременно используют процессор, память и диск. Хороший процесс разделяет синхронизацию входных данных, временную обработку, проверку качества и финальную передачу, не превращая рабочий диск облачного Mac в постоянное хранилище медиа.
Синхронизируйте материалы и проверьте сводку
Синхронизируйте исходные файлы, субтитры, аудиодорожки и параметры по списку задачи. После передачи проверьте размер или сводку файлов, чтобы не запускать длительную обработку на неполных материалах.
- Входные данные
- Исходное видео, аудиодорожки, субтитры, таблица параметров
- Запись
- Сводка файлов, требования к кодированию, имена результатов
Выполните транскодирование и создайте прокси-файлы
Разделяйте задачи по разрешению, формату кодирования или пакетам проекта. Если нужны waveform, прокси-файлы или миниатюры, сохраняйте параметры генерации в записи той же задачи.
- Обработка
- Пакетное транскодирование, waveform, прокси-файлы, миниатюры
- Изоляция
- Отдельный временный каталог и список сбоев для каждого пакета
Автоматическая проверка и ручная выборка
Сначала проверьте длительность, разрешение, количество аудиодорожек и полноту выходных файлов, затем вручную проверьте ключевые фрагменты. Повторно запускайте только пакет с ошибкой.
- Автоматически
- Длительность, размер, аудиодорожки, целостность файлов
- Вручную
- Изображение, звук, субтитры и ключевые фрагменты
Передайте готовые файлы и очистите временный диск
Передайте готовые файлы, журналы обработки и список сбоев в указанное командой хранилище. После подтверждения передачи удалите временные файлы, чтобы они не занимали локальный диск.
- Артефакты
- Готовые файлы, журналы, список неуспешных задач
- Граница
- Рабочий диск не используется для долгосрочного архивирования
Превратите проверки перед отправкой в шлюз конвейера
Успешное архивирование ещё не означает готовность к отправке. Перед передачей нужно проверить сведения о версии, подпись, манифест конфиденциальности, валидацию архива, материалы скриншотов и описание обновления. ZoneMini предоставляет среду выполнения, но не заменяет правила проверки платформы распространения приложений.
Передавайте пакет-кандидат только после прохождения всех шести проверок
Для каждой сборки-кандидата сохраняйте результаты проверок, хеш коммита, номер версии и номер сборки. При обнаружении проблемы возвращайтесь к соответствующему этапу и не меняйте незаписанную конфигурацию перед финальной отправкой.
-
01
Номер версии и номер сборки
Убедитесь, что они соответствуют ветке релиза, журналу изменений и пакету-кандидату, а номер сборки не повторяется.
-
02
Подпись и профиль подготовки
Проверьте соответствие Bundle ID, идентификатора подписи, объявленных разрешений и способа экспорта целевым параметрам.
-
03
Манифест конфиденциальности
Проверьте заявления о конфиденциальности приложения и зависимостей и убедитесь, что новые SDK включены в область проверки.
-
04
Валидация архива
Сохраните вывод проверки и исправьте отсутствующие символы, несоответствия разрешений или неподдерживаемые параметры сборки.
-
05
Скриншоты и метаданные
Подготовьте скриншоты, описание и сведения об обновлении для целевых устройств, языка и версии; проверьте имена файлов.
-
06
Регрессионная проверка перед отправкой
Проверьте на пакете-кандидате запуск, вход, ключевые сценарии, сетевые сбои и обновление.
Облачный Mac может постоянно выполнять сборку, проверку и подготовку артефактов, но содержание приложения, метаданные, требования соответствия и итог проверки определяются правилами соответствующей платформы. Команда должна сохранять собственный процесс согласования публикации и отката.
Сочетайте узлы по очередям, правам и масштабу взаимодействия
Количество узлов не следует определять только по численности команды. Сначала уточните число одновременно выполняемых задач, необходимость отдельной границы подписи, возможность совместного использования кэша, а также распределение участников и репозиториев; затем выбирайте один или несколько узлов.
Независимый разработчик
Используйте одно фиксированное окружение для повседневной разработки, тестирования и архивирования пакетов-кандидатов. Зафиксируйте версии зависимостей, шаги подписи и скрипты очистки в репозитории, чтобы уменьшить различия между локальным компьютером и удалённой средой.
- Для лёгкого проекта начните с ZoneMini M4 Core
- Для кроссплатформенного проекта или большого кэша выберите ZoneMini M4 Plus
- Регулярно экспортируйте архивы, журналы и важные материалы проекта
Команда CI
Как минимум разделяйте проверку отправок и релизное архивирование. При росте нагрузки добавляйте узлы по меткам, чтобы Runner с правами подписи не выполнял все обычные тесты.
- Короткие тесты — в приоритетную очередь, длительное архивирование — в отдельную
- Изолируйте кэш узлов по проектам и единообразно архивируйте журналы сбоев
- Назначайте задачи с большим объёмом памяти и параллельные задачи на ZoneMini M4 Pro
Распределённая команда
Выбирайте Сингапур, Японию (Токио), Южную Корею (Сеул), Гонконг или восточную часть США — ближе к репозиторию, ключевым участникам или каналу поставки. Не распределяйте узлы только по местоположению участников.
- При частом взаимодействии с репозиторием выбирайте ближайший к нему регион
- При активной работе через графический интерфейс учитывайте основных пользователей
- Используйте единый список инструментов и формат журналов на всех узлах
Определите, будут ли сборка, тестирование, инференс и медиа-задачи выполняться одновременно.
Выберите конфигурацию из трёх вариантов по фактическим пиковым значениям, а не по названию проекта.
Все заказы оплачиваются в USD; доступны только USDT-TRC20 и Visa / Mastercard / Amex (через Stripe).
Выберите узел и конфигурацию под масштаб задач
Подготовьте сведения о назначении, числе параллельных задач, целевом узле, периоде аренды и объёме хранилища. Если сначала нужно уточнить способ подключения, ознакомьтесь с руководством по удалённому доступу; за рекомендациями по конфигурации обратитесь к команде.