◉RORK LABJP
●GPT-6.1 SOL — Added to Rork's model menu (09-29) with Low, Medium and High effort; included on Pro and Max●SONNET 5.5 — Claude Sonnet 5.5 is selectable: strong at UI design and faster than Sonnet 5 (09-28)●SONNET 4.5 — Retires on the Claude API on 11/30, 27 days left. If your app calls it, check the migration target●SDK 58 — Moves to React Native 0.88. R8 is now on by default in Android release builds, and iOS prebuild generates a SceneDelegate●OBSERVE — EAS Observe now records native crashes too (SDK 57.0.21 or later, 10/07)●NEW — My App Open Ad Only Showed When the App…●GPT-6.1 SOL — Added to Rork's model menu (09-29) with Low, Medium and High effort; included on Pro and Max●SONNET 5.5 — Claude Sonnet 5.5 is selectable: strong at UI design and faster than Sonnet 5 (09-28)●SONNET 4.5 — Retires on the Claude API on 11/30, 27 days left. If your app calls it, check the migration target●SDK 58 — Moves to React Native 0.88. R8 is now on by default in Android release builds, and iOS prebuild generates a SceneDelegate●OBSERVE — EAS Observe now records native crashes too (SDK 57.0.21 or later, 10/07)●NEW — My App Open Ad Only Showed When the App…
⬡ Dev Tools

Dev Tools

React Native and Expo techniques, build-error and crash troubleshooting, and API integrations that help you take Rork-generated code to production quality.

2026-06-13Advanced

Before Your Feature Flags Turn Into a Junkyard — Governing Naming, Staged Rollout, and Kill Switches Across Six Apps

Keep adding remote-config flags and within six months you have keys nobody remembers the meaning of. Here is a governance system — naming conventions, safe defaults, staged rollout, kill switches, and monthly cleanup — with the implementation from running six apps in parallel.

2026-06-13Advanced

Choose Native Features by Retention Impact, Not by Checklist

Rork Max can generate widgets, Live Activities, and Core ML alike. But 'can build' and 'should build' are different things. Here is how to decide native-feature adoption by its effect on retention.

2026-06-13Intermediate

You Only Get to Ask Once — Implementing a Notification Soft-Ask in Your Rork App to Lift Opt-In

On iOS, once a user denies the notification prompt you can never show it again. In a Rork (Expo) app, instead of firing the system prompt on launch, we add our own soft-ask screen and only request permission once the value has landed. Built with expo-notifications, covering Android 13 POST_NOTIFICATIONS, a recovery path after denial, and opt-in measurement.

2026-06-13Advanced

Keeping a Rork-Built Expo App Ready for Kotlin Migration — Design Notes After Android Studio's Migration Agent Announcement

Android Studio's new agent can migrate React Native apps to native Kotlin. Here is how I restructured a Rork-built Expo app to stay migration-ready: a native dependency audit script, a portable core layer pattern, and a readiness checklist.

2026-06-13Intermediate

When Hiragana Doesn't Match Katakana — Japanese-Aware In-App Search for Rork Apps

A hiragana query silently missing katakana titles is a UX failure users never report. How I fixed Japanese search in my wallpaper app with NFKC normalization, kana folding, and precomputed search keys.

2026-06-12Advanced

Keeping Manual Fixes Alive Across Rork Regenerations — Boundary Design for AI-Owned Code

A tiny copy-change request quietly reverted my week-old ATT fix. Here is the boundary architecture I use now: a guarded directory, one-line adapters, patch assets, and scoped prompts — with measured blast-radius numbers.

2026-06-12Intermediate

Android 17 Will Ignore Your Portrait Lock — Getting Rork-Built Expo Apps Ready for Large Screens Ahead of Time

Android 17 stops honoring orientation locks and resizability restrictions on large-screen devices. Here is how I assessed the impact on my Rork-built Expo apps, reworked the layouts, and verified everything with nothing but an emulator.

2026-06-12Intermediate

Your Rork App's 'Documents & Data' Keeps Growing — Taming expo-image's Disk Cache

My wallpaper app's binary was 40 MB, yet 'Documents & Data' had ballooned to 2.4 GB. Here is how I diagnosed expo-image's unbounded disk cache and fixed it with cachePolicy tuning, thumbnail URLs, and generational cache clearing.

2026-06-12Advanced

Schema Versioning for Local Data in Rork Apps — Shipping Updates Without Wiping a Single Favorite

How I stopped losing users' locally stored data when shipping updates to Rork apps. A complete TypeScript migration runner with envelope versioning, backup keys, fixture tests, and the rule that keeps EAS Update schema-neutral.

2026-06-12Intermediate

Building a Developer Debug Menu Into Your Rork App — Verify Ads, Purchases, and Remote Config Before Release

A production-safe developer debug menu for Rork apps — switch environments, force test ads, simulate entitlements, and override Remote Config, with working TypeScript code and the pitfalls I hit running six apps.

2026-06-12Intermediate

Adding a Home Screen Widget to a Rork App — Making WidgetKit Work Within Expo's Constraints

Rork generates Expo apps, and home screen widgets can't be written in React Native. Here's how to wire up WidgetKit with a config plugin and App Groups — including the parts that tripped me up.

2026-06-12Advanced

Your App Won't Notice the Refund — Revoking Entitlements with REFUND Notifications and the Voided Purchases API

A refund doesn't reach your app on its own — a cached premium flag survives it. Implementation notes on revoking access via App Store Server Notifications V2, Google Play's Voided Purchases API, and RevenueCat.

2026-06-09Intermediate

Deep Links in Rork Max — Universal Links and URL Schemes

A hands-on guide to deep linking in Rork Max apps: when to use URL Schemes vs. Universal Links, the AASA/assetlinks pitfalls, and the cold-start trap — with working examples.

2026-06-03Advanced

Putting a Wallpaper Shuffle in Control Center — a ControlWidget in a Rork (Expo) App, Rebuilt for iOS 26

Field notes on bolting a Control Center control (ControlWidget) onto a Rork-built React Native wallpaper app — App Group sharing, AppIntent, the Expo config plugin that survives prebuild, and what changed when I rebuilt it for iOS 26 accented rendering.

2026-06-03Intermediate

Your Rork iOS App Won't Build After Adding AdMob Mediation — Untangling Linker Errors and No-Fill Ads

Added Unity Ads, Liftoff, or InMobi mediation adapters to your Rork/Expo iOS app and suddenly hit ld linker errors or ads that never fill? Here's how to isolate the cause by symptom and fix each layer.

2026-06-03Advanced

Guarding Analytics Events With Types Across Six Rork Apps — A Shared Event Layer

After event names drifted across six apps and quietly broke my dashboards, I built a typed event registry and a thin wrapper to centralize tracking, plus a CI check that catches schema drift. Here is the design, with the code I actually use.

2026-06-02Intermediate

Fixing 'No bundle URL present' on a Release Build to a Real iOS Device

How to read the 'No bundle URL present' error that shows up when you build a Rork-exported app locally in Xcode. We separate the Metro-connection case from the missing-embedded-bundle case, and walk through generating an offline bundle by hand with working commands.

2026-06-02Advanced

Measuring the Real eCPM Yourself: Piping Impression-Level Ad Revenue Into Your Own Analytics

The AdMob dashboard's average eCPM hides which regions and placements actually earn. Here is how I capture per-impression revenue with paidEventListener, normalize it, and pipe it into my own analytics to compute a real eCPM by network, placement, and country.

2026-06-02Advanced

Shipping Six Wallpaper Apps From One Codebase: A White-Label Build Setup with app.config.ts and EAS

Maintaining near-identical wallpaper apps in separate repos means every fix has to be copied six times — and one day you miss one. Here is the white-label setup I moved to: one codebase that emits six apps through a single APP_VARIANT, with the real app.config.ts and eas.json, plus a validation script that catches config drift before the build runs.

2026-06-01Advanced

When Your Android Vitals ANR Rate Climbs: Notes on Keeping the Main Thread Free in React Native

How I traced and fixed a rising Android Vitals ANR rate in a Rork-built React Native app, plus the main-thread rules I rolled out across six apps in production.

2026-06-01Intermediate

Fixing 'JavaScript heap out of memory' in Metro and EAS Builds

Your Rork or Expo build dies with 'FATAL ERROR: Reached heap limit Allocation failed - JavaScript heap out of memory.' Here is why it happens and exactly how to fix it, both locally and on EAS Build.

2026-06-01Advanced

Managing Startup Time as a Budget: How I Deferred SDK Init Across Six Apps

Instead of optimizing startup ad hoc, I switched to allocating a per-phase time budget and defending it. Here's how I deferred SDK init across six Rork-built apps and added a CI gate that fails the build when the budget is exceeded.

2026-05-31Advanced

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.

2026-05-30Advanced

Managing Native Settings Across Rork-Exported Apps with a Custom Expo Config Plugin

Tired of re-typing your AdMob ID and ATT string every time prebuild wipes your Info.plist? Here is how I made native settings reproducible with a custom Expo config plugin and shared it across six wallpaper apps.

2026-05-30Intermediate

Fixing 'TurboModuleRegistry.getEnforcing could not be found' in Rork

A practical walkthrough of the 'TurboModuleRegistry.getEnforcing(...): could not be found' error that became common once the New Architecture went default. Covers Expo Go vs. dev builds, when a native rebuild is required, and how to isolate libraries that aren't New Architecture-ready.

2026-05-30Advanced

Growing a Staged OTA Update System Without Breaking It

Shipping an EAS Update to every user at once is dangerous. From channel design to staged rollout to automatic rollback, here is the delivery architecture I settled on across 50M cumulative downloads, with working code.

2026-05-29Advanced

Bringing ProMotion 120Hz to a Wallpaper App — Implementation Notes on CADisableMinimumFrameDurationOnPhone and Reanimated v3

Implementation notes from making a Rork-generated wallpaper app run at 120Hz on ProMotion devices. Covers Info.plist setup, Expo config plugins, Reanimated v3 worklets, FlashList scroll gotchas, and AdMob eCPM lift measured across six wallpaper apps.

2026-05-29Intermediate

Diagnosing 'Network request failed' That Only Hits Android Emulator in Rork

Your fetch returns fine in the iOS simulator but throws 'Network request failed' the moment you switch to Android. Here is the diagnosis order I use to separate localhost, cleartext, certificate, and proxy issues, with code that actually compiles.

2026-05-29Advanced

Rork × EAS Update Runtime Version Strategy — Upgrading Expo SDK Across 6 Apps Without Breaking Existing Users

A complete record of how I migrated 6 Rork-generated apps from Expo SDK 50 to 51 in three weeks without a single user-visible incident — runtimeVersion policies, full eas.json, a safety-gated publish script, and a 30-minute incident recovery playbook.

2026-05-28Intermediate

Syncing 'Favorite Wallpapers' Across Devices with NSUbiquitousKeyValueStore in Rork iOS Apps — Implementation Notes from Six Apps Run in Parallel

For Rork-generated iOS apps, syncing a small set of favorites across devices is often better served by NSUbiquitousKeyValueStore than CloudKit. From the perspective of running six wallpaper apps in parallel, this article shares the threshold design, conflict resolution, and first-launch restore order learned in production.

2026-05-28Intermediate

Tracking Down BGTaskScheduler.submit Error Code=1 (Unavailable) in Rork iOS Apps

When BGTaskScheduler.submit returns Error Code=1, the cause space is finite — six of them. Covers telling Code=1 from Code=3, the identifier trap in Expo-based Rork apps, submitting from a widget extension by mistake, and a getPendingTaskRequests self-check.

2026-05-28Intermediate

Three Weeks of Moving Six Wallpaper Apps from AsyncStorage to MMKV in Rork

Notes from three weeks of gradually moving six wallpaper apps from AsyncStorage to react-native-mmkv. Personal write-up from an indie developer who has been shipping iOS and Android apps since 2014.

2026-05-28Advanced

Tuning Interstitial Ad Fatigue Across Six Rork iOS Wallpaper Apps with Crashlytics and Remote Config

An implementation note from running six Rork-built iOS wallpaper apps in parallel and rebalancing interstitial fatigue with a three-layer frequency cap powered by Crashlytics non-fatal signals and Remote Config thresholds. Swift code, Cloudflare Workers config, and measured eCPM / D1 retention numbers from a four-week phased rollout.

2026-05-27Advanced

Three-Layer StoreKit 2 Entitlement Sync for Rork Apps: Launch, Background Refresh, and Restore

When you wire StoreKit 2 subscriptions into a Rork-generated app, Transaction.updates alone leaves gaps. Here is the three-layer sync I run across six wallpaper apps — launch-time re-evaluation, Background App Refresh, and Restore Purchase — including measured refresh rates and the AdMob revenue I recovered.

2026-05-27Intermediate

Killing the Recurring iOS Missing Compliance Warning in Rork with One Info.plist Key

Walks through why every Rork-built iOS upload shows a yellow Missing Compliance flag on TestFlight, and how a single ITSAppUsesNonExemptEncryption key in your app.json removes it for good. Written from the perspective of an indie developer shipping six wallpaper apps in parallel.

2026-05-27Intermediate

Two Months of Rork × Hermes in Production — Cold Start and Memory in Real Numbers

What actually happens to cold start, memory, and crash rates after running Rork-generated apps with Hermes enabled in production for two months. Field notes from an indie developer with 50 million cumulative downloads.

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.

2026-05-26Intermediate

iOS Foreground Notifications Disappear in Expo — A Practical Fix Guide

A focused walkthrough of why iOS silently drops push notifications when the app is in the foreground, and how to wire setNotificationHandler correctly for iOS 14+ with expo-notifications.

2026-05-26Intermediate

Two Weeks Tightening Up iPad Support for a Rork-Generated Wallpaper App

Notes from spending two weeks tightening up iPad support for a wallpaper app I scaffolded with Rork. Coming from an iPhone-centric indie practice since 2014, I cover where Rork's defaults stopped, how the AdMob adaptive banner misbehaved on iPad, and what changed in retention afterwards.

2026-05-26Advanced

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.

← All Articles