Выбор способа сборки

Арендовать, купить или делить?

На примере конвейера сборки iOS

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

Посуточная аренда — от $21.7. Сначала проверьте проект, потом решайте, продлевать ли аренду.

Сравним три варианта в одной таблице

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

Критерии выбора при одинаковом проекте, наборе инструментов и задаче сборки
Критерий Аренда выделенного облачного Mac Покупка оборудования Общая виртуальная машина
Стоимость XR Build 16 — от $108.3/мес. Аренда узла фиксирована; команде всё равно нужно заниматься проектом, сертификатами и конвейером сборки. Разовая покупка, плюс место для оборудования, сеть, электричество, резервное копирование и обслуживание. Сравнивать только цену покупки с арендой некорректно. Оплата может начисляться поминутно или за задачу. Проверьте, входят ли в расчёт запуск, установка зависимостей, ожидание и хранение артефактов, а не только компиляция.
Подготовка После заказа выделяется физический узел с предустановленными macOS и Xcode. Информацию о выделении и доступности смотрите в реальном времени в панели управления. Нужно закупить и получить оборудование, установить его, настроить удалённый доступ, инструменты и пользователя для сборки. Срок запуска зависит от процессов команды. Среду обычно можно создать по запросу, но доступные конфигурации, время запуска и очередь задач зависят от ресурсов и правил платформы.
Выделенность Весь физический узел предоставляется одному арендатору. Xcode, симуляторы и Keychain работают на системе, которой не пользуются другие арендаторы. Оборудование принадлежит команде. Только ей решать, будет ли оно выделено под сборки или совмещено с повседневной разработкой. Виртуальная машина может быть изолирована на уровне системы, но физические ресурсы могут совместно использоваться несколькими арендаторами. Изоляция ВМ — не то же самое, что отдельная машина.
Масштабирование В панели управления можно запросить переход на более высокий тариф или подключить SSD объёмом +1TB / +2TB. Заранее уточните, как выполняется изменение и потребуется ли перенос данных. Понадобится купить оборудование или изменить его конфигурацию. При добавлении машин также нужно настроить сеть, удалённое управление и среду сборки. Возможности ограничены конфигурациями и функциями платформы. Уточните объём памяти и диска, сохранность кэша и лимиты параллельных задач — свободное масштабирование не гарантируется.
Кэш и состояние Вы сами управляете каталогами исходного кода, кэшем зависимостей и DerivedData. Настройте очистку, чтобы не заполнить системный диск. Кэш и состояние можно организовать по требованиям команды, но следить за диском, создавать резервные копии и восстанавливать данные тоже придётся самостоятельно. Уточните, удаляется ли среда после выполнения задачи, как восстанавливается кэш, оплачивается ли время восстановления и какие каталоги можно сохранять.
Обслуживание Платформа отвечает за физический узел, а арендатор — за проект, конфигурацию ПО, права на сертификаты, учётные данные и резервные копии рабочих данных. Команда отвечает за оборудование, систему, сеть и обслуживание проекта. Заранее решите, кто займётся неисправным устройством и чем его можно заменить. Платформа управляет базовой средой, а команде нужно учитывать жизненный цикл задач, обновление образов и модель доступа. При сбоях важно отделять проблемы платформы от проблем проекта.

Таблица показывает различия в условиях работы. Она не означает, что во всех общих сервисах одинаковые очереди, и не гарантирует фиксированное время сборки для какого-либо тарифа.

20 сборок в день: сначала посчитайте аренду узла

Предположим, что одна команда постоянно использует XR Build 24: M4 / 24GB / 512GB. 20 сборок в день — это расчётная нагрузка, а не обещание производительности и не разрешение запускать 20 задач одновременно.

Расчёт бюджета

Месячная оплата — чтобы отладить процесс, квартальная — для проверенной нагрузки

Для расчёта условно принимаем 30 дней в месяце и 90 дней в квартале: 600 запланированных сборок в месяц и 1 800 в квартал. Фактическое число успешных сборок, повторных запусков и время ожидания проверяйте по логам своего конвейера.

За месяц

$204.1 / мес.

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

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

За квартал

$555.2 / квартал

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

Разница: $204.1 × 3 − $555.2 = $57.1

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

Время инженеров учитывайте отдельно

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

Выделен физический узел, а не бесконечное число параллельных задач

Поскольку это не виртуальная машина, CPU, унифицированная память, диск и среда macOS на узле не конкурируют с ресурсами других арендаторов. Это снижает конкуренцию между арендаторами, но несколько задач одного арендатора всё равно могут мешать друг другу.

Компиляция и симуляторы

Холодная компиляция, линковка и симуляторы одновременно используют CPU, память и диск. Сначала измерьте базовые показатели на одной задаче, затем постепенно увеличивайте параллелизм. Следите за давлением на память и использованием swap, а не судите о числе задач только по названию чипа.

Подпись и Keychain

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

Инструменты и кэш

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

Выбирайте тариф по измеренному узкому месту

В каталоге три конфигурации: XR Build 16 (M4 / 16GB / 256GB), XR Build 24 (M4 / 24GB / 512GB) и XR Build Pro 64 (M4 Pro / 64GB / 2TB). Сначала проверьте, хватает ли младшей конфигурации для одного проекта. Если память постоянно перегружена, растёт матрица симуляторов или увеличивается кэш, оцените переход на старшую. Выбор модели не задаёт универсальную формулу параллельной сборки для каждого проекта.

Когда покупка может быть выгоднее

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

Постоянная нагрузка и место для оборудования

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

Нужно подключать или трогать устройство

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

Есть требования к внутреннему размещению

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

У общих сред тоже есть свои задачи

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

Завершите сравнение воспроизводимым тестом

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

  1. 01

    Зафиксируйте входные данные

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

  2. 02

    Проверьте весь цикл

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

  3. 03

    Добавьте реальную нагрузку

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

  4. 04

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

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

Арендуйте на день и проверьте сами

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

3 конфигурации и 6 узлов. Характеристики и цены для четырёх периодов оплаты указаны на странице тарифов.