RORK LABJP
BUILD — Rork Max runs real Macs in the cloud loaded with Xcode and the iOS SDK, writing SwiftUI, compiling, reading the errors and building again. That loop, not the code generation, is what lifts the outputNATIVE — What comes out is pure Swift and SwiftUI, not React Native. Reaching AR, Metal graphics and widgets that React Native cannot touch is the real gap between this and other buildersPLATFORMS — Coverage spans iPhone, iPad, Apple Watch, Apple TV and Vision Pro, plus iMessage. Worth a look if you want to start from a watch app or an extension rather than a phone screenCOMPANION — The Rork Companion app lets you check a generated build on a real iPhone without a paid Apple Developer account, lowering the bar for trying a first project end to endPRICING — Free to start, paid plans from $25 a month, and Rork Max on the $200 Max plan. Worth working out up front how many projects it takes to earn that backDEADLINE — From August 31, 2026, Google Play requires target API level 36 or higher for new apps and updates alike. Ten days out, and the targetSdkVersion of what you generate is yours to verifyBUILD — Rork Max runs real Macs in the cloud loaded with Xcode and the iOS SDK, writing SwiftUI, compiling, reading the errors and building again. That loop, not the code generation, is what lifts the outputNATIVE — What comes out is pure Swift and SwiftUI, not React Native. Reaching AR, Metal graphics and widgets that React Native cannot touch is the real gap between this and other buildersPLATFORMS — Coverage spans iPhone, iPad, Apple Watch, Apple TV and Vision Pro, plus iMessage. Worth a look if you want to start from a watch app or an extension rather than a phone screenCOMPANION — The Rork Companion app lets you check a generated build on a real iPhone without a paid Apple Developer account, lowering the bar for trying a first project end to endPRICING — Free to start, paid plans from $25 a month, and Rork Max on the $200 Max plan. Worth working out up front how many projects it takes to earn that backDEADLINE — From August 31, 2026, Google Play requires target API level 36 or higher for new apps and updates alike. Ten days out, and the targetSdkVersion of what you generate is yours to verify
Articles/Dev Tools
Dev Tools/2026-06-28Advanced

When your Rork app's production crashes arrive minified — wiring Hermes source maps and debug IDs into Sentry

Rork-generated Expo apps run on Hermes, so production crashes often arrive as index.bundle:1:284913 with no function names. Here is how to wire Hermes source maps and debug IDs into Sentry so your stack traces become readable.

Rork539Expo175Sentry6Hermes7Source MapsCrash Reporting

Premium Article

The first crash that reached Sentry after a release was a single line: index.android.bundle:1:284913. No repro steps, no screen name, nothing. The React Native (Expo) app that Rork generated for me runs on Hermes, and the production bundle is minified into one line. The crash was captured, but unreadable — the most frustrating state to be in.

If you run apps as an indie developer for any length of time, the unreadable stack trace is a wall you hit at least once. Across the apps I run at Dolice, the native side is symbolicated through Crashlytics and dSYMs, but the Rork-based Expo apps work through a completely different mechanism. The keys are the Hermes source map and the debug ID that ties it to a specific build. Get those right, and the same crash view comes back with function names and original line numbers.

Why Hermes only sends you numbers

Hermes does not run your JavaScript as-is. At build time it precompiles it into Hermes bytecode (.hbc). On top of that, the production build has Metro concatenate every module into a single file and shorten variable names. Line 42 of your PaywallScreen.tsx becomes "column 284913" of one enormous collapsed line.

What the device sends on a crash is only that collapsed position. The lookup table that maps it back to the original file and line is the source map — and with Hermes you need a Hermes-specific compose step on top of the regular source map. Skip it and you fall into the trap of "uploading source maps" that never actually symbolicate.

Debug IDs guarantee "this is the same build"

When symbolication breaks even though you uploaded source maps, the cause is almost always that the bundle that crashed and the source map you uploaded came from different builds. Tying them together by version name (like 1.8.0) falls apart the moment you ship a hotfix.

Debug IDs solve this at the root. A debug ID is a unique identifier generated per build and baked into both the bundle and its source map. Sentry matches the debug ID inside the crash against the debug ID of an uploaded source map, so it no longer depends on version names lining up. Modern @sentry/react-native makes this the default. Since switching from version matching to this approach myself, missed symbolication has dropped to nearly zero.

Thank you for reading this far.

Continue Reading

What follows includes implementation code, benchmarks, and practical content we hope you'll find useful. This site runs without ads — server and development costs are supported entirely by members like you. If it's been helpful, we'd be truly grateful for your support.

WHAT YOU'LL LEARN
If you've been stuck with crashes that read index.bundle:1:284913, you'll get a crash view with real function names and line numbers today
You'll bake the same Hermes debug ID into both the EAS Build output and its source map, so a tiny version drift never breaks symbolication again
You'll symbolicate OTA (EAS Update) crashes too, so even a few-thousand-download production app lets you start triage within 5 minutes
Secure payment via Stripe · Cancel anytime

Unlock This Article

Get full access to the rest of this article. Buy once, read anytime. This site is ad-free — your support goes directly toward keeping it running.

or
Unlock all articles with Membership →
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 $10 for lifetime access
View Membership →

Related Articles

Dev Tools2026-05-07
Killing the Silent Crash in Rork-Generated Apps — A Practical Error Boundary and Unhandled Promise Setup
Rork-generated code tends to swallow errors with optional chaining and leave promise rejections uncaught. Here is the minimum production-grade setup to surface those crashes instead of letting users churn in silence.
Dev Tools2026-08-21
The four acceptance checks I still run after the build turns green
A successful build does not mean a shippable build. Here are the four failure classes an AI build loop cannot see, and a dependency-free script that inspects the artifact itself before you submit.
Dev Tools2026-08-20
A beta-SDK build can reach TestFlight, but it can't reach review
Builds made with a beta Xcode can be distributed through TestFlight, but they cannot be submitted for App Store review. Here is how to check which SDK produced your build, and how to protect your release profile in eas.json.
📚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
See all →