Отдалечен 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 ще използва изграждането, а път, който сочи само към инструментите от командния ред, означава, че приложението не е инсталирано. Измерването на времето на командата за състояние на хранилището през монтирания дял разкрива цената на обиколката директно, а сравняването с локално изпълнение дава числото, което има значение. Ако тази разлика вече е неприятна, работният поток с монтирано работно пространство ще бъде по-лош под истински редактор.
Запишете коя подредба избрахте, коя машина притежава изходния код и как работи предаването. Тази бележка превръща следващото включване в работа или смяната на лаптоп в задача по конфигурация вместо разследване.