Добавьте к своему рабочему процессу выделенный физический узел Apple Silicon. Не виртуальная машина: доступны SSH и графический интерфейс macOS. Для разовой сборки, постоянного CI-пайплайна и экспериментов с инференсом в унифицированной памяти.
Три конфигурации, пять локаций. Shell M4 — от $21.8 в день. Проверьте на своём проекте.
01 / BUILD
Оставьте основной компьютер как есть, а Xcode перенесите в облако
Если вы обычно пишете код в Windows или Linux, а собирать проект нужно перед релизом, синхронизируйте репозиторий с облачным Mac и запускайте сборку по SSH. Для проверки настроек проекта, симуляторов или подписи можно перейти в графический интерфейс macOS — переносить всю привычную среду разработки не придётся.
Shell M4 подойдёт, чтобы проверить сборку и архивирование одного проекта. Достаточно ли 16GB унифицированной памяти, зависит от размера проекта, числа симуляторов и одновременно запущенных инструментов. Сначала зафиксируйте пиковое потребление памяти и время чистой сборки, а затем решайте, нужна ли другая конфигурация.
Проверьте зафиксированные в проекте версии Xcode и зависимостей: иначе сборка может пройти локально и завершиться ошибкой на удалённом Mac.
Сначала выполните сборку без подписи, затем настройте сертификаты и профили, которыми вы вправе пользоваться.
Успешное архивирование ещё не означает, что релиз готов: отдельно проверьте права на подпись и распространение, а также сам артефакт.
02 / AUTOMATE
Для сборок macOS — постоянный Runner
Зарегистрируйте выделенный физический узел как self-hosted runner в GitLab или GitHub, чтобы объединить коммиты, тестирование, архивирование и передачу артефактов в один CI-пайплайн. Узел работает 365 дней в году; планирование задач, управление процессами и очистку сборок команда настраивает под проект.
Рекомендуем конфигурацию с 24GB унифицированной памяти и SSD на 512GB — Shell M4 Plus: этого хватит с запасом для разрешения зависимостей, сборки и тестов, а также для хранения репозитория, кэша и артефактов. Начните с параллелизма 1, оцените загрузку CPU, давление на память и рост занятого места, а затем при необходимости увеличьте значение. Число параллельных задач не всегда равно пропускной способности.
Запускайте CI от отдельного пользователя macOS, не используя общие с интерактивной работой каталоги.
Указывайте в метках Runner macOS, архитектуру чипа и версию Xcode, чтобы задачи попадали на нужный узел.
Перед запуском задач, которым нужны графическая сессия или связка ключей для подписи, проверьте права в той же пользовательской сессии.
Допускайте к Runner с релизными учётными данными только доверенные репозитории; код внешних участников запускайте изолированно.
03 / VERIFY
Сохраняйте результаты ночных тестов для разбора
Организуйте задачи с fastlane, запускайте UI-тесты через XCUITest и сохраняйте пакет результатов с контекстом сбоев. Сначала стабилизируйте тестовую среду, затем расширяйте охват устройств.
Сначала запустите регрессионные тесты на симуляторе
Установите нужные проекту среды выполнения симулятора и зафиксируйте целевое устройство и версию ОС. Сначала выполните xcrun simctl list devices available чтобы посмотреть доступные цели, затем укажите фактический идентификатор устройства в конфигурации тестов.
Для ночных заданий сохраняйте .xcresult, снимки экрана и логи. При сбое выясните, вызван ли он дефектом продукта, нестабильностью тестового скрипта или проблемой среды — не скрывайте причину бесконечными повторами.
Подходит для проверок коммитов и ночных регрессионных тестов
Для тестирования на реальном iOS-устройстве нужна отдельная проверка
Аренда физического Mac не означает аренду iPhone или iPad. В каталоге сервиса iOS-устройства не входят в комплект, а их подключение не гарантируется по умолчанию. До заказа уточните, кому принадлежит устройство, как оно подключается и какие инструменты нужны для тестирования.
USB-устройство, подключённое к вашему компьютеру, не появится на удалённой машине после входа по SSH. Для тестирования нужны доступное устройство, сопряжение и доверие между устройствами, а также соответствующие права на подпись. Сначала уточните возможность по электронной почте.
Запустите команду после настройки lane для тестирования в fastlane проекта. Сохраняйте результаты в каталог с номером задания и передавайте их после теста, не накапливая на узле.
Используйте унифицированную память, чтобы проверить гипотезу об инференсе
Shell M4 Pro оснащён чипом M4 Pro, 64GB унифицированной памяти и SSD на 2TB. Он подойдёт, чтобы с помощью MLX или llama.cpp проверить загрузку модели, варианты квантования, длину контекста и путь инференса Metal. CPU и GPU используют общую память, но это не значит, что весь её объём доступен весам модели.
При выборе модели сначала оцените объём весов, затем оставьте запас для работы. Приблизительная оценка для 4-битных весов: модели с 8B параметров нужно около 4GB, с 32B — около 16GB. Расчёт основан на 0,5 байта на параметр и не учитывает метаданные квантования, KV cache, среду выполнения и системные процессы. По этой оценке нельзя гарантировать, что конкретная модель загрузится.
Сначала измерьте задержку до первого токена и стабильную скорость генерации на коротком контексте и одном запросе, затем увеличивайте контекст или параллелизм.
Записывайте версию модели, формат квантования, версии инструментов и параметры сэмплирования, чтобы не смешивать результаты разных конфигураций.
Для задач, требующих экосистемы CUDA или обучения на нескольких GPU, этот Mac не станет прямой заменой соответствующей системы.
С локального компьютера в облако
Три этапа переноса — каждый можно принять отдельно
Не копируйте весь каталог пользователя. Сначала перенесите проект, затем восстановите инструменты и только после этого переключите задания. Указанное время — оценка на ручные работы, а не срок предоставления узла; загрузка, передача данных и сборка займут дополнительное время.
01
Данные: подготовьте репозиторий к восстановлению
На работу: 10–30 минут, без учёта передачи данных
При первом переносе клонируйте репозиторий; незакоммиченные ресурсы синхронизируйте отдельно. Команды ниже выполняются на локальном компьютере,cloud-mac — настроенный вами SSH-псевдоним. Адрес репозитория берётся из переменной окружения проекта.
Проверка: совпадает хеш коммита, все необходимые ресурсы на месте; кэш и восстанавливаемые каталоги сборки переносить не нужно.
02
Инструменты: зафиксируйте версии и права
На работу: 20–60 минут, без учёта загрузки
Проверьте на удалённом Mac путь к Xcode и доступные SDK. Если в проекте есть Brewfile, восстановите инструменты с помощью Homebrew. Передавайте сертификаты и профили безопасным способом, одобренным командой; не помещайте их в репозиторий или логи заданий.
Проверка: версии зависимостей совпадают, нужный SDK доступен; от имени пользователя, который будет запускать задачу, успешно создаётся подписанный архив.
03
CI: сначала пробный запуск, затем смена меток
На работу: 15–45 минут, без учёта сборки
Подключите Runner с регистрационными данными, выданными организацией. Ниже приведены команды для GitLab; для GitHub Runner используйте конфигурационный скрипт организации и проверьте состояние службы на узле. Вводите токен только в доверенной сессии.
Проверка: тестовая ветка запускается на новой метке, артефакты доступны для скачивания. После проверки переключите основной CI-пайплайн, оставив прежний исполнитель для отката.
Перенос считается успешным не тогда, когда удаётся подключиться по SSH, а когда один и тот же коммит проходит установку зависимостей, сборку, тесты и передачу артефактов. Если какой-то этап не проходит, сначала сохраните логи и только потом переходите к следующему.
Передача работы между часовыми поясами
Общий график — да, общий пароль — нет
Команда может пользоваться одним узлом по очереди, но CPU, GPU, память и диск остаются общими ресурсами. Разные системные пользователи не обеспечивают изоляцию уровня виртуальных машин; для релизных учётных данных и чувствительных проектов нужны более строгие настройки доступа.
01
Индивидуальные учётные записи
Каждому участнику создайте отдельного пользователя macOS и выдайте собственный открытый SSH-ключ — не делитесь закрытыми ключами. Для CI используйте отдельную учётную запись. При выходе участника из команды удалите его ключ и проверьте связанные токены.
02
Передавайте задачи по расписанию
Ведите расписание в едином часовом поясе. В записи о передаче указывайте хеш коммита, рабочий каталог, запущенные процессы и следующую задачу. Долгие процессы запускайте через Runner или управляемую сессию, а не оставляйте открытое подключение к рабочему столу.
03
Управляйте подписью отдельно
Проверьте права на связку ключей для пользователя, который запускает задачу. Не записывайте пароль разблокировки в историю shell. Перед передачей работы убедитесь, что не осталось интерактивных запросов подписи; не завершайте пользовательскую сессию во время релизной задачи другого участника.
04
Храните резервную копию
Отправляйте код обратно в репозиторий, передавайте артефакты в хранилище команды, а учётные данные храните отдельно и безопасно. Сделайте резервную копию до окончания срока аренды и не используйте узел как единственное место хранения. Продление и дата окончания отображаются в панели управления.
Доступны пять локаций: Сингапур, Япония (Токио), Южная Корея (Сеул), Гонконг и восток США. Выбирайте узел с учётом маршрута подключения основных пользователей и расположения хранилищ кода и артефактов. Сначала проверьте соединение; доступность локаций в реальном времени показывается в панели управления.
NEXT / ЗАПУСТИТЕ СВОЙ ПРОЕКТ
Сначала выберите задачу, затем запустите первый узел
Для сборки одного проекта начните с Shell M4, для командного CI выберите Shell M4 Plus, а для экспериментов с инференсом, требующих больше памяти, — Shell M4 Pro. На странице заказа проверьте период аренды, локацию и дополнительные опции.
Оплата доступна только в USDT-TRC20 и картами Visa / Mastercard / Amex через Stripe; расчёты ведутся в долларах США. Доступность платёжных шлюзов определяется ответом серверного интерфейса.