Emerge Tools Profile picture
Mar 25 10 tweets 4 min read Read on X
These are the best 🥲... breaking down why @LinkedIn iOS is half a GB

Here's a top level view of the latest version of LinkedIn

300 MB for just dynamically linked frameworks & Plugins is...a lot. In fact, just the Dylibs & Plugins today are bigger than the entire app was back in November 2022 🫠
Emerge X-Ray of LinkedIn App showing 187.5 MB of Dylibs, 109.9 MB of Plugins, and a 110.6 MB main app binary
Size tracker of LinkedIn iOS app showing the app was 292.9 MB in November 2022 and is now ~450 MB
And the Plugins and Frameworks seems to be where the greatest inefficiencies lie. Here is a more detailed look at the LinkedIn Plugins + the dynamically linked VoyagerLibs.framework

Notice anything fishy?
Treemap of VoyagerLibs.framework. Many of the nodes are in a dark red, indicating duplicate resources
Treemap of two LinkedIn app extensions. Many of the nodes are in a dark red, indicating duplicate resources
First off, the 2 plugins + VoyagerLibs are all shipping ArtDecoIconsResources.bundle (~8 MB). This bundle is already in the Voyager Framework, so it should be possible to share with the Plugins...but LinkedIn is still duplicating it A highlight of ArtDecoIconsResources.bundle (7.9 MB), which is included 3 separate times in the LinkedIn app.
If you look into TodayExtension, NotificationExtension, & VoyagerLibs, they share many class names (one example in screenshot)

While we don't know for sure if they are duplicates from public build analysis, it appears like the extensions are a subset of the VoyagerLibs library Screenshot showing duplicate named treemap nodes across plugins and framework
Here's something else that jumps out - in March 2023, the TodayExtension was < 400 KB. Today its ~60 MB...

Seeing as Today Extensions have been deprecated, its doubtful that they added THAT much functionality to them
Screenshot showing Today Extension was 372.7 kB in March 2023
Screenshot showing Today Extension was 60.8 MB in March 2024
It seems there's a chance that LinkedIn is statically statically linking dependencies in their Plugins rather than using the resources from VoyagerLibs

If that's the case, then the Plugins (109 MB total) have a significant amount of unnecessary size bloat
Separately, here's ~75 MB of insights that we're picking up Emerge Insights for the LinkedIn App. In all, there are close to 75 MB of potential savings from: Stripping binary symbols (36 MB), removing duplicate files (21 MB), minifying localized strings (7.9 MB), removing binary symbol metadata (5.5 MB), removing unnecessary files (3.0 MB), and optimizing images (2.2 MB)
If you want to explore our analysis on the latest version of LinkedIn, you can check out this page
emergetools.com/app/example/io…
And coincidentally, @jacobs_handle wrote a blog post for us just last week about how to avoid duplication in Plugins

Please RT this thread if you enjoyed it 😁
emergetools.com/blog/posts/mak…

• • •

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

Mar 8
Finding accessibility issues in an app is an incredibly manual task that can take hours depending on the size. Which seems like a perfect place for ✨AI ✨

🧵Surfacing accessibility issues in the @Drizly app w/ AI 🧠
A quick background - our Snapshots product turns Previews into snapshots. A recent feature gives the ability to use AccessibilitySnapshot w/ one line

You don't need to write test code to get snapshot tests or to snapshot VoiceOver elements
Code snippet showing `emergeAccessibility(true)` on a PreviewProvider
Drizly Preview with annotations of VO elements
We can take snapshots for any app leaking Previews into production, which @Drizly (and many other apps) are. We were able to generate 86 snapshots for Drizly

We then fed these images into an AI we're working on to detect accessibility errors. Here's what we found
Read 9 tweets
May 23, 2023
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 ...
Read 22 tweets
May 22, 2023
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, 2023
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, 2023
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, 2023
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

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!

:(