
xcodebuild handles most CI work, but a few Xcode features have no command-line equivalent: Instruments' Time Profiler timeline, the Memory Graph Debugger, SwiftUI Previews, and the Devices & Simulators window all require the full IDE. When those are your bottleneck, a VNC session to a remote Mac closes the gap without putting Apple hardware on your desk. This guide walks through enabling macOS Screen Sharing from a shell, tuning VNC for Xcode work, and picking the right Figment plan for the job.
For graphical Xcode work on Apple silicon runtimes — Metal profiling, visionOS simulator, SwiftUI Previews that depend on arm64 frameworks — pick a Figment M-series Mac from $95/month. Physical M-series availability is confirmed in the quote; request a configuration on /mac-hosting/start. For Intel toolchains the virtual Intel macOS environment at $29/month (2 vCPU, 8 GiB RAM, 80 GiB disk) runs supported Intel Xcode releases and can cross-compile and sign arm64 targets; Apple says to use Xcode 26 or earlier on Intel processors. Xcode 27 and ARM-only execution require Apple silicon.
Access on the $29 virtual Intel macOS is through its browser console, which gives you a full desktop and terminal in the browser. VNC into that VM from a third-party client is not the intended flow; the Screen Sharing recipe below is aimed at physical i3 ($49, request-based) and M-series ($95+, request-based) Macs where Screen Sharing is exposed through the network.
Before you install a VNC client, check whether your work is genuinely graphical:
| Feature | CLI equivalent | Needs GUI |
|---|---|---|
| Build & run unit tests | xcodebuild test | No |
| Archive and export | xcodebuild archive + xcodebuild -exportArchive | No |
| Code coverage report | xcrun llvm-cov / Slather | No for reports; yes for interactive browser |
| Instruments: Time Profiler | xctrace record (record only) | Yes for the trace UI |
| Memory Graph Debugger | None | Yes |
| SwiftUI Previews | None | Yes |
| Devices & Simulators window | xcrun simctl | No for management; yes for visual launch |
| Scheme editor | None | Yes |
| TestFlight / App Store upload | xcrun altool, Transporter, Fastlane pilot | No |
| Notarization | xcrun notarytool | No |
| Core Data model editor | None | Yes |
If your work is entirely in the "No" column, the browser console or SSH to a physical Mac is faster and cheaper than a VNC pipe.
On a physical rented Mac, run the following with administrator privileges. kickstart lives inside ARDAgent.app and is Apple's long-standing command-line entry point for Remote Management; see the Apple Remote Desktop guide for the UI equivalent.
# Enable macOS Remote Management (which exposes Screen Sharing on TCP 5900)
sudo /System/Library/CoreServices/RemoteManagement/ARDAgent.app/Contents/Resources/kickstart \
-activate \
-configure \
-access -on \
-clientopts -setvnclegacy -vnclegacy yes \
-clientopts -setvncpw -vncpw "CHANGEME1" \
-restart -agent \
-privs -all
The setvnclegacy yes option enables the legacy VNC authentication path used by third-party clients. That password field is capped at 8 characters by the protocol. Prefer ARD authentication (a local macOS user) and an SSH tunnel for anything beyond a quick session; see the security notes below.
Verify the service:
sudo launchctl list | grep -i screen
# Expected row: com.apple.screensharing
Disable when you are done:
sudo /System/Library/CoreServices/RemoteManagement/ARDAgent.app/Contents/Resources/kickstart \
-deactivate -configure -access -off
If kickstart returns an error on a newer macOS build, enable Screen Sharing once from System Settings → General → Sharing → Screen Sharing, then keep automating with launchctl.
TigerVNC is a maintained open-source VNC client; the current stable Windows installer is on the project's GitHub releases page (1.16.2, March 2025, as of this writing — check for a newer tag).
<remote-mac-ip>:5900. Figment lists the assigned IP for physical plans in the plan details shared after provisioning.-setvncpw.Before connecting, open Options → Compression:
On Ubuntu or Debian:
sudo apt install remmina remmina-plugin-vnc
# or the TigerVNC client
sudo apt install tigervnc-viewer
vncviewer <remote-mac-ip>:5900
In Remmina, create a VNC connection, set the server address, and choose Image quality: Medium to start. Remmina's quality slider maps to bit depth; 16-bit is a reasonable starting point for Xcode over a 50 Mbit/s or better link.
macOS Screen Sharing streams the Mac's actual framebuffer. Headless Macs often start at a low virtual resolution; raise it with displayplacer:
# Inspect current displays and modes
system_profiler SPDisplaysDataType
# Install and set a 1440x900 virtual mode (works on physical Macs with no attached display)
brew install jakehilborn/jakehilborn/displayplacer
displayplacer list
displayplacer "res:1440x900 hz:60 scaling:off origin:(0,0) degree:0"
Starting matrix for typical broadband VNC over the public internet (measure, do not assume):
| Downlink | Resolution | Color depth | Where it hurts |
|---|---|---|---|
| 10–25 Mbit/s | 1280×800 | 16-bit | Instruments timeline redraw |
| 25–100 Mbit/s | 1440×900 | 16-bit or 24-bit | Still readable during scroll |
| 100+ Mbit/s | 1920×1080 | 24-bit | Lag concentrated in animated views |
A Memory Graph session is dominated by click-through interactions and benefits more from bit depth than frame rate. Instruments trace views redraw continuously; cutting color depth usually helps more than cutting resolution.
Reconnect behaviour. TigerVNC Viewer on Windows exposes Options → Connection → Reconnect on disconnect with a configurable retry interval; Remmina exposes the same under its connection profile. Neither replaces a real session guard — if the Mac reboots you will need to reauthenticate.
SSH tunnel, when available. Instead of exposing TCP 5900, forward through SSH on a physical Mac that has inbound SSH enabled in the quote:
# Local machine: tunnel local 5901 to the Mac's 5900 over SSH
ssh -L 5901:localhost:5900 user@<remote-mac-ip> -N
Then point the viewer at localhost:5901. The tunnel keeps VNC authentication off the open internet and gives you the account's full key-based access controls.
Rotate and shut off. Change the VNC password per session on shared hosts, and run the kickstart -deactivate command when you finish. Do not leave port 5900 reachable from the public internet; the legacy VNC password is 8 characters and brute-forceable.
If your job is one Xcode scheme per day with occasional Instruments runs, the $29 virtual Intel macOS plus the browser console removes the GUI step entirely — no VNC client needed. If you need Metal/arm64 execution in Instruments, request an M-series plan on /mac-hosting/start; entry is $95/month, exact chip, RAM, disk and availability are confirmed in the quote. Compare against MacStadium's published Mac mini pricing and CloudMac's pricing before committing — CloudMac's homepage also lists a $999/year M4 offer that works out to about $83.25/month, which undercuts 12 × $95 at Figment's current entry rate; Figment's trade-off at the $249 Managed Build Mac tier is the included CI setup, backups, monitoring and 30 minutes of monthly support bundled with one M-series Mac.
Use the browser console for terminal work, and VNC when you specifically need the graphical IDE. Start a quote on /mac-hosting/start or see all plans at /mac-hosting.
Related guides: