Удалённый Mac для Xcode: локальная сборка, удалённая сборка или общий экран?
Смонтированное рабочее пространство и удалённый Xcode перемещают разные данные. Решите, где живут исходники, индекс и сборка, затем измерьте число круговых обменов.
Совместное использование проекта по сети не переносит Xcode, потому что приложение продолжает работать на вашем Mac и продолжает запрашивать у сервера данные проекта. Запуск Xcode на удалённом Mac и просмотр его экрана — это другой вариант, при котором приложение и его файлы остаются вместе, а канал передаёт только изображение и ваш ввод. Решение о том, какой из вариантов вам нужен, принятое до настройки, снимает большую часть последующей путаницы.
Три варианта охватывают обычные случаи, и они различаются тем, где находится рабочее пространство и какая машина компилирует. Запишите ответ по обоим пунктам, прежде чем продолжить.
Назовите машину, на которой работает Xcode
В первом варианте всё локально: рабочая копия, индекс и сборка находятся на вашем Mac, а сеть передаёт только трафик репозитория и зависимостей. Во втором проект остаётся на удалённом Mac вместе с Xcode, поэтому индексация и компиляция происходят рядом с файлами, а канал передаёт содержимое экрана и нажатия клавиш. В третьем редактирование выполняется локально, а сборка запускается на удалённом хосте после явной передачи исходников. Таблица показывает, что перемещает каждый из них.
| Arrangement | Where the source lives | What crosses the link |
|---|---|---|
| Everything local | Local disk | Repository and dependency traffic |
| Remote Xcode, screen shared | Remote disk | Display frames and input events |
| Local edit, remote build | Both, with a handoff | Source transfer, then build output |
Сначала прочитайте средний столбец, потому что он определяет, где появятся сбои. Рабочий процесс с удалёнными исходниками даёт сбой при медленном канале, а рабочий процесс с удалённым компилятором — при неоднозначной передаче. Только третий делает вас ответственным за оба.
Считайте круговые обмены, а не мегабайты
Редактор и индексатор выполняют множество мелких файловых операций, и каждая из них становится круговым обменом, когда файловая система удалена. Из-за этого смонтированное рабочее пространство чувствительно к задержке так, как не чувствительна одна большая копия, поэтому измерение времени передачи файла почти ничего не говорит о том, каково работать в этом процессе. Удалённый дисплей имеет противоположный профиль: он передаёт непрерывный поток и лучше переносит пропускную способность, чем задержку. Сравнение двух вариантов одним числом даёт уверенный неправильный ответ.
Ни один вариант не является самым быстрым по своей природе. Правильный выбор зависит от работы, которую вы действительно выполняете, поэтому следующий шаг — попробовать эту работу, а не тест производительности.
Сделайте передачу исходников явной
Когда на обеих машинах есть рабочая копия, решите, какая из них главная и какую ревизию использовала удалённая сборка. Коммит — более ясная передача, чем два инструмента, редактирующие одно смонтированное рабочее дерево, поскольку у коммита есть идентичность, а у монтирования нет. Сгенерированные результаты и данные индекса тоже нуждаются во владельце, потому что они пересобираются из исходников и не должны передаваться как исходники. Двустороннее зеркало без правил разрешения конфликтов — не рабочий процесс, а гонка.
Удалённая сборка также требует, чтобы на удалённом хосте был правильный набор инструментов и учётные данные для приватных зависимостей. VPN, который позволяет добраться до хоста, не передаёт ему доступ к вашей учётной записи и не устанавливает там Xcode.
Проверьте путь, прежде чем выбирать рабочий процесс
Проверьте удалённый хост, прежде чем строить вокруг него работу, затем измерьте канал операциями, которые рабочий процесс действительно будет выполнять. Команды ниже проверяют набор инструментов, активный каталог разработчика и стоимость наблюдения за файлами, которая делает удалённые рабочие пространства мучительными. Запустите последнюю команду через сетевой путь, а не локально.
xcode-select -p
xcodebuild -version
ssh mac-builder 'xcodebuild -version'
time git status --porcelain
Хост без полной установки Xcode возвращает ошибку xcodebuild, и это проблема набора инструментов, а не сети. Каталог разработчика показывает, какой Xcode будет использовать сборка, а путь, указывающий только на инструменты командной строки, означает, что приложение не установлено. Измерение времени команды состояния репозитория через смонтированный ресурс напрямую показывает стоимость кругового обмена, а сравнение с локальным запуском даёт нужное число. Если этот разрыв уже неприятен, процесс со смонтированным рабочим пространством будет хуже под настоящим редактором.
Запишите, какой вариант вы выбрали, какая машина владеет исходниками и как работает передача. Эта запись превращает следующее подключение или замену ноутбука в задачу настройки, а не в расследование.