When I start a new job, I like to quickly make a name for myself as the “app size” guy.
This means proactively investigating the app bundle, proposing steps to make it slimmer, and implementing them in our next release. I do this for a few reasons:
It’s easy.
It’s quick.
It’s fun.
Hopefully, nobody else thought to do it yet *if it’s a startup.
It’s visible and comprehensible to non-technical stakeholders.
Especially if your work impacts install rate.
Today I’m showing you a new, free, open-source, fully private, in-browser tool to help you optimise your own app bundle. I’ll explain how it works, and along the journey we’ll go through a real-life worked example: how I optimised Granola’s iOS app size by ~40% in my first week.
By the end, you’ll have a clear to-do list to optimise your own app and look like a total genius in the process.
Sponsored Link
Recently shipped an app? Enter it in Shipaton 2026
Recently launched a mobile app? Put it in the spotlight at Shipaton 2026 — RevenueCat’s global hackathon for builders who ship real apps to real stores. Compete for over $1M in prizes and show the world what you built. Entries close September 30.
Contents
This post is so full of knowledge that your email client can and will cut it down to size. Read on my website for the best experience.
OpenBundle
OpenBundle is a cool new tool that analyses your app bundle and gives you recommendations for the most impactful ways you can optimise your app size.
It’s open source, lives entirely in your browser, works fully offline, and has no backend, so your privacy is guaranteed.
How it works
An .ipa is basically a .zip file containing your app: code, frameworks, and resources. OpenBundle runs in your browser (running CPython via Pyodide) to expand the archive into a temporary filesystem, and processes every file to record their:
path in the bundle
size (zip-compressed and uncompressed)
SHA-256 hash
Mach-O files, containing compiled Swift code, are parsed to read segments & sections, symbol tables, load commands, dyld export tries, linked libraries, run paths, build versions, encryption states, code signatures and entitlements.
Asset catalogues are parsed (using Rust tooling in WebAssembly), exposing asset names, dimensions, scales, encodings, opacity, sizes and image payloads. Browser image decoders can then lazily display previews, content hashes and real compression measurements.
OpenBundle now reconstructs the bundle’s directory hierarchy: Compiled code and assets are summed up to compute their parent folder’s size, and laid out in a hierarchical treemap: area represents data size.
If you think Elon couldn’t get any worse, he built a bloody React Native app
The rest of this article takes you through a real-life worked example of optimising an app bundle, which I implemented in my first week at Granola.
The Low-Hanging Fruit 🍒
Here’s your actual motivation: I wasn’t exaggerating above; between waxing lyrical about someday migrating away from SwiftUI and re-architecting our app modules, I did try to actually contribute something concrete in my first week at Granola.
Let’s look at some bundle-size X-rays. There are 2 numbers we care about:
Install size is how much disk space the thinned variant of your app takes up (before documents or data). Download size is the minimum amount of over-the-air network data required to install.
Before
80.9 MB install
48.4 MB download
3.5 hours of work later…
After
58.8 MB install (27% less)
28.1 MB download (42% less)
I achieved this through 5 straightforward fixes: low-hanging fruit that can apply to nearly every app:
Handling duplication
Optimising asset sizing
Removing binary symbols and symbol metadata
Choosing between dynamic and static
(if needed) picking your Swift optimisation modes
This article has been in the works for years, I’m sure you can wait another month to read the whole thing. If not, please pay me money. Or don’t. I can wait a month too:
You get your money’s worth, I promise:
⚓️ Access my full library of 50+ paywalled articles
🚀 Read free articles a month before anyone else
🧵 Master concurrency with my full course and advanced training
🧑🚀 Get a free copy of my new eBook, “Land your iOS Tech Job”
❤️🩹 Support independent, sometimes funny, tech writing









