Black Friday30% off your first month. See prices →
VibeView

Live development · Windows

React Native iOS simulator on Windows, with hot reload

Rokas Kašinskas — Co-founder, VibeViewPublished 2026-10-23Updated 2026-10-23

This guide is for React Native and Expo developers whose main machine runs Windows and who need to see the iOS side of their app while they write it. Android isn’t the problem, because the Android emulator runs on Windows. iOS is.

Why npx react-native run-ios can’t work on a PC

The React Native setup guide states it plainly: “A Mac is required to build projects with native code for iOS.” Expo’s docs say the same about the simulator: “the iOS Simulator can only be installed on macOS.” Both pages were checked on October 23, 2026.

Two separate things are missing on Windows. Xcode isn’t there to compile the native app, and Apple’s Simulator app isn’t there to run it. Any setup that works has to supply both somewhere else. Your editor, your terminal and Metro can stay on the PC.

The ways Windows developers reach an iOS screen

All four keep Fast Refresh. They differ in where the app runs and what it costs you.

SetupWhat runs whereThe catch
Expo Go on a physical iPhoneMetro on your PC, the app in Expo Go on your phoneExpo Go has a fixed set of native libraries, so a project that needs any other native library can’t use it. You need an iPhone.
A Mac you borrow or rentEverything on the MacEvery keystroke goes through a remote desktop, and a rented Mac costs by the hour or month.
Expo’s EAS SimulatorA remote simulator, with Metro tunneled from your machineA limited-access preview with a waitlist, per Expo’s introduction (checked October 23, 2026). Expo’s Windows walkthrough runs its CLI in WSL.
A VibeView cloud build plus a cloud simulatorThe compile and the simulator on our Macs, Metro on your PCNo camera or Bluetooth, a native change means a new cloud build, and Free sessions stop at five minutes.

The rest of this guide sets up the last row.

What you need on the PC

  • Node.js and your project’s dependencies, installed the usual way
  • Git, with your project in a git repository. The cloud build uploads the files git tracks, plus new files it doesn’t ignore.
  • The VibeView CLI: npm install -g vibeview, then vibeview login. In PowerShell, first run Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser once, or npm itself stops with “running scripts is disabled on this system”.
  • A VibeView account. The Free plan includes a monthly allowance of cloud build minutes and 30 streaming minutes a month, in sessions of up to five minutes. A longer working session needs a paid plan.

Run the commands in this guide in PowerShell, Command Prompt or Git Bash.

You don’t need Xcode, CocoaPods or a Mac.

Set up the loop

  1. Compile a debug simulator build in the cloud. From your project root:

    vibeview build --cloud --platform ios

    The first run asks for a build command and suggests one when it can read your project. For a bare React Native app, the suggested command installs your packages, runs pod install and builds for the simulator with xcodebuild. For a managed Expo app, it runs npx expo prebuild first. Accept the suggestion, and the CLI fills in the path of the finished .app itself. It only asks for that path if you type your own command. The command and path become the development profile in vibeview.json, and a preview profile is saved next to it.

    If your account already has iOS apps, it then asks which app the builds attach to. Pick Create a new app from this build unless this project is already one of them.

  2. Start Metro in one terminal, as you would for a local simulator.

    npx react-native start

    Expo projects use npx expo start instead.

    The first time Metro starts, Windows Firewall may ask whether Node.js can use public and private networks. You can choose Cancel: vibeview dev connects to Metro from your own PC, so this loop doesn’t need the network access.

  3. Start the session in a second terminal.

    vibeview dev --platform ios

    The first cloud build recorded which VibeView app it belongs to, so this command needs no app id. VibeView starts an iPhone simulator, installs your latest debug build, connects it to the Metro running on your PC, and opens the session in your browser.

  4. Save a file. Change a visible string and save it. Fast Refresh updates the streamed app, just as it would on a local simulator.

  5. Stop with Ctrl+C in the vibeview dev terminal. That ends the session. Next time, run the same two commands from steps 2 and 3. Nothing needs rebuilding until your native code changes.

Native changes: rebuild in the cloud, not with --build

A native change means adding or upgrading a package with native code, editing anything under ios/, or changing native settings in your Expo config. Everything else is JavaScript or assets, and Metro delivers it without a build.

The live development docs suggest vibeview dev --build after a native change. On Windows, skip that flag for iOS. It runs your build command on your own machine, and there is no xcodebuild on a PC. Rebuild in the cloud instead, then start the session as usual:

vibeview build --cloud --platform ios
vibeview dev --platform ios

vibeview dev then runs your newest debug build. If that build was made from a different version of your app than the project on your PC, it runs the newest debug build that matches your version and says why.

Expo projects on Windows

Expo Go isn’t part of this setup. The simulator runs a build of your own app, with the native modules your project actually uses.

  • Without expo-dev-client, an Expo debug build also carries a copy of your JavaScript. When Metro is running, the app loads from Metro and hot-reloads. When it isn’t, the app falls back to the copy it carries.
  • With expo-dev-client, the debug build has no JavaScript of its own, so it needs Metro for every session.
  • If your Expo config is dynamic (app.config.ts or .js), install your dependencies on the PC before the first cloud build. The CLI reads your app’s name from that config to write the build command.
  • Don’t use npx expo run:ios as the build command. It’s a dev-loop command that builds and installs onto a local simulator. Use the suggested xcodebuild command instead.

Already building with EAS? Keep doing so. Upload its iOS simulator build with vibeview upload-app, and vibeview dev will use it, as long as it’s a debug build.

When vibeview dev says “No debug build”

vibeview dev needs a debug build that can load JavaScript from Metro. If the app has none, the CLI stops as the session starts, ends the session and prints an error that starts with No debug build found for.

It usually means the only builds you have are release builds: a preview build, an uploaded Release .app, or an EAS simulator build made in Release. Fix it in one of two ways:

  • Run vibeview build --cloud --platform ios without a profile name. That builds the development profile, which is a debug build.
  • To open a release build as it is, with no Metro, run vibeview dev --standalone. Edits won’t hot-reload in that mode.

To send the app to a reviewer instead, use a preview build, which runs without your Metro. Preview an Expo iOS build without a Mac covers that.

Troubleshooting

  • PowerShell says running scripts is disabled when you type npm or vibeview. Windows blocks PowerShell scripts by default, and npm, npx and vibeview each start through one. Run Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser once, as Microsoft documents, or use Command Prompt.
  • vibeview build --cloud fails in Git Bash with Cannot connect to C: resolve failed. Older CLI versions pack your source with Git Bash’s own tar, which can’t read Windows paths. Update the CLI with npm install -g vibeview, or run the build from PowerShell or Command Prompt.
  • vibeview dev stops and says Metro isn’t running. Start Metro in its own terminal first (step 2), then run vibeview dev again. If Metro stops mid-session, start it again and reload the app.
  • The app shows a red error screen right after it opens. The build’s native code may not match your current branch. vibeview list-builds <app> lists your builds, and vibeview dev --build <id> runs a specific one. A fresh cloud build of your current branch also fixes it.
  • A screen fails with a missing native module. Metro can’t install native code. Make a new cloud build.
  • The build finishes, but VibeView won’t run it. Your command built for a physical iPhone. Add -sdk iphonesimulator to the xcodebuild line and build again.
  • The session ends while you’re reading code. An idle session ends after your organization’s timeout. About a minute before, vibeview dev warns you. Saving a file or touching the device keeps the session going.

Android, Apple TV, Android TV and Roku from the same terminal

vibeview dev --platform android runs the same loop on a cloud Android emulator, and tvos and androidtv cover Apple TV and Android TV. Roku channels get a reload loop of their own with vibeview dev --platform roku.

Frequently asked questions

Do I still need a Mac for anything?

Not for the dev loop: the compile and the simulator both run on our Macs, and your PC runs the editor, Metro and the CLI. Native debugging and profiling in Xcode, such as Swift breakpoints or Instruments, still needs a Mac.

Does a dev session use streaming minutes?

Yes. A dev session counts streaming minutes like any other session on your plan. Cloud builds count build minutes. The pricing page has each plan’s allowance.

Does this work for a TypeScript or monorepo project?

Yes, as long as your build command produces a debug simulator app and Metro starts from the folder you’d normally start it in. The cloud build runs whatever command you give it, so a monorepo command can install from the workspace root first.

Is the cloud simulator good enough to skip testing on an iPhone?

No. It is Apple’s own simulator, so layout, navigation and app logic behave as they do on a Mac. Camera, Bluetooth, push delivery and real-world performance still need a physical iPhone pass before release.

How do I get the same app onto TestFlight from Windows?

With a production build and the submit command. Build a React Native iOS app without a Mac walks through signing and the upload.

Next steps

Try it yourself

Open a live iOS simulator, Android emulator, Apple TV, Android TV or Roku in your browser.

Start free