Guide

Use Xcode from Windows with a remote Mac

There is no Xcode for Windows. Apple ships it for macOS only, and Xcode 26.6 needs macOS Tahoe 26.2 or later. What works is a real Mac somewhere, with Xcode on it, and its screen on your PC. This guide covers the two ways to connect. It also covers lag, the keyboard and the Simulator.

Why not a virtual machine?

Searches for Xcode on Windows lead to macOS virtual machine guides. Apple's macOS license ties macOS to Apple-branded hardware, so that route is outside it. A real Mac that you reach over the network avoids the problem. Here is what the license says about renting one.

Way 1: a VNC viewer over a private network

macOS Screen Sharing speaks VNC, so viewers on Windows can connect to it. On a Mac you set up yourself, the switch is in System Settings, General, Sharing, Screen Sharing. Turn on the option that lets VNC viewers control the screen with a password. Apple notes that Screen Sharing and Remote Management cannot be on at the same time.

Never open port 5900 to the internet. It is a well-known target for scanners. Put the Mac and your PC on a private network instead. On MacRun, every Mac sits on a private Tailscale network with no public ports. Install Tailscale on your PC and accept the share. Then point RealVNC Viewer or TightVNC at the Mac's Tailscale address on port 5900. Screen Sharing is already on. Our setup docs have the exact steps.

Way 2: the desktop in a browser tab

On our agent plan, the portal has an Open my Mac button. The Mac's desktop opens in a new browser tab. Enter the screen password shown in the portal. There is nothing to install on your PC, which helps on a locked-down work laptop. Each session link expires after a while. Click the button again for a new one.

A native VNC viewer usually handles the keyboard better than a browser. The browser keeps some shortcuts for itself. For long Xcode sessions, use a viewer. For a quick check from any computer, the tab is easier.

How much lag to expect

Every keystroke goes to the Mac and every screen change comes back. So distance matters. Our Macs are in New Jersey. From the US East Coast the round trip is short. From Europe or Asia it is longer. We will not promise a number, because it depends on your connection. Measure your own:

tailscale ping <your-mac-name>
tailscale status

Tailscale's docs explain the two kinds of path. A direct connection is the fastest. A relayed one goes through Tailscale's DERP servers and is generally slower. The status output tells you which one you have. Lag shows most when large parts of the screen change, like scrolling a long file. A smaller remote resolution means fewer pixels to send, which helps.

Keyboard mapping

Your PC has no Command key, so the viewer maps one of yours to it. Which key depends on the viewer, usually the Windows key or Alt. Check the viewer's keyboard settings. Then test in TextEdit: copy and paste a word. Windows keeps a few combinations for itself, like Alt Tab and the Windows key alone.

Learn a handful of Xcode shortcuts and you will rarely reach for the mouse:

  • Command B builds. Command R builds and runs.
  • Command U runs the tests. Command period stops.
  • Command Shift K cleans the build folder.
  • Command Shift O opens any file by name.

Split the work: edit over SSH, look over VNC

You do not have to do everything through the remote screen. VS Code's Remote SSH extension supports macOS 10.14 and later as a host, with Remote Login turned on. Your editor runs on Windows, so typing has no screen lag. The files and the terminal live on the Mac.

From that terminal you can build with xcodebuild and run the tests. Open the remote screen only when you need it: the Simulator, Xcode's debugger, Instruments, or a signing dialog. On MacRun, SSH runs over the same private Tailscale network as Screen Sharing.

Using the Simulator remotely

The Simulator is a window on the Mac's screen, so you see it in your viewer. Click to tap and drag to scroll. On MacRun, Xcode 26.6 comes with the iOS 26.5 simulator runtime installed. You can also drive it from a terminal over SSH, with no screen at all:

xcrun simctl list devices
xcrun simctl boot "iPhone 17"
xcrun simctl install booted MyApp.app
xcrun simctl launch booted com.example.MyApp
xcrun simctl io booted screenshot shot.png

Use a device name from the first command's output. An iPhone plugged into your PC is a different story. The remote Mac cannot see it over USB. Put builds on your phone with TestFlight instead. Our guide to publishing without a Mac covers that.

Who should not do this

Some work is miserable over a slow or distant link. A full day in SwiftUI previews is one example. Then a Mac on your desk is better. Apple lists the base Mac mini at $899. We do not rent Windows machines, and all our Macs are in one place, so very distant users will feel more lag. There is no SLA.

If a remote Mac fits, ours is a dedicated M6 mini with admin access. See pricing for both plans.

Frequently asked questions

Can I install Xcode on Windows 11?

+

No. Apple only ships Xcode for macOS, and Xcode 26.6 needs macOS Tahoe 26.2 or later. The working option is a real Mac you control from Windows over a remote desktop.

What do I use to connect to a Mac from Windows?

+

Any VNC viewer, such as RealVNC Viewer or TightVNC, works with macOS Screen Sharing. Run it over a private network like Tailscale, not an open port. Some providers also put the desktop in a browser tab.

Which key is Command when I control a Mac from a PC?

+

The viewer decides, usually the Windows key or Alt. Check its keyboard settings, then test with copy and paste in TextEdit.

Can I test on my own iPhone with a remote Mac?

+

Not over USB, because the remote Mac cannot see a phone plugged into your PC. Upload a build to TestFlight and install it on the phone from there.

Related guides