If your a0.dev app preview will not open or gets stuck on your iPhone, the cause is almost always network, tunnel, or Expo runtime related. Here is a focused troubleshooting guide to get the on-device preview working again.
You generated an app in a0.dev, tried to open the preview on your iPhone, and it never loads. Maybe it hangs on a spinner, times out, or shows a connection error.
This is one of the most common early frustrations, and it is almost never a problem with the generated app itself.
Because a0.dev previews typically run through an Expo runtime, the failure usually lives in the connection between your phone and the preview session — network, tunnel, or runtime state.
This guide works through the likely causes in order, from the simplest to the more involved.
The most frequent cause is a network mismatch. Many preview flows expect your phone and the host session to reach each other over the network.
If you are on a corporate or public Wi-Fi with client isolation, devices on the same network cannot talk to each other, and the preview stalls.
Start by putting your iPhone on a normal, unrestricted Wi-Fi network. Avoid VPNs, guest networks, and locked-down office networks for testing.
If switching networks fixes it, the original network was blocking the connection. A mobile hotspot is a quick way to confirm this.
Expo-based previews can connect over LAN (local network) or via a tunnel that routes through the internet. LAN is faster but fragile on restricted networks.
If LAN mode fails because of network isolation, switching to a tunnel connection often resolves it, since the tunnel does not require the two devices to reach each other directly.
Follow a0.dev's or Expo's guidance for using a tunnel connection when the local connection will not establish.
Tunnels can be slower and occasionally flaky, so once you confirm the app loads via tunnel, you know the root cause was local network reachability.
If the preview app on your phone is outdated, it may not match the SDK version the generated app expects, causing it to fail to load.
Make sure the Expo runtime app on your iPhone is updated to the latest version from the App Store.
SDK version mismatches produce confusing errors that look like connection failures but are really compatibility problems.
After updating, retry the preview. If a specific SDK is required, align the app's SDK and the runtime version according to Expo's documentation.
Sometimes the preview session itself goes stale. A generation that was interrupted or a session left open too long can stop responding.
Regenerate or restart the preview from a0.dev to get a fresh session. This clears server-side state that may be causing the hang.
On the device, fully close and reopen the runtime app rather than leaving it in the background, which can hold onto a dead connection.
Clearing the runtime app's cache, if available, also resolves cases where an old bundle is stuck. A clean session plus a fresh app launch fixes many mysterious hangs.
Occasionally the connection is fine but the app itself crashes on load because of an error in the generated code.
Look for a red error screen or console output rather than an infinite spinner. That distinction tells you it is a code error, not a connection issue.
Common culprits include a missing dependency, a reference to a native module not present in the preview runtime, or a JavaScript error in a screen.
If you added a native module that needs a custom build, it will not run in a generic preview runtime — you need a development build for that, which is a different path than the standard preview.
Work through these in order. First, move your iPhone to a normal, unrestricted Wi-Fi network with no VPN, or use a mobile hotspot to rule out network isolation.
Second, if the local connection fails, switch to a tunnel connection so reachability is no longer required.
Third, update the Expo runtime app on your phone to the latest version, then fully close and reopen it.
Fourth, regenerate or restart the preview session in a0.dev for a clean slate. Finally, check for an actual error screen — if you see one, the issue is in the app or a missing native module, not the connection.
If your app uses native modules that the standard preview runtime does not include, the generic preview will never load it correctly. This is expected behavior, not a bug.
In that case, create a development build with EAS. A development build bundles the specific native modules your app needs, so features that fail in preview will work.
This is the point where you graduate from quick preview to a proper Expo development workflow.
Understanding this boundary saves hours. Not every app is meant to run in the lightweight preview, and forcing it will only produce more confusing failures.
When a preview will not load, the fastest way forward is to figure out which layer is broken: the network, the runtime, the session, or the app code.
Start with the simplest test. Try loading any other Expo project or a known-good preview on the same phone and network. If that also fails, the problem is your network or runtime, not this specific app.
If other previews load but yours does not, suspect the session or the generated code. Regenerate the session first, then look for an error screen.
This divide-and-conquer approach turns a vague hang into a specific, fixable cause. Guessing wastes time; isolating the failing layer does not.
A few mundane issues cause a surprising share of preview failures, so it is worth checking them before deeper troubleshooting.
Confirm your phone has a working internet connection independent of the preview, and that you are signed in to the correct account if the preview flow requires one.
Check that your phone's operating system and the runtime app are both reasonably current. Very old versions can fall out of compatibility with newer generated projects.
Restart the phone if nothing else works. It sounds trivial, but a stale network stack or a stuck background app is resolved by a clean restart more often than people expect.
If you have worked through network, tunnel, runtime, session, and code checks and the preview still fails, it may be a platform-side issue rather than something on your end.
At that point, capture what you see — the exact error text, whether it is a spinner or a red screen, and which steps you already tried.
Consult a0.dev's support channels or Expo's troubleshooting documentation with those specifics. A precise report gets a faster answer than a vague one.
Knowing when to stop troubleshooting locally is itself a skill. Once you have ruled out the common causes methodically, escalating with good notes is the right move.
Usually a network reachability problem. If your phone and the preview session cannot connect over the local network — often due to VPNs, guest Wi-Fi, or client isolation — the preview hangs. Try an unrestricted network or a tunnel connection.
LAN is faster but requires both devices to reach each other on the same network. If LAN fails on a restricted network, switch to tunnel mode, which routes through the internet and does not need direct local reachability.
Sometimes. If you see a red error screen or console error rather than an endless spinner, the app is crashing on load — often a missing dependency or a native module not present in the preview runtime — rather than failing to connect.
If the feature relies on a native module not included in the standard preview runtime, it cannot run there. You need a development build created with EAS, which bundles the specific native modules your app requires.
Yes. An outdated runtime can mismatch the app's SDK version and fail in ways that look like connection errors. Update the runtime app from the App Store, then fully close and reopen it before retrying.