Командные задачи — отдельный конвейер

Перенесите конвейер сборки
на выделенный Mac

Apple Silicon M4 Mac mini целиком предоставляется одному клиенту. Объедините проверки PR, ночную архивацию и удалённую работу в Xcode на одном управляемом наборе инструментов — без конкуренции за процессорные ядра с другими клиентами.

Две конфигурации M4 · от $20 в день · выделенный физический компьютер, не виртуальная машина

Конвейер вашей команды
  1. PRпроверки коммитов
  2. Testсборка и тесты
  3. Archiveархивация и распространение

Выделяется вся машина. Параллельность и приоритеты задач внутри команды определяются настройками runner.

Сначала разделите задачи

Распределите четыре типа задач по конвейерам

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

Сценарий 1 · Проверки PR

Сборка и тесты при каждом коммите

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

Начните с Merge M4 S: Apple Silicon M4, 16 ГБ RAM / SSD 256 ГБ. Вся машина выделена одному клиенту, поэтому ядра не делятся с другими. Для задач самой команды всё равно задайте предел параллельных сборок, чтобы они одновременно не перегружали память.

Для первого конвейера достаточно трёх шагов

  • Зафиксируйте коммит, lock-файл зависимостей и версию Xcode.
  • Сначала соберите один scheme и запустите модульные тесты.
  • Отдельно замерьте ожидание, сборку и тестирование, чтобы найти узкие места.

Когда рассматривать конфигурацию побольше: если несколько target или параллельные тесты в симуляторах заметно увеличивают потребление памяти, оцените вариант с 24 ГБ. Не выбирайте число машин только по численности команды.

Арендовать Merge M4 S
Сценарий 2 · Ежедневные релизы

Поручите ночную архивацию узлу релизов

Подходит командам, которые ежедневно собирают тестовые версии, запускают архивацию по расписанию и автоматизируют сборку с Fastlane. Используйте существующий lane, объединив архивацию, экспорт и загрузку в TestFlight в одну задачу релиза.

Рекомендуем Merge M4 L: Apple Silicon M4, 24 ГБ RAM / SSD 512 ГБ. По сравнению с базовой конфигурацией больше памяти и локального хранилища — удобно для зависимостей нескольких проектов и необходимых сред выполнения симулятора. Фактический прирост скорости сборки зависит от проекта и состояния кэша.

Выделите релизным задачам отдельный слот

  • Используйте отдельную метку runner, чтобы обычные PR не занимали время архивации.
  • Передавайте сертификаты, профили подготовки и учётные данные для распространения через секреты CI.
  • После успешной архивации сохраняйте журналы и артефакты, а локальные файлы удаляйте по заданным правилам.

Условия использования: узел работает круглосуточно 365 дней в году. Для запланированных задач и загрузок настройте в CI уведомления об ошибках и повторные попытки.

Арендовать Merge M4 L
Сценарий 3 · Удалённая разработка

Работайте в Xcode без локального Mac

Используйте графический интерфейс macOS через совместный доступ к экрану VNC: просматривайте проект в Xcode, находите ошибки сборки и запускайте симулятор. Через SSH собирайте проект из командной строки, синхронизируйте файлы и управляйте runner.

Если нужно одновременно открыть Xcode, симулятор и инструменты зависимостей, рассмотрите Merge M4 L. Графический интерфейс и задачи CI будут использовать ресурсы одной физической машины: планируйте отладку и автоматическую архивацию на разное время или распределите их по разным узлам.

Сначала проверьте подключение, затем переносите весь проект

  • Получите данные для подключения в консоли и сначала проверьте доступ по SSH и VNC.
  • Уменьшите разрешение удалённого экрана и проверьте отклик на ввод и управление окнами.
  • Проверьте Xcode и симулятор на небольшом проекте, а затем синхронизируйте основной.

Ограничения: облачный узел подходит для сборки, подписи и тестов в симуляторе, но не подключается напрямую к вашему iPhone. Этапы, требующие локального подключения реального устройства, нужно оставить отдельно.

Инструкция по подключению через SSH и VNC
Сценарий 4 · Эксперименты с ИИ

Задайте бюджет ресурсов для экспериментов с MLX

Запускайте локальный инференс MLX на Apple Silicon, проверяйте квантованные модели и процесс дообучения небольших моделей. Сначала настройте рабочий базовый вариант на небольшой модели, затем постепенно увеличивайте контекст, размер пакета и объём обучающих данных.

Рекомендуем Merge M4 L с дополнительным SSD на 2 ТБ для весов моделей, наборов данных и контрольных точек. 24 ГБ RAM — это бюджет оперативной памяти, а дополнительный SSD увеличивает объём хранения; одно не заменяет другое.

Следите за пиковым потреблением, а не только за размером файлов модели

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

Ограничения: возможность загрузить модель в память зависит также от точности квантования, контекста и способа запуска. Дополнительный SSD на 2 ТБ не увеличивает объём памяти и не гарантирует запуск любой модели.

Настроить Merge M4 L и дополнительное хранилище

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

Выполняйте миграцию в порядке зависимостей

Сначала воспроизведите среду, затем переключайте конвейер

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

  1. 01 · Данные

    Переносите проект, материалы для подписи и кэш отдельно

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

    • Передавайте сертификаты и профили подготовки по защищённому каналу, а пароли храните в секретах CI.
    • Разделяйте ключи кэша по версии Xcode, lock-файлу зависимостей и архитектуре.
    • Переносите только проверенный кэш, который можно использовать повторно; старый DerivedData не должен быть обязательным входом.

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

  2. 02 · Инструменты

    Записывайте версии, а не полагайтесь на память

    Согласуйте версии Xcode, Homebrew, Ruby и CocoaPods. Сначала проверьте файлы версий в проекте: не обновляйте зависимости заодно с миграцией, иначе будет сложнее понять источник проблем.

    xcodebuild -version
    xcode-select -p
    uname -m
    ruby --version
    bundle exec pod --version

    Критерии приёмки:Проверьте среду arm64, выбранный путь Xcode и версии зависимостей, затем выполните сборку из командной строки для одного scheme.

  3. 03 · Подключение CI

    Сначала подключите тестовые задачи, затем релизы

    Зарегистрируйте self-hosted runner или agent в используемой платформе и назначьте узлу понятные метки. Для GitHub Actions можно использовать метки задачи ниже; в других платформах настройте планирование привычным способом.

    runs-on:
      - self-hosted
      - macOS
      - ARM64
      - macos-m4

    Критерии приёмки:Зарегистрированы именно эти метки, тестовая ветка запускается на новом узле, журналы и артефакты доступны. До переключения основных задач сохраните настройки отката на прежний runner.

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

Сделайте результат миграции проверяемым

Сравнивайте один и тот же коммит на командном стендапе

Сравнивайте время сборки только при одинаковых входных данных. Отдельно учитывайте результаты с попаданием в кэш и без него, чтобы загрузку, повторный запуск или изменение набора тестов не принять за разницу в производительности оборудования.

Разработка на ноутбуке: командный стендап для проверки журналов сборки и записей о миграции
Иллюстрация командной разработки. Для сравнения сборок используйте журналы CI вашей команды; изображение не является отзывом клиента или доказательством производительности.

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

Запишите хеш коммита, версию Xcode, scheme, тестовое устройство и lock-файл зависимостей. Перед сравнением убедитесь, что набор тестов не изменился.

Разберите время по этапам

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

Сохраните возможность отката

Сохраните метки прежнего runner и настройки конвейера. Отключайте старый узел от основных задач, только когда убедитесь, что новая среда работает воспроизводимо.

Подберите конфигурацию под сценарий

Для проверок PR начните с 16 ГБ; для нескольких target, симуляторов и архивации релизов рассмотрите 24 ГБ. На странице тарифов проверьте таблицу конфигураций, четыре периода оплаты и дополнительные варианты хранения, а затем настройте конвейер команды.