Remote Mac vir Xcode: plaaslike bou, afstandbou of skermdeling?
'n Gemonteerde werkruimte en 'n afstand-Xcode verskuif verskillende data. Besluit waar die bron, die indeks en die bou woon, en meet dan die retoerte
Om 'n projek oor die netwerk te deel, verskuif nie Xcode nie, want die program bly op jou Mac hardloop en bly die bediener om projektdata vra. Om Xcode op die afstand-Mac te laat hardloop en sy skerm te bekyk, is 'n ander reëling, waar die program en sy lêers bymekaar bly en die skakel net die vertoning en jou insette dra. Om te besluit watter een jy wil hê, voordat jy enigiets configureer, besleg die meeste van die latere verwarring.
Drie reëlings dek die gewone gevalle, en hulle verskil in waar die werkruimte woon en watter masjien kompileer. Skryf jou antwoord vir albei punte neer voordat jy aangaan.
Noem die masjien wat Xcode laat hardloop
In die eerste reëling is alles plaaslik: die werkkopie, die indeks en die bou woon almal op jou Mac, en die netwerk dra net bewaarplek- en afhanklikheidsverkeer. In die tweede bly die projek op die afstand-Mac saam met Xcode, sodat indeksering en kompilering langs die lêers plaasvind terwyl die skakel skerminhoud en toetsaanslae dra. In die derde gebeur redigering plaaslik en loop 'n bou op 'n afstandgasheer ná 'n uitdruklike bronoorhandiging. Die tabel noem wat elkeen beweeg.
| 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 |
Lees eers die middelste kolom, want dit bepaal waar foute sal verskyn. 'n Werkvloei waarvan die bron op afstand is, faal wanneer die skakel stadig is, terwyl 'n werkvloei met 'n afstand-kompileerder faal wanneer die oorhandiging dubbelsinnig is. Net die derde maak jou vir albei verantwoordelik.
Tel die retoerte, nie die megagrepe nie
'n Redigeerder en 'n indekseerder doen baie klein lêerbewerkings, en elkeen word 'n retoer wanneer die lêerstelsel op afstand is. Dit maak 'n gemonteerde werkruimte sensitief vir latensie op 'n manier wat 'n enkele groot kopie nie is nie, en daarom sê die tydsberekening van 'n lêeroordrag byna niks oor hoe die werkvloei voel nie. Afstandvertoning het die teenoorgestelde profiel: dit beweeg 'n deurlopende stroom en verdra deurset beter as vertraging. Om die twee met een getal te vergelyk, lewer 'n selfversekerde verkeerde antwoord.
Nie een van die reëlings is van nature die vinnigste nie. Die regte keuse hang af van die werk wat jy werklik doen, en daarom is die volgende stap om daardie werk te probeer eerder as 'n maatstaf.
Maak die bronoorhandiging uitdruklik
Wanneer albei masjiene 'n werkkopie het, besluit watter een gesaghebbend is en watter revisie die afstandbou gebruik het. 'n Kommit is 'n duideliker oorhandiging as twee gereedskapstukke wat een gemonteerde werkboom redigeer, want die kommit het 'n identiteit en die montering het nie. Gegenereerde uitset en indeksdata het ook 'n eienaar nodig, want hulle word uit die bron herbou en behoort nie te reis asof hulle bron is nie. 'n Tweerigting-spieël sonder konflikreëls is nie 'n werkvloei nie, dit is 'n wedloop.
Bou op afstand vereis ook dat die afstandgasheer die regte gereedskapketting het en die geloofsbriewe vir private afhanklikhede. 'n VPN wat jou toegang tot die gasheer gee, leen nie jou rekeningtoegang daaraan nie, en dit installeer nie Xcode daar nie.
Kontroleer die pad voordat jy tot 'n werkvloei verbind
Verifieer die afstandgasheer voordat jy rondom hom ontwerp, en meet dan die skakel met die bewerkings wat die werkvloei werklik sal doen. Die opdragte hieronder kontroleer die gereedskapketting, die aktiewe ontwikkelaargids en die lêerwaarnemingskoste wat afstandwerkruimtes pynlik maak. Voer die laaste een oor die netwerkpad uit eerder as plaaslik.
xcode-select -p
xcodebuild -version
ssh mac-builder 'xcodebuild -version'
time git status --porcelain
'n Gasheer sonder 'n volledige Xcode-installasie gee 'n fout van xcodebuild, wat 'n gereedskapkettingprobleem is eerder as 'n netwerkprobleem. Die ontwikkelaargids wys watter Xcode die bou sal gebruik, en 'n pad wat net na die opdragreël-gereedskap wys, beteken die program is nie geïnstalleer nie. Om die bewaarplekstatus-opdrag oor die gemonteerde deel te tydsbereken, lê die retoerkoste direk bloot, en om dit met 'n plaaslike lopie te vergelyk, gee die getal wat saak maak. As daardie gaping al onaangenaam is, sal die gemonteerde-werkruimte-werkvloei erger wees onder 'n regte redigeerder.
Teken aan watter reëling jy gekies het, watter masjien die bron besit en hoe die oorhandiging werk. Daardie nota maak die volgende aanboordneming of skootrekenaarvervanging 'n konfigurasietaak in plaas van 'n ondersoek.