Een project via het netwerk delen verplaatst Xcode niet, omdat de app op je Mac blijft draaien en de server blijft vragen om projectgegevens. Xcode op de externe Mac draaien en het scherm bekijken is een andere opstelling, waarbij de app en zijn bestanden bij elkaar blijven en de verbinding alleen het beeld en je invoer vervoert. Bepalen welke van de twee je wilt, voordat je iets configureert, lost het grootste deel van de latere verwarring op.

Drie opstellingen dekken de gebruikelijke gevallen, en ze verschillen in waar de werkruimte staat en welke machine compileert. Schrijf je antwoord op beide punten op voordat je verdergaat.

Noem de machine die Xcode draait

In de eerste opstelling is alles lokaal: de werkkopie, de index en de build staan op je Mac, en het netwerk vervoert alleen verkeer van de repository en afhankelijkheden. In de tweede blijft het project met Xcode op de externe Mac, zodat indexering en compilatie naast de bestanden gebeuren terwijl de verbinding scherminhoud en toetsaanslagen vervoert. In de derde gebeurt het bewerken lokaal en draait een build op een externe host na een uitdrukkelijke bronoverdracht. De tabel noemt wat elk van hen verplaatst.

ArrangementWhere the source livesWhat crosses the link
Everything localLocal diskRepository and dependency traffic
Remote Xcode, screen sharedRemote diskDisplay frames and input events
Local edit, remote buildBoth, with a handoffSource transfer, then build output

Lees eerst de middelste kolom, want die bepaalt waar fouten zullen verschijnen. Een werkstroom waarvan de bron extern is, faalt wanneer de verbinding traag is, terwijl een werkstroom met een externe compiler faalt wanneer de overdracht dubbelzinnig is. Alleen de derde maakt je voor beide verantwoordelijk.

Tel de roundtrips, niet de megabytes

Een editor en een indexeerder sturen veel kleine bestandsbewerkingen, en elk daarvan wordt een roundtrip wanneer het bestandssysteem extern is. Dat maakt een gemounte werkruimte gevoelig voor latency op een manier waarop één grote kopie dat niet is, en daarom zegt het timen van een bestandsoverdracht bijna niets over hoe de werkstroom aanvoelt. Externe weergave heeft het tegenovergestelde profiel: het verplaatst een continue stroom en verdraagt doorvoer beter dan vertraging. De twee met één getal vergelijken levert een zelfverzekerd verkeerd antwoord op.

Geen van de opstellingen is van nature het snelst. De juiste keuze hangt af van het werk dat je echt doet, en daarom is de volgende stap dat werk proberen in plaats van een benchmark.

Maak de bronoverdracht uitdrukkelijk

Wanneer beide machines een werkkopie hebben, bepaal dan welke gezaghebbend is en welke revisie de externe build gebruikte. Een commit is een duidelijkere overdracht dan twee tools die één gemounte werkboom bewerken, omdat de commit een identiteit heeft en de mount niet. Gegenereerde uitvoer en indexgegevens hebben ook een eigenaar nodig, omdat ze uit de bron worden herbouwd en niet zouden moeten reizen alsof ze de bron zijn. Een tweerichtingsspiegel zonder conflictregels is geen werkstroom, het is een race.

Op afstand bouwen vereist ook dat de externe host de juiste toolchain heeft en de inloggegevens voor privéafhankelijkheden. Een VPN waarmee je de host bereikt, leent hem niet je accounttoegang, en hij installeert daar geen Xcode.

Controleer het pad voordat je je aan een werkstroom vastlegt

Verifieer de externe host voordat je eromheen ontwerpt, en meet daarna de verbinding met de bewerkingen die de werkstroom echt zal uitvoeren. De opdrachten hieronder controleren de toolchain, de actieve ontwikkelaarsmap en de kosten van bestandsobservatie die externe werkruimtes pijnlijk maakt. Voer de laatste uit over het netwerkpad en niet lokaal.

xcode-select -p
xcodebuild -version
ssh mac-builder 'xcodebuild -version'
time git status --porcelain

Een host zonder volledige Xcode-installatie geeft een fout van xcodebuild terug, en dat is een toolchainprobleem en geen netwerkprobleem. De ontwikkelaarsmap laat zien welke Xcode de build gebruikt, en een pad dat alleen naar de commandoregeltools wijst betekent dat de app niet is geïnstalleerd. Het timen van de repository-statusopdracht over de gemounte share legt de roundtripkosten direct bloot, en vergelijken met een lokale run geeft het getal dat ertoe doet. Als die kloof al onaangenaam is, zal de werkstroom met de gemounte werkruimte erger zijn onder een echte editor.

Noteer welke opstelling je koos, welke machine de bron bezit en hoe de overdracht werkt. Die notitie maakt de volgende onboarding of laptopvervanging een configuratietaak in plaats van een onderzoek.

Gerelateerde artikelen