Выделенный физический сервер · без лимитов

Облачный M4 быстрее
и не занимает стол

$21.8 / день · выделенный Mac mini M4
Настроить узел
10-ядерный M4 16 GB RAM Без thermal throttling Доставка за 5 мин

Скорость сборки Xcode: локальный MacBook vs облачный Mac mini M4

Один и тот же средний SwiftUI-проект: три раунда clean build и Archive на MacBook Air M2, MacBook Pro M1 Pro и выделенном Mac mini M4 VPSRox. Замеры wall-clock, пики памяти, охлаждение — и когда аренда облачного Mac действительно окупается.

Почему смотрим Clean Build, а не инкрементальную сборку

В повседневной работе изменили один Swift-файл — Xcode пересобирает только затронутые модули, часто за секунды. Инкрементальная сборка зависит от кэша; DerivedData с машины A на B бесполезен. Полная пересборка неизбежна в случаях:

  • CI очищает DerivedData при каждом Job
  • Смена Xcode или macOS, старый кэш недействителен
  • Смена dev-машины, нет исторического кэша
  • выполнить xcodebuild clean build или xcodebuild archive Release-сборку

Поэтому clean build — реальный критерий «выдержит ли машина iOS pipeline». Скорость инкрементальной сборки больше про привычки и частоту правок, а не потолок железа. Все данные — полный clean build, одинаковые стартовые условия на трёх машинах.

Тестовая среда и проект

Сравнение осмысленно при одном проекте, одной версии Xcode и похожей комнатной температуре; три раунда, медиана. Перед каждым раундом rm -rf ~/Library/Developer/Xcode/DerivedData — сборка с нуля.

Базовая тестовая среда

Тестовый проект: среднее SwiftUI-приложение, ~92k строк Swift, 2 Extension Target (WidgetKit + Share Extension), ~5800 Swift-файлов, ~12 локальных Swift Package.

Версия Xcode: Xcode 16.4, macOS 15.5 Sequoia (одинаково на всех трёх машинах).

Раунды: по 3 clean build + 3 Archive на машину, медиана. Clean build: xcodebuild clean build -scheme AppName -destination generic/platform=iOS; Archive: xcodebuild clean archive -scheme AppName -archivePath /tmp/app.xcarchive.

Железо: ① MacBook Air M2 (2022) · 8-ядерный CPU · 16 GB unified memory · 256 GB SSD; ② MacBook Pro 14" M1 Pro (2021) · 10-ядерный CPU · 16 GB unified memory · 512 GB SSD; ③ VPSRox Mac mini M4 (2024) · 10-ядерный CPU (4P+6E) · 16 GB unified memory · 256 GB NVMe · ЦОД (Гонконг).

MacBook Air M2 — 8-ядерная версия (самая распространённая), не 10-ядерный топ. MacBook Pro M1 Pro и VPSRox M4 Mini — по 10 ядер: сравниваем поколения M1 Pro vs M4 и влияние охлаждения.

Результаты полной Clean Build

Таблица — медиана wall-clock трёх clean build, пик памяти и пик CPU по Xcode. Пики памяти — memory_pressure и Activity Monitor во время сборки.

3m 11s M4 Mini Clean Build (медиана)
4m 08s M1 Pro Clean Build (медиана)
5m 42s M2 Air Clean Build (медиана)
44% Ускорение M4 vs M2 Air
Машина CPU Медиана Clean Build Пик памяти Отклонение раунд 3 vs раунд 1
MacBook Air M2 (8 ядер) 8-ядерный M2 5m 42s 11,8 GB (редкий лёгкий swap) +38s (сильный thermal throttling)
MacBook Pro 14" M1 Pro (10 ядер) 10-ядерный M1 Pro 4m 08s 10,9 GB (без swap) +14s (лёгкий thermal throttling)
VPSRox Mac mini M4 (10 ядер) 10-ядерный M4 3m 11s 9,4 GB (без swap) +2s (почти без отклонения)

Колонка «раунд 3 vs 1» показательна: у Air третий clean build на 38 s медленнее первого — пассивное охлаждение и снижение частоты. У Pro — 14 s, но эффект есть. VPSRox M4 Mini в стойке ЦОД — разница 2 s, в пределах погрешности.

Ключевые выводы

Для одной сборки MacBook Pro M1 Pro уже неплох. В CI важна не первая попытка, а стабильность на 10-й и 50-й подряд. Разница в охлаждении умножается.

Сравнение времени Archive

Archive ближе к production, чем clean build: помимо компиляции — подпись, bitcode (если включён), dSYM и упаковка символов. На том же проекте Archive обычно в 1,2–1,4 раза дольше clean build.

Машина Медиана Archive Прирост относительно Clean Build Среднее 5 прогонов (оценка)
MacBook Air M2 (8 ядер) 7m 18s +1m 36s ~8m 40s (охлаждение тормозит)
MacBook Pro 14" M1 Pro (10 ядер) 5m 22s +1m 14s ~5m 45s
VPSRox Mac mini M4 (10 ядер) 4m 06s +55s ~4m 10s (очень стабильно)

По Archive видно, что M4 сильнее на этапе dSYM и символов — ~19% быстрее M1 Pro, не только за счёт частоты ядер. Связано с пропускной способностью памяти и Neural Engine.

Для Fastlane каждый fastlane gym ≈ полный Archive + export — на M4 Mini суммарно ~5 мин 30 с, на Air M2 ~10 мин. Несколько сборок в день (dev/staging/production) — разница бьёт по ритму релизов.

Thermal throttling и давление на память: скрытые факторы локальной машины

Многие обзоры дают только холодный старт и игнорируют thermal accumulation. Apple Silicon снижает частоту при перегреве до восстановления охлаждения. Безвентиляторный MacBook Air страдает сильнее всех.

Thermal throttling на MacBook Air M2

У Air M2 после второго clean build (~11 мин) дно корпуса заметно горячее; pmset -g thermlog показывает CPU_Speed_Limit с 100 до ~78 — третья сборка >30 s медленнее первой. Серия CI на Air системно +15%–30% к холодному старту и непредсказуема.

Границы активного охлаждения MacBook Pro M1 Pro

Активное охлаждение MacBook Pro помогает, но не полностью. При >28°C в помещении или нескольких Simulator иногда лёгкий throttling. Наши +14 s — более тёплый третий раунд; при 22°C отклонение ~8 s.

Тепловая стабильность в ЦОД

Узел VPSRox в стойке 18–22°C, у Mac mini M4 активное охлаждение — стабильность времени сборки выше любого ноутбука. В наших трёх раундах разница 1 vs 3 — 2 s. Для CI с предсказуемым окном это ценно: можно опираться на p99, а не бояться случайного таймаута.

Примечание

MacBook Air у окна при >27°C летом throttling наступает раньше и сильнее. Зимой та же машина может быть на 20%–30% быстрее. Бенчмарк — в вашей реальной среде, а не в климатической камере обзоров.

Пик памяти и влияние swap на скорость

На 16 GB unified memory давление памяти при крупных iOS-проектах реально. Xcode на этапах линковки и подписи поднимает много процессов; Swift-компилятор тоже прожорлив. Пики проверяли vm_stat и memory_pressure.

Air M2 на clean build ~11,8 GB пика; при параллельной компиляции двух Extension — кратковременный swap 200–400 MB, скорость SSD влияет на прогресс. M1 Pro ~10,9 GB, swap не было. VPSRox M4 Mini ~9,4 GB — M4 эффективнее по памяти на той же задаче.

Машина Пик памяти Был ли swap Пик CPU в пик компиляции Запись на SSD (Clean Build)
MacBook Air M2 11.8 GB Да (~300 MB) ~780% (~8 ядер на полную) ~4,2 GB
MacBook Pro M1 Pro 10.9 GB Нет ~980% (почти 10 ядер) ~3,8 GB
VPSRox Mac mini M4 9.4 GB Нет ~960% (почти 10 ядер) ~3,5 GB

Для проектов >200k строк или многих Swift Package 16 GB на Air чаще упирается в память. VPSRox предлагает расширение SSD (+1TB $2.6/день, +2TB $5.2/день), но RAM пока только 16 GB — учитывайте при выборе.

Когда локального MacBook всё ещё достаточно

Не каждой команде нужен облачный узел; в следующих случаях MacBook справится:

  • Небольшой проект (<30k строк Swift): clean build на любом MacBook с Apple Silicon укладывается в 2 минуты — узкого места по производительности нет.
  • Редкий CI (<5 сборок в день): даже при clean build 7–8 минут суммарное время сборок за день остаётся в пределах 40 минут — приемлемо.
  • Solo-разработчик, в основном локальная отладка: инкрементальной сборки обычно достаточно; clean build нужен перед релизом — MacBook Pro M1 Pro и новее справляются.
  • Пользователи MacBook Pro M3/M4: охлаждение и производительность новейшего MacBook Pro (M4 Max) близки к Mac mini M4; разница скорее в стабильности длительных сборок, чем в разовой скорости.

Облачный узел стоит оценить, если: CI >20 сборок в день, общая среда сборки для команды (без «у меня работает»), MacBook Air и растущий проект, или изоляция нескольких независимых проектов.

Итог: как считать стоимость и выгоду

Стоимость облачного Mac очевидна: Mac mini M4 VPSRox — $21.8/день, ~$109.1/мес. при постоянном использовании — дешевле нового MacBook Pro, но регулярный расход. Что вы экономите?

Команда из 5 iOS-разработчиков, ~30 clean build/Archive в день: на Air M2 ~8 мин в среднем (лёгкий throttling) — 240 мин машинного времени. На VPSRox M4 Mini ~123 мин. Экономия ~117 мин/день — для параллельных веток CI это быстрее review и релизы.

Скрытая цена — переключение внимания при ожидании сборки. До 5 минут многие смотрят прогресс; после 8 минут уходят в другие задачи. По исследованиям flow state возврат к пику ~20 минут. $109/мес. за узел — скорее «стоимость фокуса», чем только сервер.

Рамка для решения

Когда имеет смысл облако: проект >50k строк + MacBook Air + CI >15 сборок в день — все три условия.

Сначала апгрейд локального Mac: основная работа — локальная отладка (не CI) + средний проект + ограниченный бюджет — MacBook Pro M4 может быть выгоднее аренды.

Взаимодополняющая связка: локальный MacBook — инкрементальная сборка и отладка; CI на выделенном облачном узле — чёткое разделение ролей.

Выделенный физический сервер · доставка за 5 мин

Облачный M4 вместо локального Mac с нестабильным охлаждением

VPSRox — выделенный Mac mini M4 в ЦОД, без thermal throttling, 100% физический сервер, посуточно без контракта. Доставка за 1–5 мин, пять узлов.

Стандартная конфигурация
Чип Apple M4
CPU 10 ядер
Память 16 GB
SSD 256 GB
Сеть 1 Gbps
Доставка 1–5 мин
$21.8 / день