Preface
In today’s continuation of my saga against ridiculous app sizes, I take a look at United Airlines’ iOS app.
There I was, boarding my United plane and walking past the rows and rows of seats, when I finally noticed none of them had built-in headrest screens. I swear I double-checked this before booking my ticket. As I sat down, an intercom announcement came on reminding passengers to download the United app if they wanted access to in-flight movies and entertainment. This wasn’t the first time I had seen this, Hawaiian Airlines pulled the same stunt on me before. It’s becoming somewhat of a popular trend in the airline industry to cut costs by having the passenger bring the hardware, and as an added bonus they get to force their way into your coveted list of installed apps. No worries then, I’ll download their app and be on my way…
… wait, it’s 439MB?! This can’t be right.

Note: as mentioned in my previous article, download and install sizes are a tricky subject for iOS. Apple heavily compresses the download size (which is great!) but doesn’t make this easy to find. Apple also supports incremental downloads, meaning you can download a “diff” of app binaries in some cases (also amazing!), but this is even harder to measure on an actual device. In my case I was trying to download the United app for the first time on a runway before my flight took off.
Under the hood
An app being this bloated is seriously impressive and had me intrigued – most bloated apps are within the 100-200MB range, not 400MB. Netflix itself is only 101.5MB, does United really need 4x the space to stream movies? Let’s take a look.
Using the wonderful ipatool, you can download app binaries locally for inspection. After downloading the IPA file, simply rename the file extension to zip
and then extract like normally.
--- UnitedCustomerFacingIPhone.app -----------
414.8 MiB [█████████████████████] /Frameworks
3.8 MiB [ ] /PlugIns
2.3 MiB [ ] /LPMessagingSDKModels.bundle
2.3 MiB [ ] UnitedCustomerFacingIPhone
1.5 MiB [ ] Assets.car
1.4 MiB [ ] /_CodeSignature
1.4 MiB [ ] /Watch
500.0 KiB [ ] /Button.bundle
40.0 KiB [ ] /SC_Info
12.0 KiB [ ] Info.plist
12.0 KiB [ ] /Base.lproj
8.0 KiB [ ] [email protected]~ipad.png
8.0 KiB [ ] [email protected]
4.0 KiB [ ] /UALFlightStatus.bundle
4.0 KiB [ ] /UALReservation.bundle
4.0 KiB [ ] /UALBagTracking.bundle
4.0 KiB [ ] /UALPayment.bundle
4.0 KiB [ ] /UALBooking.bundle
4.0 KiB [ ] Localizable.strings
4.0 KiB [ ] PkgInfo
Nearly all of the app size comes from frameworks! This isn’t too surprising though, pushing code into frameworks has been a best practice for a while.
--- UnitedCustomerFacingIPhone.app/Frameworks
/..
86.0 MiB [█████████████████████] /UALAppCore.framework
44.7 MiB [██████████▌ ] /UALBooking.framework
40.3 MiB [█████████▌ ] /NodeMobile.framework
36.1 MiB [████████▌ ] /UALHomeScreen.framework
25.7 MiB [██████ ] /UALCheckIn.framework
25.0 MiB [██████ ] /UALReservation.framework
17.5 MiB [████ ] /UALCommonUI.framework
15.9 MiB [███▌ ] /UALPayment.framework
14.7 MiB [███▌ ] /LocusLabsSDK.framework
8.7 MiB [██ ] /Mapbox.framework
8.6 MiB [██ ] /UALFlightStatus.framework
8.6 MiB [██ ] /widevine_cdm_secured_ios.framework
7.2 MiB [█▌ ] /LPMessagingSDK.framework
6.8 MiB [█▌ ] /Netverify.framework
6.6 MiB [█▌ ] /BlinkCard.framework
6.4 MiB [█▌ ] /UALMyAccount.framework
5.7 MiB [█ ] /WebRTC.framework
5.3 MiB [█ ] /UnifiedPlayerLibrary.framework
4.4 MiB [█ ] /UALLogin.framework
4.1 MiB [▌ ] /UALAirportMaps.framework
3.9 MiB [▌ ] /INP