← К дневнику разработки

Xcode греет ноутбук? Перенесите сборку на облачный Mac mini M4

Лёгкий ноутбук для кода, Mac mini M4 в ЦОД для сборки Xcode
Обычный день: тонкий ноут передо мной, компиляция на стойке M4.

На каждый день у меня лёгкий ноутбук — Swift, Storyboard, Slack, всё ок. Нажал Run или влили жирный PR с полной пересборкой — и снова знакомая картина: вентилятор на максимум, горячий тачпад, swift-frontend съедает CPU, автодополнение в слайд-шоу. Чистили Derived Data, перезапускали Xcode, ждали Indexing. Понял простую вещь: не обязательно грузить эту машину — xcodebuild, долгую индексацию и Archive можно отдать Mac, который всегда подключён к сети.

Сейчас схема: тонкий ноут локально + выделенный M4 Mac mini в облаке. Ноут — код и созвоны; Mac в стойке — компиляция, симулятор, подпись. Коллеги на Windows — см. Xcode с Windows. MacBook Pro? TCO покупка vs аренда; CI — свой macOS runner. Ниже — как я реально работаю, не слайды для закупки.

1) Xcode «тормозит», когда машина переварит слишком много

SourceKit по всему репо, Indexing бьёт по диску, линкер на Clean Build, симулятор жрёт RAM — всё сразу. Ультрабуки через пару минут сборки уходят в троттлинг. Гайд Apple по эффективности сжал 8 минут до 5 — но несколько Clean в день всё равно съедают время.

В командировке не хочу ноут, который Archive делает в отеле по Wi‑Fi. Перенёс сборку на M4 Mac mini в ЦОД — ноут снова ощущается как терминал.

Правило: руки локально, «мышцы» в облаке.

2) Делим: пишем здесь, собираем там

  • Локально: Git, Cursor/VS Code, макеты. Сборка по SSH — вентилятор молчит.
  • Облачный M4 Mac mini: полный Xcode, фиксированный Derived Data, xcodebuild archive. Важен выделенный хост — не общий Mac, куда коллега зальёт тест на 40 ГБ.
  • CI (опционально): self-hosted runner, push — кофе — PR зелёный или красный.

Регион выбираю по Git, не по домашнему интернету. Общие macOS-VM подводили с подписью — см. VM vs bare-metal Mac mini.

3) Три режима — начните с B

РежимЛокальноОблако M4Кому
A Полный remoteSSH/VNCGUI, sim, сборкиНе-Mac ноут
B Гибрид (мой)правки, pushxcodebuildдополнение локально, без шума
C Только CIежедневный XcodeRunner 24/7много PR

Один — B: SwiftUI днём, push вечером, Archive в TestFlight с облака. Cursor — Remote-SSH на облачный хост.

4) Нужен облачный Mac?

СигналКрутить ноутОблако M4
Clean >5 мин несколько раз в деньмало помогаетвынести сборку
Вентилятор мешает звонкамкостылькомпиляция в облаке
Новый Xcode, старый macOSновый ноутобновить образ
Sim UI 2+ ч/деньлокальный MacVNC или разделение
Офлайн в самолётесборка локальнооблако не заменит

Сомневаетесь — замерьте Archive на боевом репо в облаке и на ноуте.

5) Порядок настройки

  1. Регион рядом с GitHub/GitLab и артефактами.
  2. Xcode по SSH, нужная версия; release notes.
  3. export DERIVED_DATA_PATH=~/DerivedData в ~/.zshrc.
  4. git pull, Fastlane Match, VNC для доверия устройству.
  5. ssh build@cloud-mac 'cd ~/app && xcodebuild -scheme App -destination generic/platform=iOS build'

«Гигабит дома» не важен — важны стабильный SSH и загрузка IPA. Первый полный билд прогревает Derived Data.

6) Грабли

Два Derived Data — Xcode «сходит с ума». UI — Sim в облаке по VNC; тесты — девайс локально, IPA из облака. На M4 можно поднять SWIFT_EXEC_JOBS (смотреть RAM). Runner и VNC не мешать — ёмкость.

7) Аренда второй сборочной машины

Неделя перед релизом, месяц для CI. Тарифы, TCO. Удалённый рабочий стол: аренда cloud Mac.

8) Частые вопросы

Медленнее? Клики — да; сборки >10 мин часто быстрее на M4 в облаке. Гибрид удобнее.

Только Windows? Да — статья.

vs VPS? Подпись App Store → выделенный Apple Silicon.

Безопасность? Как Mac mini в углу офиса: SSH-ключи, без p12 в Git.

Первый Archive? За полдня, если опыт есть; справочный центр.

Старый Mac? Если не full build локально — живёт; облако для пиков компиляции.

Что я использую (для ориентира)

Сборочная машина — выделенный M4 Mac mini в Nuvcloud (SSH/VNC, день/неделя/месяц), не общая macOS-VM.

Аренда на день на своём репозитории — тарифы · начать

LIMITED Тарифы