App icon for Acorns

Acorns

January 3, 2024

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.

4.27 (Jan 2023)v4.75 (Dec 2023)
Original ImageNew Image

The Initial App

v4.27 - 188.4 MB (January 2023)
X-Ray of Acorns iOS
X-Ray of Acorns iOS (interactive on larger screens)
Loading...

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:

  • AcornsNetworking.framework
  • Invest.framework
  • Banking.framework
  • AcornsUI.framework

(^ these names will come up again)

Frameworks like Invest, Banking, and AcornsUI have their own asset catalog shipped in the framework. The main app executable has an asset catalog with images, but there is also AcornsStrings.bundle and 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.

Duplicated bundles in Acorns extensions
Duplicated bundles in Acorns extensions

Signs of change

v4.39 - 218.1 MB (April 2023)
X-Ray of Acorns iOS
X-Ray of Acorns iOS (interactive on larger screens)
Loading...

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.

Duplicated bundles...
Duplicated bundles ...

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.

4.27 (Jan 2023)v4.39 (Apr 2023)
Original ImageNew Image

The Shim Release

v4.66 - 316.1 MB (mid-October)
X-Ray of Acorns iOS
X-Ray of Acorns iOS (interactive on larger screens)
Loading...

Call this Acorn bundles everywhere...

Dramatic chipmunk GIF, s/o 2000s internet

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:

  • AcornsNetworking
  • Invest
  • Banking
  • AcornsUI
  • GQLTypes
  • Earn
Screenshot of modules in PackageShim.framework

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.

Screenshot of bundles in PackageShim.framework

Using 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.

4.39 (Apr 2023)v4.66 (Oct 2023)
Original ImageNew Image

New Architecture

v4.69 - 250.2 MB (end of October)
X-Ray of Acorns iOS
X-Ray of Acorns iOS (interactive on larger screens)
Loading...

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`.

AcornsUI
AcornsUI modules

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 AcornsUI, AcornsStrings, and AcornsShared are still in two Acorns extensions + the main app bundle.

Bundles still duplicated in the app
Bundles still duplicated in the app
4.66 (Oct 2023)v4.69 (End Oct 2023)
Original ImageNew Image

Wrapping Up

v4.75 - 251.9 MB (December)
X-Ray of Acorns iOS
X-Ray of Acorns iOS (interactive on larger screens)
Loading...

Since the major architecture change, Acorns has removed several images + added two new dynamic frameworks: LinkKit & PinwheelSDK. The app still has significant duplication; nearly 10% of the app size comes from bundle duplication in the app extensions.

Duplicated bundles in Acorns

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.

Size insights for Acorns

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.

Diff between Acorns v4.75 & v.4.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 🌳.

Acorns, Wrapped

Sign up for our newsletter 🛸

Never miss a post or product update



2024 © Emerge Tools, Inc. All rights reserved.