Emerge Tools Profile picture
May 23 22 tweets 8 min read Twitter logo Read on Twitter
Last week we wrote how @peacock reduced app size & app launch after moving from RN to native

By beautiful chance, another streaming app did the same this week. Did the same effects occur? Well, yes, no & it depends

🧵 Breaking down HBO's new Max app
So, HBO Max is now Max. New app, new bundle id, new logo, & entirely new codebase. Let's start by comparing the iOS size and architecture

iOS
HBO Max (old app): v53.20.1 - 60.4 MB install size
Max (new app): v1.0.1 - 108.8 MB

The new iOS app is 48.4 MB (~80%) bigger
Here's our X-Ray for the old HBO Max app. It consists of

~18 MB of images (top left)
~11 MB main.jsbundle (top right)
~15 MB main binary (bottom left)

The rest are misc frameworks, plugins, bundles, fonts, etc. Treemap of the HBO Max iOS ...
There are very few dynamic frameworks (3.9 MB) in the old HBO Max app - they're using Hermes for RN & some utility frameworks to help move around data Treemap showing 3.9 MB of d...
Now the new iOS app

There's 87 MB of dynamically linked frameworks, bigger than the entire old app

There are no plugins or extensions - a good opp. to statically link most of these frameworks. This will reduce app launch time and overall app size (explanation link at end) Treemap showing all dynamic...
Another thing that stands out is they have a 13 MB img in `error-overlay-bg`... this image is just a gradient (2nd screenshot) treemap showing a large nod......just a gradient
So if we're comparing Peacock's switch to HBO's switch - Peacock switched & was able to remove libraries, HBO added them. There's a lot more going on and HBO could be doing a better job (static linking + our other insights), but that's one reason for increase in size
Now for Android

HBO Max (old): v53.20.1 - 54.9 MB download size
Max (new): v1.0.1 - 24.5 MB

The new app is 30.4 MB (~55%) smaller... so how is it almost double the size on iOS, but half the size on Android?
Here's our X-Ray for the old HBO Max app on Android

The main thing to notice is that HBO Max was shipping a universal APK, which means they are shipping assets, architectures, and languages for *all* devices / locales that they support vs. shipping what a specific user needs Image
The easiest place to see it is in the architecture portion of the X-Ray. You can see they're shipping the Hermes library 4 different times. This is happening for every library Treemap showing native libr...
Onto the new Android Max app

Max is shipping an AAB, meaning users download split APKs specific to their device

Before there was just one apk, now there is a base.apk + 3 others Image
That said, the change in size isn't solely b/c of split APKs

Native libraries decreased from 18.9 MB (old) -> 515 kb (new). But the old app still had ~5 MB of native libraries in each architecture, where the new app has 0.5 MB in one architecture Treemap showing 5 MB of nat...Treemap showing 0.5 MB of n...
What are Native Libraries? Where Java & Kotlin compiles to dex, code written in C/C++ (among others) is packaged into native libraries (.so files) & compiles to native code

B/c there’s no more RN, the new app could remove most native libraries, which were used for RN
While native libraries decreased, the size from Dex increased, going from 3.6 MB -> 16.5 MB

This dex size increase is likely not directly related to HBO going native, rather a lack of optimization when building their release build (& potential security risk) ImageImage
This is an entire post in and of itself, but tl;dr, the new app is not obfuscating any dex code. Code isn't minified and entirely human readable (this is a release build from the Play Store)

This requires more bytes to be shipped + loaded into memory when using the app
Recapping

HBO shipped an entirely new app (& logo), going cross-platform -> native

iOS nearly doubled and Android was cut in half (classic). The comparisons are not "apples to apples" though b/c of how much the apps differ
The decision to ship an entirely new app is massive - every single user is going to have to download the new app

Why a whole new app? How much of a reason was driven by wanting to go native asap vs. incrementally changing like Peacock did

Your guess is as good as ours
If you're interested, here's the thread on peacock
& here's a good response thread from a RN dev

To be clear, we don't work w/ Peacock or HBO. We help both cross-platform and native teams monitor and improve their performance

On the side we like to tweet about interesting changes in apps

Post diving into static vs dynamic frameworks on iOS
emergetools.com/blog/posts/sta…
Here's a more in-depth explanation on split-apks
emergetools.com/glossary/split…
And the analysis pages

Max (iOS, new app)
emergetools.com/app/example/io…

Max (Android, new app)
emergetools.com/app/example/an…

HBO Max (iOS, old app)
emergetools.com/app/example/io…

HBO Max (Android, old app)
emergetools.com/app/example/an…

• • •

Missing some Tweet in this thread? You can try to force a refresh
 

Keep Current with Emerge Tools

Emerge Tools Profile picture

Stay in touch and get notified when new unrolls are available from this author!

Read all threads

This Thread may be Removed Anytime!

PDF

Twitter may remove this content at anytime! Save it as PDF for later use!

Try unrolling a thread yourself!

how to unroll video
  1. Follow @ThreadReaderApp to mention us!

  2. From a Twitter thread mention us with a keyword "unroll"
@threadreaderapp unroll

Practice here first or read more on our help page!

More from @emergetools

May 22
How did the @Twitter iOS app change over the last 6 months? Why did the latest release of Google Translate Android reduce app size by 1/3rd?

We try to make these questions easier to answer, which is why we're very excited about our newest feature, AI summaries of build diffs
Jumping right in - Twitter v9.59.1 vs. v9.34.6 (iOS)

Overall size decreased by 34 MB, but how quickly can we identify what changed? Image
The summary is pointing to removals of plugins and bundles, which is easy to see in the X-Ray diff

T1Twitter.framework is also highlighted in the summary. Searching through the diff, we can see that many assets were modified or removed to reduce its size ImageImage
Read 7 tweets
May 18
So, what does the @OpenAI ChatGPT iOS app look like under the hood? Well we took a look at a decrypted build

🧵 How the ChatGPT iOS app is made
Overall install size is 41.9 MB and has a fairly simple structure. Here's our X-Ray treemap Treemap of ChatGPT iOS app....
The main thing that stands out is they're shipping 18 MB worth of debug symbols in the app. Nothing stood out when we sifted through

It's best practice to strip these out and is particularly easy to do since they only need to strip from their main app binary A highlight of 18MB of bina...
Read 8 tweets
May 17
What happens to an app's performance when it goes from react native -> native?

The @peacock app just made the switch on iOS & Android and had a significant change in size and startup time

🧵 Performance impact of switching to native
A quick primer

RN let's you create mobile apps for Android and iOS using js & react. 1 codebase, 2 apps. It has an active community & there are certainly reasons you'd want to use RN

That said, if performance is important, native is going to be better
A few reasons

- JS is an interpreted language vs. native (Swift & Kotlin) is compiled
- RN is *mostly* singled threaded. Concurrency is complex and not as performant
- Native has easier access to device & OS features. RN requires more libraries to achieve functionality
Read 12 tweets
Jan 17
Notable iOS app size changes (install size) over the last week

📈 Increases
@BestBuy: +26.3 MB
@indeedjobs: +26.2 MB
@github: +10.6 MB

📉 Decreases
@Shopify: -24.5 MB
@Reddit: -24.0 MB
@googlechrome: -19.9 MB

🧵 How Best Buy could've avoided the increase altogether
Best Buy v22.12.10 (previous)
Install Size: 148.6 MB

Best Buy v23.1.10 (latest)
Install Size: 174.9 MB

The difference in size between the two is due to the latest release being built with Xcode 14
We've written extensively about Xcode 14 deprecating bitcode causing significant size increases in iOS apps

thread on Xcode 14 & @BeReal_App 👇

Read 6 tweets
Jan 12
The @CandyCrushSaga iOS app (v 1.243.0) is made up of over 22k files

Over 90% of the files are under 4 KB

🧵 Why having many small files = size bloat
+ how Candy Crush could cut it's install size by almost 20%
The candy crush iOS app has an install size of 264.8 MB

55.5 MB of the app is "levels", which are made up of .txt files like `episode190Level3.txt` that define a level in JSON format Emerge X-ray graph of candy...Emerge X-ray showing many l...
Here's an example from the smallest file `episode1level8.txt`

In total, the contents of the file are less than 1 KB, but the file takes up 4 KB in the app bundle that's downloaded on user's phones JSON of a level.txt fileEmerge X-Ray showing episod...
Read 9 tweets
Jan 10
Inspired by this @Kelset tweet, let's take a look at how the @discord iOS app increased by 54.2 MB (36%) install size in version 158.0

Discord Version 157.0 measured at 148.7 MB install size.

More than a third of the app was from main.jsbundle (RN) Image
Version 158.0 had 202.9 MB install size (+54.2 MB)

Most of the size increase came from adding images, including this 12.8 MB gif
Read 9 tweets

Did Thread Reader help you today?

Support us! We are indie developers!


This site is made by just two indie developers on a laptop doing marketing, support and development! Read more about the story.

Become a Premium Member ($3/month or $30/year) and get exclusive features!

Become Premium

Don't want to be a Premium member but still want to support us?

Make a small donation by buying us coffee ($5) or help with server cost ($10)

Donate via Paypal

Or Donate anonymously using crypto!

Ethereum

0xfe58350B80634f60Fa6Dc149a72b4DFbc17D341E copy

Bitcoin

3ATGMxNzCUFzxpMCHL5sWSt4DVtS8UqXpi copy

Thank you for your support!

Follow Us on Twitter!

:(