Vibeview
Pricing
Expo previews

Preview an Expo iOS build without a Mac

Rokas KašinskasCo-founder, VibeViewPublished 2026-09-12Updated 2026-09-12

An Expo web preview renders your project’s web target. An iOS simulator preview runs the native iOS build, which is the useful choice when you need to check native navigation, platform-specific layout, or a native module’s UI.

Choose a preview build or a development build

For someone to review your app independently, use a simulator build that includes its JavaScript bundle. For editing your own code with Fast Refresh, use a debug build connected to Metro.

Expo Go is a separate development app with a fixed set of native libraries. Your own development build includes your project’s native dependencies. Expo explains that distinction in its development-build introduction. The upload workflow below uses a build of your app.

Build a standalone simulator preview with EAS

You need an Expo project already configured for EAS Build and access to its Expo account. In eas.json, add this profile inside the existing build object, preserving your other profiles:

{
  "build": {
    "browser-preview": {
      "developmentClient": false,
      "ios": {
        "simulator": true,
        "buildConfiguration": "Release"
      }
    }
  }
}

The profile requests a release simulator build for an independent preview. Expo documents these fields in the EAS configuration reference. Check any project-specific build scripts and environment settings too: they must produce an app that can run without your local development server.

Build it using EAS CLI:

eas build --platform ios --profile browser-preview

Download the completed simulator artifact from the build result. Skip any prompt to install it on a local simulator when working on Windows or Linux. The simulator artifact contains a .app bundle; a device .ipa is not suitable. Expo’s simulator-build reference documents the simulator profile setting.

Or build through VibeView

If you want the build to appear directly in your VibeView app library, run these commands from your Expo project:

npm install -g vibeview
vibeview login
vibeview build --cloud --platform ios

The first build asks for its build command and artifact path. For managed Expo projects, the suggested command installs dependencies, generates the native project, and compiles it. Review it before continuing; projects with dynamic Expo configuration may need a custom command.

The suggested debug build is useful for live development. For an independent preview, configure a Release simulator build with bundled JavaScript and set the artifact path to its output. See Cloud Builds for configuration details. The .app must target the simulator even when its configuration is Release; --production produces a signed device build instead.

Upload and run the preview

  1. Open Apps in VibeView and choose Upload app. Upload the simulator .app or its supported archive. If you built through VibeView, use the app attached to the completed build.
  2. Click Play on the app row. Select an available iOS simulator in the sandbox and click Start session.
  3. Wait for the app to install and launch, then check a native screen and complete a navigation flow.
  4. Close your local Metro process, if one was running, and check that the standalone preview still opens and works. This is the check to perform before sending a review link.

For the upload formats and session walkthrough, see Upload and Test an iOS Build in the Browser.

Use Fast Refresh while developing

Use a matching debug simulator build for this workflow. Start Metro from that source project and leave it running:

npx expo start

In a second terminal in the same project, run:

vibeview dev --platform ios

The CLI reuses the saved app or asks you to select an uploaded debug app. If a previous cloud build created vibeview.json, Metro setup may not be prompted again; starting Metro in the first terminal covers that case. On Windows or Linux, reuse the existing cloud build rather than asking the CLI to compile iOS locally. Change a visible label, save, and check the streamed app for the update.

A release preview will not become a development build just because Metro is running. Rebuild when changing native dependencies, and keep the debug build aligned with the source you are editing. The live-development guide covers bundler setup and session shutdown.

Troubleshooting the handoff

The upload is rejected. Confirm that the EAS profile has ios.simulator: true and that you downloaded that profile’s artifact. A successful store build is still the wrong target for a simulator.

The app waits for Metro. For a review, rebuild with bundled JavaScript. For development, connect your debug build using vibeview dev.

A native module is missing after an edit. JavaScript refresh cannot install new native code. Produce a new simulator build containing that dependency.

The preview works for me but not a reviewer. Check the build selected on the share link, whether the app needs your Metro process, and whether its backend is reachable from the remote simulator.

Once the independent preview works, create an iOS app review link. Reviewers can open it in their browser; use physical iPhone testing for hardware-dependent behavior before release.

Frequently asked questions

Can I preview an Expo app on iOS without a Mac at all? Yes. The iOS compile still happens on macOS, but not on yours: EAS Build and VibeView cloud builds (beta) both run it on a hosted Mac and hand back a simulator .app. Uploading and running that build needs only a browser, so the whole loop works from Windows or Linux.

Can I use Expo Go instead of building my own app? Not for this workflow. Expo Go is a separate app with a fixed set of native libraries, and the preview here runs a build of your app, including its own native dependencies. A development build of your project gives you the same Fast Refresh loop with the right native code.

Do I need EAS? No. EAS is one way to get a simulator .app; a cloud build from the VibeView CLI or a simulator build from any Mac or macOS CI runner works the same way once uploaded.

Will Fast Refresh work in the browser preview? Yes, with a debug simulator build connected to Metro on your machine through vibeview dev. A release build with bundled JavaScript is for independent previews and does not hot-reload; rebuild it when the code changes.

Is the browser preview a substitute for testing on an iPhone? No. It runs the same simulator Xcode does, so it covers layout, navigation and app logic, but not camera, Bluetooth, push delivery or real performance. Keep a physical-device pass before release.

Try it on your own build

The free tier takes no card: two concurrent sessions, 30 streaming minutes a month in sessions of up to five minutes, and ten cloud builds a month. That is enough to put your current Expo build on a streamed iPhone this afternoon and find out whether the loop works for you.

Try it yourself

Open a live iOS simulator or Android emulator in your browser.

Start free