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.
Make ITMS-91053 Stop Catching Your Rork Max App — A Release-Proof Privacy Manifest Workflow
Fixing ITMS-91053 once doesn't keep it away — every new dependency can bring it back. Here's a field-tested workflow to audit your dependency tree, generate declarations, and catch the rejection locally before you upload.
Trimming App Size for Rork Max Apps: App Thinning and On-Demand Resources
Rork Max ships images and fonts straight into the bundle, so a generated SwiftUI app quietly grows heavy. Here is how I use App Thinning and On-Demand Resources to shrink the first download, with the device numbers I measured and a size budget you can run.
Before You Burn Out Hand-Testing Every Release: Automate Your Rork App's Critical Flows with Maestro
With Rork, a prompt that fixes one screen can quietly break another. Here is how I automate the revenue-critical path from launch to paywall using Maestro and run it in CI, including the spots where I got stuck as an indie developer.
A Custom Screen Appears When You Long-Press a Notification in a Rork Max App — Implementing a Notification Content Extension
How to add a Notification Content Extension to a Swift app generated by Rork Max so a custom UI is drawn only when the notification expands. Covers the split with the Service Extension, updating the in-notification UI from a button, sharing state via an App Group, and the order to check when nothing shows — all with working code.
Retrofitting Offline-First Into a Rork App: Persistent Cache and a Write Queue
Reviews kept saying the app was blank on the subway. Polishing error screens was not enough, so I retrofitted TanStack Query persistence and an offline write queue into a Rork-generated Expo app. Optimistic updates, reconnect flushing, and keeping the layer safe from regeneration are all covered with code.
Running Rork Max Swift Apps in Many Languages with String Catalog
An operational design for taking the Swift apps Rork Max generates into multiple languages, centered on the .xcstrings String Catalog. From extracting strings to handling plurals, pouring in translations, and checking for breakage, these are the lessons from keeping multilingual apps running.
Turning Rork App Crash Reports You Can Actually Read — Field Notes on dSYM Recovery, Context Logs, and Staged Distribution
You added Crashlytics, but the stack traces are unreadable. Field notes on restoring dSYM/mapping symbols, logging the context that led to a crash, and gating distribution with App Distribution and GitHub Actions.
Building Apple Watch Complications with WidgetKit in a Rork Max App
A concrete walkthrough for adding watchOS complications and Smart Stack support to a SwiftUI app generated by Rork Max, covering target setup, cross-process data sharing, and timeline design.
Auditing the Dependencies Rork Generates: A Supply-Chain Hygiene Routine
Even a four-screen Rork app pulls in 900+ transitive dependencies. Before a vulnerability lands and you cannot tell which app is affected, build an audit habit with npm ls, npm audit, overrides, and depcheck — framed for running several apps at once.
Offline-First Sync for SwiftData in Rork Max — Merging Changes Without Conflicts
How to make the SwiftData apps Rork Max generates sync offline-first so edits survive a flaky connection. Instead of overwriting whole rows, we merge per change, propagate deletes with tombstones, and queue writes that can be resent — shown in code, with the production trade-offs that actually mattered.
Spotting the 30% of Bugs Rork Can't Fix Itself — A Hand-Fix Workflow Built Around Export
Rork resolves roughly 70% of the bugs it hits on its own; the remaining 30% needs your hands. Here is the criteria I use to decide whether to keep re-prompting or export and fix it myself, plus working code for the fixes.
Your Rork App Is Stuck on "Processing" in App Store Connect — A Field Guide to Getting It Unstuck
You uploaded a Rork-built app to App Store Connect, but the build sits on Processing for hours and never shows up in TestFlight or for submission. Here is the exact diagnostic order I follow, how to read the ITMS error codes, and a short script that reads the processing state from the API — with working code.
Checking Age Without Collecting Birthdays — Wiring the Declared Age Range API into a Rork App
How to use the iOS 26 Declared Age Range API to receive an age band without ever storing a birthdate, with both the Rork Max native Swift path and the standard Rork (Expo) native-module bridge, plus where to draw the responsibility boundary.
Why Your Rork Max Native Swift Widget Freezes After Day One — Designing the TimelineProvider Refresh Budget
Native Swift home screen widgets generated by Rork Max stop rotating after the first day unless you understand the TimelineProvider refresh budget. Here is how reloadPolicy, App Groups, and deep links fit together in a real app.
Notifications You Can Finish Without Opening the App — Interactive Notification Actions for Rork Apps
Those buttons and text fields that appear when you long-press a notification. Here is how to implement interactive notification actions in a Rork-built Expo app for an experience that completes without launching, including the background-execution pitfalls.
Putting Your Rork Max Native App's Content into iPhone Search — Becoming a 'Findable' App with Core Spotlight
Index the content of the native Swift app Rork Max generates into Core Spotlight, so users reach a specific in-app screen straight from iPhone search. Covers adding, updating, and removing index entries, plus the production trap of stale search results, from an indie developer's view.
Landing Users on the Right Screen Right After Install — Deferred Deep Links for Rork Apps
When someone follows a campaign link and installs through the store, the 'where did they come from' context is gone by launch time. Here is how to implement deferred deep linking in a Rork-built app without any third-party SDK.
Designing CloudKit Sync in a Rork Max Native App — Handling Conflicts and Deletes
You want the same data on iPhone and iPad. When you add CloudKit to a Swift app generated by Rork Max, the hard part is not saving — it is conflicts and deletes. Here are the design decisions I settled on.
Why Your Rork App's Stripe Webhooks Drop Events Only in Production — Field Notes on Idempotency, Retries, and Out-of-Order Delivery
A field-tested four-layer design for stabilizing Stripe webhooks that pass locally but silently misfire in production: signature verification on Workers, event-ID idempotency, fast-2xx-then-process, and a reconciliation job that survives out-of-order delivery. Built around Cloudflare Workers and KV.
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.
Controlling HomeKit Accessories from Your Rork Max Native App — Permission and State-Sync Lessons from Indie Shipping
A walkthrough of adding HomeKit to the native Swift app Rork Max generates: listing and controlling accessories, from the permission dialog wording to the state-sync traps. Covers the territory React Native struggles to reach, from a working indie developer's perspective.
Keeping Expo Push Tokens from Slipping Through the Cracks in Production
After adding re-engagement push to a Rork-generated Expo app, the delivered count came in well below the active install count. The cause was missed token updates and stale tokens left to pile up. Here is the lifecycle I settled on, with code: registration, refresh, server storage, and pruning.
Adding SwiftData to a SwiftUI App Generated by Rork Max
Rork Max can produce polished SwiftUI screens, but persistence often stops at @State. Here is how I layer SwiftData onto generated code: model design, wiring the container to views, and a schema migration pattern that survives shipping.
Keeping Login Alive in a Rork-Built Expo App — Preventing Token-Refresh Races with Single-Flight
Add login to the Expo app Rork generates and it works at first, but in production the 'I got logged out on my own' reports creep in. Most are token-refresh races. This covers a reliability design that single-flights refresh, stores tokens safely, and handles expiry correctly.
Designing Apps That Keep Working When the Signal Drops — Optimistic Updates and Resolving Conflicts on Reconnect
Make the Expo apps you build with Rork keep responding even when the signal drops in a subway or elevator. We assemble optimistic updates that move the screen first, and conflict resolution that reconciles when the connection returns, in working code.
Exposing Your Rork Max App to Siri and Shortcuts with App Intents
How to add App Intents to a Swift app generated by Rork Max so Siri and Shortcuts can invoke your actions, from registering an AppShortcut to the production gotchas, with real code.
The Users You Cut Off as Churned Were Still Willing to Pay — Implementing Grace Periods That Keep Access Alive
A failed renewal is not a cancellation. If you revoke access during the grace period, you throw away recoverable revenue. Here is how to tell grace, billing retry, account hold, and real churn apart in a Rork (Expo) app, keep access during grace, and guide users back.
Running a Neon + Drizzle Backend for Your Rork App in Production — Notes on Edge Connections, Zero-Downtime Migrations, and Type-Safe Queries
After wiring Neon Serverless Postgres and Drizzle ORM into a Rork app's backend, the friction shows up in production. These are implementation notes on choosing an edge connection model, migrating without locking tables, and designing type-safe queries that don't balloon into N+1.
Stopping the Slow Drift of Colors and Spacing on Every Regeneration with a Single Source of Design Tokens
Every time Rork regenerates a screen, button colors and spacing shift a little. Here is a design that freezes your tokens in one place and steers generated output to always reference them.
Drawing the Line Between Rork Max's Swift Output and the Expo Build
Rork Max now generates native Swift, while the standard Rork keeps producing Expo (React Native) apps. Here is how to split responsibilities between the two engines inside a single app business, viewed from real maintenance cost.
Showing Live Progress in the Dynamic Island from a Rork Max Swift App
How to add an ActivityKit Live Activity to a Swift app generated by Rork Max so progress shows in the Dynamic Island, plus the update-related pitfalls I hit in production.
Putting a Working Button in a Rork App's Widget — Implementing App Intents So a Tap Acts Without Opening the App
How to put a button in a Rork-generated Expo app's widget that changes state without launching the app. We wire App Intents and WidgetKit together through an App Group, all the way to reloadTimelines — including the two places I lost real time.
The Day a Third Reason to Hide Ads Appeared — Folding Rork App Ad-Free Logic Into One Place
Ads show only on one screen for paying users, or ads never show for free users. The usual cause is that the condition for hiding ads is scattered across the code. Here is how I fold three reasons — subscription, lifetime purchase, and a timed reward unlock — into a single state and route every ad through one hook, written as an implementation note from running six apps as an indie developer.
Making Rork App API Calls Survive Failure — Timeouts, Exponential Backoff, and Circuit Breakers That Actually Hold
A hands-on implementation log for hardening the API layer of a Rork-generated app. Add timeouts, exponential backoff, and a circuit breaker step by step so your app keeps working even when a dependency goes wobbly.
Stop Burning Your One Push-Permission Shot on App Launch — Pre-Prompt Priming for Rork Apps
If your Rork (Expo) app fires the OS push-permission dialog at launch, every 'Don't Allow' tap closes that channel forever — iOS won't let you ask again. Here's how a self-built pre-permission screen lifts your opt-in rate, with the Expo code to do it.
Actually Delivering 'It Updates Without Opening' in Expo — A Realistic Background Task Design
Building 'content refreshes every morning' into a Rork-generated Expo app runs into iOS background execution being far less dutiful than you expect. Here is a minimal expo-background-task setup plus a design that doesn't break when the task never runs.
Building Rork Subscriptions Around RevenueCat Entitlements — Access Checks, Offering-Driven Paywalls, and Restore
Implementation notes for adding subscriptions to a Rork (Expo) app with RevenueCat. Make Entitlements the single source of truth for access, drive the paywall from Offerings so you can change prices remotely, wire up restore and the customer-info listener, and avoid the sandbox traps — all with working code.
Reading Steps and Sleep into Your Rork Max Native App — HealthKit for Calm, Number-Light Wellness Apps
A walkthrough of adding HealthKit to the native Swift app Rork Max generates: reading steps, sleep, and heart rate, writing mindful sessions, and handling background delivery — including the App Store review wording and the production-only 'permission granted but zero data' trap.
Updating Live Activities Remotely: Putting Live Lock Screen Info on a Rork App
A practical design for updating Live Activities remotely through APNs so the Lock Screen and Dynamic Island stay current even when your app is closed. Covers push-to-start vs update tokens, the content-state payload, stale-date and the update budget, and bridging from Expo, with working code and the issues I hit in production.
When Your Rork App Gets ITMS-91053 — A Practical Guide to Privacy Manifests and Required Reason APIs
Submitting a Rork-generated Expo app to the App Store can trigger Privacy Manifest warnings even when you never wrote the offending code. Here is how to clear both Required Reason API and SDK manifest issues before you submit.