Test an Expo Build in the Browser
Expo works with VibeView, but only one build profile does, and picking the wrong one is the single most common reason an upload gets rejected. The short version: you need an EAS build with a simulator profile, not Expo Go and not a store build. Once you have that, the device runs in a browser tab and attaches to the Expo dev server you already have running.
How it works
-
1. Build with a simulator profile, not Expo Go
Expo Go is Expo's own app, not yours — uploading it gets you a running copy of Expo Go with none of your code in it. What you need is a development or preview build with a simulator profile in eas.json. That build output contains the simulator .app the upload expects.
{ "build": { "preview": { "distribution": "internal", "ios": { "simulator": true } } } } -
2. Produce the build and upload it
Run the EAS build for that profile and upload the result. For Android, the .apk your existing build already produces works as-is. Uploads are capped at 500 MB, which is comfortably above a typical Expo simulator build.
eas build --profile preview --platform ios # download the artifact, then vibeview upload-app path/to/YourApp.app # Android eas build --profile preview --platform android vibeview upload-app path/to/YourApp.apk -
3. Attach the Expo dev server
Start Expo as usual and run vibeview dev. The CLI recognises Expo's dev server as well as bare Metro, so hot reload works the same way — save a file and the cloud device updates. It checks the dev server is reachable before creating a session rather than opening one your app cannot talk to.
# terminal 1 npx expo start # terminal 2 vibeview dev -
4. If the upload is rejected
Two causes account for nearly all of them. An .ipa is a device build and will never install on a simulator — the rejection message says so. And an EAS build made without "simulator": true produces a device binary even on the preview profile, which fails the same way. Rebuild with the profile above rather than retrying the upload.
Full setup instructions live in the documentation.