Wouldn't it be cool if you could have a 2023 wrapped for how your app changed this year? If you're on the Acorns iOS team, look no further!
Emerge is constantly downloading the most popular apps off the App Store and Play Store to showcase our tooling. You can sign up for an account, search for an app, and instantly see our analysis. Over the course of a year, we download a given app once a month. In 2023, we had a month-by-month view of how Acorns drastically changed its iOS architecture.
The Initial Appv4.27 - 188.4 MB (January 2023)
Note how much of the app is dynamic frameworks. The total app size is 188 MB. 151 MB (~80%) is from dylibs. The app is broken up into different packages related to differing functionality, such as:
(^ these names will come up again)
AcornsUI have their own asset catalog shipped in the framework. The main app executable has an asset catalog with images, but there is also
AcornsTestData.bundle (oof). These bundles consist of an asset catalog with a handful of JSON files. These two bundles are duplicated in the Widgets and Intents app extension.
Signs of changev4.39 - 218.1 MB (April 2023)
With this build, Acorns changed the asset catalog in
AcornsUI.framework to be shipped in
AcornsUI.bundle. This bundle was duplicated across frameworks, plugins, and the main app executable - a sign of things to come.
Above, we see Emerge's Size Analysis insights picking up several different bundles being duplicated across the Acorns app. In total, v4.39 shipped ~40 MB of duplicated resources.
The Shim Releasev4.66 - 316.1 MB (mid-October)
Call this Acorn bundles everywhere...
This is the transitory version of the app where Acorns was in between switching architectures. The best illustration of this comes from `PackageShim.framework`. For those unfamiliar, a “shim” is a term used in programming to describe an intermediary layer often used to facilitate transitions and ensure compatibility between components or architectures.
We can see statically linked modules in the PackageShim.framework that resemble the previously linked dynamic frameworks, like:
You can also notice that asset catalogs are now split into many different bundles. Acorns duplicated `.bundle`s related to the various frameworks in the main app binary and 3 app extensions.
otool -L, we see that
- PackageShim links to every other dynamic framework
- The main app executable and ¾ plugins link to PackageShim
So this version represents the production version of everything everywhere all at once to make sure the app works.
New Architecturev4.69 - 250.2 MB (end of October)
In this version, `PackageShim` is completely removed. There are less than 10 MB of dynamic frameworks. The modules in the PackageShim are now in the main app binary and plugins.
For example, AcornsUI and GQLTypes are visible in the main app binary + the binaries for `AcornsWidgetsExtension` and `AcornsIntentsExtension`.
We can also see that many bundles were de-duplicated. These bundles mainly consist of an asset catalog with images of that specific bundle's functionality. Bundles like
AcornsShared are still in two Acorns extensions + the main app bundle.
Wrapping Upv4.75 - 251.9 MB (December)
Since the major architecture change, Acorns has removed several images + added two new dynamic frameworks:
PinwheelSDK. The app still has significant duplication; nearly 10% of the app size comes from bundle duplication in the app extensions.
The team may be planning to tackle these duplicate files in future releases. In the near term, 45 MB (~16%) of app size could be saved through optimizing linker settings, image optimization, and symbol stripping.
Realistically, any guess as to why these changes were made is purely conjecture. Maybe they are switching to SPM. Maybe it's an 11-year-old app that needed an architectural facelift. Maybe they're using more SwiftUI.
The latest releases of the app included preview providers in the production build. With this, we generated 240+ screenshots from the app with our Snapshots product, which you can view here. Below are some of the diffs between v4.75 & v4.69.
Unfortunately, we don't have any decrypted Acorns builds from before the architecture change, so it's unclear if previews were already in the app or if this is new.
Likely an Acorns engineer is working on a blog post that will dive into the changes they made + why. Until then, here's how Acorns changed in 2023 🌳.