RORK LABJP
TOOLING — Rork's developer repos keep moving: rork-xcode was updated on July 16, rork-device on July 15, and rork-plist on July 13OPUS46 — Claude Opus 4.6 is live in Rork, and Rork Max is built to assemble apps on top of Claude CodeSIM — A cloud iOS simulator runs in the browser, with one click to install on a device and two clicks to publish to the App StoreMAX — Rork Max emits pure Swift rather than React Native, reaching iPhone, iPad, Apple Watch, Apple TV, Vision Pro, and even iMessageNATIVE — That opens up HealthKit, ARKit and LiDAR, NFC, Dynamic Island, Live Activities, 3D through Metal, and on-device inference with Core MLSEED — Rork raised a $15M seed led by Left Lane Capital, with Peak XV and a16z Speedrun joining the roundTOOLING — Rork's developer repos keep moving: rork-xcode was updated on July 16, rork-device on July 15, and rork-plist on July 13OPUS46 — Claude Opus 4.6 is live in Rork, and Rork Max is built to assemble apps on top of Claude CodeSIM — A cloud iOS simulator runs in the browser, with one click to install on a device and two clicks to publish to the App StoreMAX — Rork Max emits pure Swift rather than React Native, reaching iPhone, iPad, Apple Watch, Apple TV, Vision Pro, and even iMessageNATIVE — That opens up HealthKit, ARKit and LiDAR, NFC, Dynamic Island, Live Activities, 3D through Metal, and on-device inference with Core MLSEED — Rork raised a $15M seed led by Left Lane Capital, with Peak XV and a16z Speedrun joining the round
Articles/Dev Tools
Dev Tools/2026-05-27Advanced

Making Silent Failures Visible Across 6 Rork Apps: An Early-Warning Design Note for Non-Crash Degradation

Notes from running 6 wallpaper apps in parallel and the layer I built in 3 weeks to make Crashlytics-invisible failures observable. Beacons, timeouts, and a small Cloudflare Worker for cross-app aggregation.

Rork515Crashlytics12Observability2AdMob70Cloudflare Workers24RevenueCat28

Premium Article

One morning I opened the AdMob dashboard and saw monthly revenue down 12% week over week. Crashlytics was empty. Reviews were quiet. Server 5xx rates were normal. Revenue was simply gone, and it took me three full days to find the cause. As an indie developer who started building apps in 2014 and crossed 50 million cumulative downloads with my wallpaper apps, the failure mode I have grown to fear most is exactly this: silent degradation.

When you run 6 apps in parallel, similar things happen weekly. The ad button is visible but tapping it does nothing. The purchase dialog never opens. The rewarded video plays to completion but the reward is never granted. None of these reach Crashlytics. This post is a working write-up of the early-warning layer I added to the 6 Rork apps over the last 3 weeks, with both the design choices and the operational numbers behind them.

Why silent failures are the scariest kind — what 12 years taught me

Crashes get caught by Crashlytics. With a Velocity Alert you usually hear about them in Slack within 30 minutes. Those are observable failures.

Silent degradation is not. Users still open the app, so DAU does not move. The ad button still appears, so impressions are still recorded. But somewhere inside the SDK call chain the actual ad never serves, and nobody knows until someone happens to open the AdMob report. From my side the three categories I most worry about are:

  • AdMob eCPM collapse limited to button-triggered rewards
  • RevenueCat productPurchase events going dark, so checkout entry rates disappear
  • A spike in the percentage of cold starts where the white screen lasts more than 4 seconds

These never throw exceptions. They just stop happening, which is what makes them so hard to see. I once spent a night chasing one of these during the lead-up to an international art exhibition, which is a kind of time cost I am not willing to repeat, and that was the proximate reason I started designing this layer.

Classifying the 8 failures Crashlytics does not see

"Silent failure" is one phrase but in practice it breaks into 8 distinct categories. Doing this taxonomy before writing any code made the rest of the design straightforward.

  1. Ad button unresponsive: Tap does not progress Interstitial / Rewarded from load to show
  2. Reward not granted: Video completes but the grant callback never fires
  3. Purchase flow frozen: purchase() is called but StoreKit / Billing never presents a dialog
  4. Checkout zero-entry: Users reach the purchase screen but the "Buy" button does not respond
  5. Long white screen: Cold start to first frame exceeds 4 seconds
  6. Infinite loading: A spinner spins for more than 8 seconds
  7. Broken Remote Config rollout: Empty string or null values reach the UI without throwing
  8. Permission post-dialog silence: After an ATT denial nothing visible happens

What unifies them is that the failure is not in an exception path. It is the non-event of an expected action not happening within a deadline. Crashlytics is fundamentally not built to observe non-events, so you have to do it yourself.

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
8 categories of silent failure observed across 6 wallpaper apps over 3 weeks, with detection logic for each
How a 12% drop in AdMob revenue was traced to unresponsive ad buttons, and the Beacon design that catches it within 24 hours
An 80-line Cloudflare Workers aggregation layer that combines Crashlytics, Sentry, and a custom Beacon stream without duplicates
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-31
Running Crash-Free Rate as a Budget: An SLO Design Note for Deciding Where to Invest Across 6 Indie Apps
Notes from running 6 wallpaper apps in parallel and the shift from treating crash-free rate as a pass/fail threshold to treating it as an error budget. A working write-up on turning burn rate into investment and sunset decisions.
Dev Tools2026-05-26
Aggregating App Store Connect, RevenueCat, and AdMob into One Morning Digest with Cloudflare Workers — A Six-App Indie Architecture
A practical architecture for indie developers running multiple Rork apps: aggregate App Store Connect API, RevenueCat REST, and AdMob Reporting API in a Cloudflare Workers Cron job and ship a single daily Slack digest each morning.
Dev Tools2026-06-16
I Initialized Ads Before Restoring Purchases, and Paying Users Saw a Banner Flash — Cold-Start Ordering for Rork (Expo) Apps
Consent, ATT, ad SDK init, purchase restore, and remote config all try to run in the same few hundred milliseconds at launch. Get the order wrong and a paying user sees a banner flash, or measurement fires before consent in the EEA. Here is how I fold a Rork-generated Expo app's startup into a single orchestrator and kill the races by design.
📚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 →