Externe Mac voor Xcode: lokaal bouwen, op afstand bouwen of scherm delen?
Een gemounte werkruimte en een externe Xcode verplaatsen verschillende gegevens. Bepaal waar de bron, de index en de build leven, en meet daarna de roundtrips.
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.
| 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 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.