2026: удалённые Mac в шести регионах — нативный Apple Silicon против x86_64 (Rosetta): ARCHS, fat binaries и матрица выбора CI-узла

Около 17 минут чтения · MACCOME

Команды с выделенными удалёнными Mac (M4 / M4 Pro) в Сингапуре, Японии, Южной Корее, Гонконге, востоке и западе США часто упираются в статические библиотеки только x86_64, старые бинарники CLT или fat/universal артефакты. Здесь сведены боли, матрица решений, шестишаговый runbook, KPI и FinOps аренды со ссылками на Flutter/React Native на одном хосте, гигиену DerivedData и зеркала CocoaPods/SPM и диск.

Шесть причин, почему «везде arm64» ломается на новом Apple Silicon

  1. Поставщик отдаёт только x86_64 — нужен xcframework или пересборка.
  2. Старые binary pods CocoaPods возвращают x86 транзитивно.
  3. Параллельно macOS universal и iOS arm64 — взрыв промежуточных файлов.
  4. YAML фиксирует x86_64 симуляторы — миграция на arm64 или пул устройств.
  5. Внутренние C/Go артефакты только amd64-darwin.
  6. Кэши Intel-ноутбуков скрывают дрейф до первого полного resolve в облаке.

Без флага REQUIRES_ROSETTA даже M4 сжигает минуты на ошибочных повторных линковках и агрессивных clean. Считайте ARCHS равноправным с параллелизмом runner (self-hosted).

Rosetta не бесплатна: меняет пик памяти и запись SSD; вместе с двойным мобильным стеком даёт «CPU пуст, job красный».

Регион чинит латентность и микс аренды; если зеркала рядом, а сборка красная — сначала ARCHS, потом мультирегиональный гайд.

Измерение Весь arm64 Микс / Rosetta Красная линия
Граф линковки lipo везде arm64 Инвентарь x86 с датой заката Смешанные статические архивы без xcframework
Дисциплина времени Низкая дисперсия Выше — отдельный дашборд >35% без сетевых событий
Память Осторожно ↑ параллелизм Параллелизм −1, без тяжёлого Simulator-mix Рост swap
Диск Прогнозируемый рост Fat binaries → чаще чистка <12 ГБ свободно
Аренда День/неделя часто достаточно Короткий «compat burn-in» Основной lease без статьи бюджета на Rosetta
info

Первый принцип: Rosetta 2 — динамическая трансляция, не «дополнительные ядра»; меняет форму пиков и воспроизводимость.

Шестишаговый runbook

  1. Печать uname -m и lipo -info в начале job.
  2. Заморозить Xcode/CLT и допустимые ARCHS.
  3. Метаданные заката для legacy x86.
  4. Разделить PR arm64 и ночной universal; выровнять DerivedData.
  5. Таблица Git/зеркала/регион.
  6. Фиксированный порядок очистки.
bash
set -euo pipefail
echo "machine: $(uname -m)"
find "$WORKSPACE/Pods" -name "*.a" -maxdepth 6 2>/dev/null | head -n 40 | while read -r f; do
  echo "---- $f"
  lipo -info "$f" || file "$f"
done
xcodebuild -scheme "$SCHEME" -configuration Debug ONLY_ACTIVE_ARCH=YES ARCHS=arm64

Три KPI

  • Доля CPU Rosetta >18% неделю → замена зависимостей.
  • Рост DerivedData >40% без новых таргетов → шторм universal.
  • Доля «arch mismatch» >12% → неделя без фич, чиним граф.

Пределы «все на Intel-ноутах» или «Rosetta всегда в CI»

Нет воспроизводимого архитектурного контракта.

MACCOME — bare-metal Mac mini M4 / M4 Pro с гибкой арендой в шести ключевых регионах, когда политика ARCHS, параллелизм и скрипты очистки должны жить в одной книге с горячими путями Git/артефактов.

ARCHS_POLICY.md + BINARY_INVENTORY.csv

Согласовать с monorepo FinOps.

Когда статья не нужна

Всё xcframework, CI только iOS arm64, нет macOS universal — идите к материалам про Runner/Simulator.

Вопросы

Только x86_64 через EXCLUDED_ARCHS=arm64?

Только для legacy с планом вывода. Цены аренды.

Fat binaries и короткая аренда диска?

Да — окна очистки и 1TB/2TB. Центр помощи.