Один выделенный Mac · два способа доступа

Сборки по SSH,
Xcode через VNC

Командная строка и графический рабочий стол подключаются к одному физическому Mac mini. Runner продолжает выполнять задачи, а демонстрацию экрана можно включить, когда нужно проверить Xcode, симулятор или сертификаты.

Apple Silicon M4 · 2 конфигурации · от $20 в день. Весь компьютер предоставляется одному клиенту, это не виртуальная машина.

Отдельная среда для команды

Задачи выполняются постоянно, рабочий стол — по необходимости

SSHАвтоматизация
  1. Синхронизация проекта
  2. Запуск тестов
  3. Архивация результатов
VNCИнтерактивная проверка
  1. Открыть Xcode
  2. Проверить симулятор
  3. Проверить подпись

Проект, диск и набор инструментов у них общие — это не две машины, которые нужно настраивать отдельно. Работа за рабочим столом тоже использует ресурсы всего компьютера.

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

Автоматизация — в командной строке, интерактивная проверка — на рабочем столе

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

SSH: для повторяющихся задач

Подходит для сборок и тестов через xcodebuild, регистрации runner, проверки журналов и синхронизации файлов с помощью scp или rsync. Журналы сборки — это текст, поэтому постоянно передавать изображение рабочего стола не нужно.

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

Подходит для: проверок PR, ночных сборок, пакетной сборки и синхронизации результатов.

VNC: для задач, где нужен графический интерфейс

Подходит для работы в графическом интерфейсе Xcode, управления симулятором, настройки связки ключей и сертификатов. Подключаться можно через встроенную в macOS функцию «Общий экран» или совместимый VNC-клиент.

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

Подходит для: первоначальной настройки среды, графической отладки и ручной проверки перед выпуском.

Первое подключение

Один раз проверьте учётные данные, затем отдельно проверьте оба способа доступа

Войдите в консоль и откройте страницу нужного экземпляра. Используйте адрес, имя пользователя, порт и способ аутентификации, указанные в данных экземпляра. Не используйте порт SSH для подключения по VNC.

  1. 01

    Получите данные для подключения

    Проверьте ID и узел экземпляра, отдельно сохраните данные для SSH и VNC. Перед первым подключением убедитесь, что экземпляр готов. Если консоль ещё не выдала учётные данные, сохраните сведения о заказе и отправьте запрос через систему поддержки в консоли — не пытайтесь угадать адрес или пароль.

  2. 02

    Проверьте подключение по командной строке

    Подключитесь, используя указанные для экземпляра порт и имя пользователя. При первом запросе проверьте отпечаток ключа хоста. Если отпечаток для того же адреса неожиданно изменился, прервите подключение и выясните, не был ли экземпляр переназначен.

    ssh -p "$SSH_PORT" "$MAC_USER@$MAC_HOST"
    sw_vers
    uname -m
    xcode-select -p
    df -h

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

  3. 03

    Подключитесь к рабочему столу

    На локальном Mac откройте приложение «Общий экран» и введите адрес и порт VNC, указанные для экземпляра. В других системах используйте совместимый клиент. Войдите способом, предусмотренным для экземпляра. Сначала убедитесь, что видите рабочий стол и можете управлять курсором, а затем запускайте Xcode. Если подключиться не удаётся, по очереди проверьте адрес, порт, данные аутентификации и ограничения локальной сети.

  4. 04

    Ограничьте доступ

    После первого входа смените начальные учётные данные поддерживаемым для экземпляра способом. Управляйте SSH-ключами участников команды отдельно и не сохраняйте пароли в репозитории. Для runner используйте токен регистрации с минимально необходимыми правами. Храните учётные данные, сертификаты и закрытые ключи в контролируемой системе управления секретами. Перед запуском рабочего конвейера выполните простую тестовую сборку.

5 узлов · ориентиры по сети

Для рабочего стола важна задержка туда-обратно, для сборок — путь передачи данных

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

Узел, регион обслуживания и ориентировочная задержка туда-обратно; выбирайте расположение с учётом основных задач
Узел Регион обслуживания Ориентировочная задержка туда-обратно Подходящие задачи
Сингапур Юго-Восточная Азия 20–50 мс Интерактивная разработка для команд в Юго-Восточной Азии; также проверьте расположение репозитория и источников зависимостей.
Япония (Токио) Восточная Азия 30–60 мс Работа в Xcode для участников из Восточной Азии; по возможности разместите runner и хранилище результатов поблизости.
Южная Корея (Сеул) Северо-Восточная Азия 30–50 мс Просмотр симуляторов, удалённая отладка и синхронизация проектов для команд в Северо-Восточной Азии.
Гонконг Южный Китай и Юго-Восточная Азия 20–40 мс Работа с демонстрацией экрана и повседневные задачи сборки для участников из Южного Китая и Юго-Восточной Азии.
Восток США Восток Северной Америки и Западная Европа 25–35 мс Совместная работа команд в этом регионе; выбирайте узел с учётом расположения кода и результатов сборки.

Приведены ориентировочные значения; фактическая задержка зависит от сети подключения.

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

Сначала снизьте нагрузку на изображение, затем проверьте сеть

Освободите пропускную способность для текущей задачи

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

Настройте разрешение под рабочую область

Начните с разрешения 1440 × 900 или 1600 × 900, чтобы редактор и журналы полностью помещались на экране. Повышайте разрешение, только если действительно нужны дополнительные панели; не включайте по умолчанию передачу всего экрана в высоком разрешении.

Меняйте по одному параметру и сравнивайте чёткость текста и отклик при перемещении окон.

Настройте глубину цвета и качество в клиенте

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

Названия настроек зависят от клиента — ориентируйтесь на доступные параметры.

Отключайте просмотр, когда он не нужен

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

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

Ограничения удалённой разработки в Xcode

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

Превращайте ручные проверки в отслеживаемые изменения среды: фиксируйте версию Xcode, среду выполнения симулятора и настройки подписи, затем проверяйте их из командной строки на том же проекте. Не оставляйте настройку только в виде действий, выполненных на рабочем столе.

Компьютер и рабочее место разработчика для удалённой разработки: схема доступа к облачному Xcode с локальной рабочей станции
Схема рабочего пространства для удалённой разработки. При демонстрации экрана передаётся изображение облачного рабочего стола, но локальная периферия не подключается к удалённому компьютеру автоматически.

Что можно делать в облаке

Проверять проекты Xcode, собирать и архивировать их, запускать тесты в симуляторе и настраивать сертификаты можно в удалённой среде macOS. SSH и VNC работают с одними и теми же файлами. Не изменяйте вручную рабочий каталог, пока им пользуется runner.

Отладку на реальном устройстве настройте отдельно

iPhone, подключённый к локальному компьютеру, не появится в облачном Xcode при включении VNC. Для тестирования на реальном устройстве отдельно настройте доступ к нему и процесс тестирования. Можно собрать подписанную версию в облаке и передать её тестовым устройствам по принятой в команде процедуре распространения.

Управляйте проектом, кэшем и результатами раздельно

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

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

scp: передача готового результата сборки

Подходит для передачи конкретного архива или пакета ресурсов. В примере ниже архив скачивается с удалённого узла; замените удалённый каталог и имя файла на реальные значения.

scp -P "$SSH_PORT" \
  "$MAC_USER@$MAC_HOST:build/ios-build.zip" \
  ./ios-build.zip

Для порта в scp используется заглавная -P. После передачи проверьте размер файла. Чтобы удостовериться в целостности данных, сравните контрольные суммы на обеих сторонах.

rsync: синхронизация рабочей копии проекта

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

rsync -avn \
  -e "ssh -p $SSH_PORT" \
  --exclude '.git/' \
  --exclude 'DerivedData/' \
  ./project/ "$MAC_USER@$MAC_HOST:project/"

Проверьте вывод пробного запуска, затем замените -avn на -av и выполните команду. Параметр удаления здесь не используется, поэтому файлы, отсутствующие локально, не будут удалены с удалённого узла.

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

Выберите ближайший к вам узел

Для интерактивной разработки важна офисная сеть, для непрерывной сборки — расположение репозитория и результатов. Выберите узел при оформлении заказа; фактическая доступность отображается в консоли в реальном времени.