◉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…
Articles/Dev Tools
⬡ Dev Tools/2026-06-19Advanced

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.

Rork Max235App ThinningOn-Demand ResourcesApp SizePerformance25

✦ Premium Article

One morning I opened App Store Connect for my own wallpaper app and the download size had crossed 180MB. I thought I had only added a few new screens with Rork Max, yet the first download had crept up toward the cellular warning line.

When I traced it, the generated code was placing high-resolution images and several custom fonts straight at the root of the bundle. Rork Max is excellent at producing a screen that looks finished as fast as possible, but it does not manage your delivery size for you. That was the lesson of the morning.

As an indie developer who has run apps for years, I have learned that size is a metric that bites you quietly. What follows is the full path of taking the Swift native code Rork Max emits and shrinking the first download with App Thinning and On-Demand Resources, with the numbers I actually measured.

Where app size actually hurts

The reason to care about size is not aesthetics. It is the drop-off right before install.

The App Store caps downloads over cellular, and above that cap the user sees a "connect to Wi-Fi" warning. Someone who reached your store page through an ad or a referral often leaves at that single screen. I have an app where pushing the size down into the low 90s of megabytes noticeably improved the first-install completion rate in my own tracking.

The second cost is the traffic of every update. If you ship weekly, your users download again and again. A few dozen megabytes per download adds up.

What App Thinning does for you automatically

App Thinning is Apple's mechanism, and it has three parts. Slicing extracts only the resolution each device needs. On-Demand Resources let you fetch resources later instead of bundling them up front. Bitcode, which used to be the third part, has been retired.

The easy misunderstanding is that Slicing only works when assets live in the asset catalog. Put an image at the bundle root — exactly what generated code tends to do — and Slicing skips it, so every resolution ships to every device. That is the most common reason a Rork Max build balloons.

✦

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
✦How to structure your asset catalog so Slicing actually kicks in, and how to fix the bundling mistakes generated code tends to make
✦An NSBundleResourceRequest implementation that moves a 40MB pack out of the first download via On-Demand Resources
✦A size budget in megabytes, plus the check routine and decision rules that keep it from creeping back up
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-08-02
When Two-Character Queries Silently Return Nothing: Measuring Japanese Search Indexes in an Expo App
SQLite FTS5's trigram tokenizer returns zero rows for Japanese queries shorter than three characters, without raising anything. I benchmarked linear scan, a bigram inverted index, and FTS5 over a 20,000-item catalog to find the real threshold.
⬡ Dev Tools2026-07-24
Collapsing Duplicate Requests Into One: A Reference-Counted Single-Flight Layer
When several components fire the same API call at launch, you get a burst of identical requests. Here is a single-flight layer that shares one in-flight promise instead: how to build the key that decides the folding, the trap of handing out a failed promise forever, the trap of one caller's abort cancelling everyone, and the test that keeps it all from regressing, with the real network numbers alongside.
⬡ Dev Tools2026-07-18
The Generated Screen That Quietly Jams at AX5 and in German — Putting Layout Resilience Checks on Rork Max SwiftUI
A record of running every Rork Max generated SwiftUI screen through pseudolocalization and the largest text size to find exactly where it jams. Covers when to reach for ViewThatFits, ScaledMetric and layoutPriority, plus the snapshot checks that catch regressions every time you regenerate.