◉RORK LABJP
●EXPO — EAS Observe now records native crashes (Oct 7). On SDK 57, update to 57.0.21 or later●SDK 58 — SDK 58 Beta has been out since Sep 15. The stable date is still unconfirmed●RN 0.88 — React Native 0.88.x is scheduled for Oct 12, 3 days left●Q&A — People are asking why expo-widgets render blank only in production builds●RORK — GPT-6.1 Sol was added on Sep 29, available on Pro and Max plans●NEW — Building an app for a client? Decide who owns the publishing account first●EXPO — EAS Observe now records native crashes (Oct 7). On SDK 57, update to 57.0.21 or later●SDK 58 — SDK 58 Beta has been out since Sep 15. The stable date is still unconfirmed●RN 0.88 — React Native 0.88.x is scheduled for Oct 12, 3 days left●Q&A — People are asking why expo-widgets render blank only in production builds●RORK — GPT-6.1 Sol was added on Sep 29, available on Pro and Max plans●NEW — Building an app for a client? Decide who owns the publishing account first
Articles/Dev Tools
⬡ Dev Tools/2026-06-28Intermediate

What Rork's Browser Live Simulator Can Verify — and What Belongs on a Real Device

Rork's in-browser live simulator collapses the build-test loop dramatically, but it can't judge everything. Here's a clear, item-by-item split between what the simulator is enough for and what you must move to a real device through Companion.

Rork577device testing3simulatorCompaniontesting5

You assemble an app in the browser, the live simulator behaves exactly as expected, you sideload it onto your own iPhone — and notifications never arrive, the purchase button does nothing. These "the simulator never warned me" stumbles aren't tool bugs. They happen the moment you step past the boundary of what the simulator can actually verify.

In 2026, Rork compiles on a cloud-hosted Mac and streams the result back to your browser as a 60fps live simulator, with your touch input flowing through in near real time. Being able to raise the number of times you try an idea, without setting up a heavy local environment, is a meaningful shift — especially if you are an indie developer who has just started building solo. But ride that convenience all the way to submission and you'll hit a device-only trap at the very end. This article draws a firm line between what you can settle in the simulator and what you need to move to a real device through Companion.

The live simulator is fast because it removes the round trip

Understanding the mechanism sharpens your judgment. Rork's live simulator isn't building on your machine. It compiles an iOS simulator on a cloud host Mac and streams that screen to your browser as video. Your taps and scrolls are sent back to the cloud, and the result returns with barely any lag.

The advantage is obvious: without a heavy local toolchain, you can check behavior the instant you make a change. From my own years of building apps solo, the thing that ate the most time was never the app itself — it was the preparation: builds, device transfers, environment setup. The lighter that becomes, the more often you actually test an idea. I cover the mechanism in more depth in how Rork Max's cloud compile works.

But the simulator is exactly that — an iOS simulator. It reproduces iOS on a Mac rather than running on a device, so device-specific hardware, sensors, OS permission dialogs, and the purchase sandbox are either absent or behave differently. Knowing this is the shortest path to avoiding wasted rework.

What the simulator is fully enough for

The following are fine to settle entirely at the live-simulator stage. Moving them to a real device rarely changes the outcome.

  • Layout and spacing: element placement, safe-area avoidance, text wrapping. Switch across screen sizes to crush layout breaks.
  • Navigation and transitions: tab switching, back gestures, modal open/close. Whether your flow holds together is fully traceable here.
  • In-app state: whether a value carries to the next screen, whether a list re-renders. Logic that stays inside the app is trustworthy.
  • Light/dark appearance: palette and contrast, and text readability when the theme flips.
  • Basic text input: focus movement and validation — though fine-grained Japanese IME conversion is safer to re-check on a device.

In short, appearance and logic that are self-contained inside the app are most efficient to finish in the simulator.

What the simulator can't judge — move it to a real device

This is the core. No matter how smoothly the following run in the live simulator, never call them "working" on that basis alone. Their true behavior only shows on a device.

  • Push notifications: remote delivery assumes a real device. The simulator won't deliver them, or behaves differently — so run the full path on a device, from the permission dialog through receipt and post-tap navigation.
  • The ATT (tracking) dialog: display timing and the allow/deny branches. Whether the advertising ID is available can only be verified correctly on a device.
  • In-app purchases (subscriptions and one-time): purchase flow, restore, sandbox receipt validation. A purchase can't even complete in the simulator, so always verify billing on a device.
  • Camera, photo library, microphone: features tied to real hardware and permissions. The simulator offers limited stock images and won't reproduce the permission-dialog experience.
  • Haptics: vibration can only be felt on a device. Tune strength and timing with the phone in hand.
  • Scroll "feel" and perceived performance: inertial smoothness, jank on image-heavy screens, slowdown from thermal throttling. None of this measures accurately over a stream.
  • Biometrics (Face ID / Touch ID): success, failure, and fallback branches belong on a device.
  • Deep links from other apps: launches via the share sheet or a URL scheme should be checked on a device, in combination with the other app.

What they share: every one touches device-specific hardware, an OS permission, or integration with an external service like billing or notifications. If a feature hits any of those three, treat the simulator pass as a draft and carry the final judgment to a device.

When to move from the browser to a device through Companion

So when do you move off the browser? The rule I use in solo development is dead simple. The moment a feature touches hardware, a permission, or billing/notifications, run that one feature on a device. Rather than batching all device testing until everything is built, checking each risky feature the instant you add it makes isolating the cause far easier.

With Rork, you can transfer to your own iPhone through the Companion app without even a paid Apple Developer account. Because that first "run it on a device" friction is low, frequent device checks fit the workflow well. I've written up the transfer steps in how to start device testing with Rork Companion. For the final pre-submission pass, going one step further and running it through beta-distributing your Rork app on TestFlight — close to the real delivery path — buys you extra peace of mind.

The minimum I always run on a device before submission

To close, here's the minimum set I always verify on a real device before submitting in my solo work. Even when the simulator looks fine, these get one pass each on the actual phone.

Notifications, from permission through receipt and post-tap navigation — one round trip. Purchases, buy and restore in the sandbox — one round trip. Camera and photo access, from a first-run deny through re-allow. And an image-heavy screen, scrolled for a real few-dozen seconds to feel the heat and the speed falloff in your hand. Just running these four noticeably lowers the odds of hitting a device-only defect after release.

The browser live simulator is a powerful base for raising your number of attempts. Use that speed — but move anything touching hardware, permissions, or billing onto a device. Holding that one line removes most of the late-stage stumbles. Start by taking the next feature you'll touch and sorting it, with the three criteria above, into "simulator is enough" or "needs a device."

Share

Thank You for Reading

Rork Lab is ad-free, supported entirely by members like you. We publish practical guides daily with implementation code, benchmarks, and production-ready patterns. If you've found it useful, we'd love to have you on board.

  • ✦Copy-paste ready implementation code
  • ✦New advanced guides published daily
  • ✦$5/mo or $15 for lifetime access
View Membership →

If you found this article helpful, a small tip ($1.50) would mean a lot to us. Your support helps keep this site ad-free and covers server and hosting costs.

Related Articles

⬡ Dev Tools2026-10-07
Japanese Headings Won't Turn Bold on Android: How to Trace and Fix a fontWeight That Does Nothing
A troubleshooting note for Rork apps where headings look bold on iPhone but stay thin on Android. How to tell the symptoms apart, pick weights through fontFamily, and verify the fix.
⬡ Dev Tools2026-09-21
A build that stops with exit code 0 — the flag that silenced the log, and the check that let an empty file through
Two reports landed in the same week: eas build --local stopping with exit code 0 but produced no further output, and a zero-byte stub that never got embedded. Both came down to settings that reduce output. Here is how to audit your own scripts.
⬡ Dev Tools2026-09-19
Reading only what Rork changed: the diff routine I run after every re-export
How to read a fresh Rork export as a diff against the last one: clear tracked files before you copy, strip the noise before you count, and stop once before the merge commit lands.
📚RECOMMENDED BOOKS
Build a Large Language Model (From Scratch)
Sebastian Raschka
LLM Dev
Prompt Engineering for LLMs
Berryman & Ziegler
Prompting
AI Engineering
Chip Huyen
AI Eng
* Contains affiliate links