Zdalny Mac dla Xcode: kompilacja lokalna, zdalna czy udostępnianie ekranu?
Zamontowana przestrzeń robocza i zdalny Xcode przenoszą różne dane. Zdecyduj, gdzie żyją źródła, indeks i kompilacja, a następnie zmierz podróże w obie strony.
Udostępnianie projektu w sieci nie przenosi Xcode, ponieważ aplikacja nadal działa na twoim Macu i nadal prosi serwer o dane projektu. Uruchamianie Xcode na zdalnym Macu i patrzenie na jego ekran to inny układ, w którym aplikacja i jej pliki zostają razem, a łącze przenosi tylko obraz i twoje dane wejściowe. Rozstrzygnięcie, którego z nich chcesz, zanim cokolwiek skonfigurujesz, usuwa większość późniejszego zamieszania.
Trzy układy pokrywają typowe przypadki i różnią się tym, gdzie mieszka przestrzeń robocza i która maszyna kompiluje. Zapisz odpowiedź na oba punkty, zanim przejdziesz dalej.
Nazwij maszynę, która uruchamia Xcode
W pierwszym układzie wszystko jest lokalne: kopia robocza, indeks i kompilacja żyją na twoim Macu, a sieć przenosi tylko ruch repozytorium i zależności. W drugim projekt zostaje na zdalnym Macu razem z Xcode, więc indeksowanie i kompilacja odbywają się obok plików, a łącze przenosi zawartość ekranu i naciśnięcia klawiszy. W trzecim edycja odbywa się lokalnie, a kompilacja rusza na zdalnym hoście po wyraźnym przekazaniu źródeł. Tabela nazywa, co przenosi każdy z nich.
| 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 |
Najpierw przeczytaj środkową kolumnę, bo ona decyduje, gdzie pojawią się awarie. Przepływ pracy ze zdalnymi źródłami zawodzi, gdy łącze jest wolne, a przepływ ze zdalnym kompilatorem zawodzi, gdy przekazanie jest niejednoznaczne. Tylko trzeci czyni cię odpowiedzialnym za oba.
Licz podróże w obie strony, nie megabajty
Edytor i indekser wysyłają wiele małych operacji na plikach, a każda z nich staje się podróżą w obie strony, gdy system plików jest zdalny. To czyni zamontowaną przestrzeń roboczą wrażliwą na opóźnienia w sposób, w jaki jedna duża kopia nie jest, dlatego mierzenie czasu transferu pliku prawie nic nie mówi o tym, jak odczuwa się przepływ pracy. Zdalny obraz ma odwrotny profil: przenosi ciągły strumień i lepiej znosi przepustowość niż opóźnienie. Porównanie obu jedną liczbą daje pewną siebie błędną odpowiedź.
Żaden układ nie jest z natury najszybszy. Właściwy wybór zależy od pracy, którą naprawdę wykonujesz, dlatego następnym krokiem jest wypróbowanie tej pracy, a nie benchmarku.
Uczyń przekazanie źródeł wyraźnym
Gdy obie maszyny mają kopię roboczą, zdecyduj, która jest autorytatywna i której wersji użyła zdalna kompilacja. Commit jest jaśniejszym przekazaniem niż dwa narzędzia edytujące jedno zamontowane drzewo robocze, bo commit ma tożsamość, a montowanie nie. Wygenerowane dane wyjściowe i dane indeksu też potrzebują właściciela, bo są odbudowywane ze źródeł i nie powinny podróżować tak, jakby były źródłami. Dwukierunkowe lustro bez reguł konfliktów nie jest przepływem pracy, to wyścig.
Kompilacja zdalna wymaga też aby zdalny host miał właściwy łańcuch narzędzi i poświadczeń do prywatnych zależności. VPN, który pozwala dotrzeć do hosta, nie użycza mu dostępu do twojego konta i nie instaluje tam Xcode.
Sprawdź ścieżkę, zanim zwiążesz się z przepływem pracy
Zweryfikuj zdalny host, zanim zaprojektujesz wokół niego, a potem zmierz łącze operacjami, które przepływ pracy naprawdę wykona. Poniższe polecenia sprawdzają łańcuch narzędzi, aktywny katalog dewelopera i koszt obserwacji plików, który czyni zdalne przestrzenie robocze bolesnymi. Uruchom ostatnie po ścieżce sieciowej, a nie lokalnie.
xcode-select -p
xcodebuild -version
ssh mac-builder 'xcodebuild -version'
time git status --porcelain
Host bez pełnej instalacji Xcode zwraca błąd z xcodebuild, a to problem łańcucha narzędzi, nie sieci. Katalog dewelopera pokazuje, którego Xcode użyje kompilacja, a ścieżka wskazująca tylko narzędzia wiersza poleceń oznacza, że aplikacja nie jest zainstalowana. Mierzenie czasu polecenia stanu repozytorium przez zamontowany udział wprost ujawnia koszt podróży w obie strony, a porównanie z uruchomieniem lokalnym daje liczbę, która ma znaczenie. Jeśli ta różnica już jest nieprzyjemna, przepływ z zamontowaną przestrzenią roboczą będzie gorszy pod prawdziwym edytorem.
Zapisz, który układ wybrałeś, która maszyna jest właścicielem źródeł i jak działa przekazanie. Ta notatka zamienia następne wdrożenie lub wymianę laptopa w zadanie konfiguracyjne zamiast śledztwa.