🏆 AllTrails won the 2023 iPhone app of the year 🏆
And maybe more importantly, AllTrails holds the distinction of being loved by almost every member of the Emerge team. We'll go through how the iOS app changed in 2023, but it's a change in the Android app that leaves us with more questions than answers.
The iOS App
Unlike our past deep dives, which highlight an app’s architecture and technical changes, the most significant changes in the AllTrails app seems to be a design-oriented shift in the type of assets they include in the app. A change in late 2022 signaled what was to come in 2023.
Late 2022 Change
At the end of 2022, AllTrails decreased its app size by 50MB, a 25% reduction. AllTrails removed 55 MB of assets, notably by removing four “pro-” PDF files that seemed to be used to upsell pro features:
pro-carousel-distance-header-small.pdf
- 16.8 MBpro-carousel-map-download-header-small.pdf
- 15.4 MBpro-carousel-header.pdf
- 9.1 MBpro-carousel-distance-header.pdf
- 8.9 MB
pro-carousel-map-download-header.pdf
pro-carousel-map-download-header-small.pdf
pro-carousel-header.pdf
pro-carousel-distance-header.pdf
These four assets took up ~50 MB by themselves (why files were 10 MB - 15 MB in the first place is worth asking). Below, our X-Ray diff shows just how many assets AllTrails removed between v16.3 and v17.0. Red nodes represent size decreases, while green nodes are increases.
2023 Changes
It seems simple to point out, but one of the biggest changes for AllTrails was the increased use of video and interactive features. At the start of 2023, there were two .mp4 files in the app. AllTrails quadrupled that and now has eight videos in the app.
The new video files include:
PlusUpsellHeader-3DMaps.mp4
- 3.0 MBflyover-preview.mp4
- 2.4 MBPlusUpsellHeader-TrailPreviews.mp4
- 1.1 MBPlusUpsellHeader-OfflineMaps.mp4
- 286.7 kBPlusUpsellHeader-DistanceAway.mp4
- 225.3 kBmini-distance-away.mp4
- 90.1 kB
These videos show off "plus" features in the app, and some are direct replacements for the PDFs removed at the end of 2022. We also see new .json files like alltrailsv2-vector-pre-rebrand.json
, which contains Mapbox animation data. Mapbox is the SDK that helps enable the “Trail Previews” feature highlighted in the award announcement.
// snippet of alltrailsv2-vector-pre-rebrand.json
{
"version": 8,
"name": "AllTrails Terrain 2020 - en_imperial",
"metadata": {
"mapbox:type": "default",
"mapbox:origin": "outdoors-v11",
"mapbox:autocomposite": true,
"mapbox:groups": {
"Terrain, terrain-labels": {
"name": "Terrain, terrain-labels",
"collapsed": true
},
"Transit, transit-labels": {
"name": "Transit, transit-labels",
"collapsed": true
},
"Administrative boundaries, admin": {
"name": "Administrative boundaries, admin",
"collapsed": true
},
"b05bde0d52c7b94cc170ae519c6f9ba2": {
"name": "POIs - custom"
},
...
}
}
}
AllTrails clearly emphasized creating a more interactive and engaging experience, and it paid off well. The AllTrails changes in 2023 weren't purely cosmetic. Some other changes to mention:
- At the start of the year, AllTrails had no app extensions (minus the Watch extension). The app now ships three:
NotificationContentExtension
,AllTrailsWidgetExtension
, andBrazeNotificationServiceExtension
.Plugins in AllTrails app - Speaking of Braze, AllTrails reduced the size of dynamically linked frameworks from 75 MB to 65 MB. They did this by completely removing frameworks and shifting some, like Braze and Apptentive, to be statically linked.
The Android App
Now for an interesting change we don't see often. The Android app had a similar shift as iOS to include more videos, but what’s most notable is that the AllTrails app appears to no longer be splitting APKs in a "normal" manner. Either they are splitting APKs manually, or have disabled a portion of automatic APK splitting, an uncommon practice.
At the start of the year, the AllTrails app had a very “normal” looking .aab, producing four split APKs. This changed in version 17.9.1. The app started shipping three split APKs, with all architectures included in the base.apk. The app increased from a 40.5 MB download size to a 54.7 MB download size, a 35% jump.
So, what does this mean? When a user downloads the AllTrails app, they download native libraries (.so
files) for every Application Binary Interface (ABI), even though a single device will only ever use the applicable .so file for one ABI. Most apps on the Play Store ship .aab’s and use automatic APK splitting, which optimizes for a specific user’s device architecture, screen density, or locale. In less common cases, some apps still ship a universal APK, which contains all architectures, densities, and locales supported, in a single, large APK.
More simply, instead of shipping native libraries for a single architecture as part of a split APK, AllTrails is shipping native libraries for all four architectures in its base APK.
AllTrails has the density and locale split APKs, suggesting that AllTrails switched to manually splitting APKs, a legacy practice, or disabled ABI splitting. This practice brings download size bloat, something strange to see in a larger app.
Many people likely download the AllTrails app at trailheads with less-than-ideal network conditions, making the extra download size more significant. We’d love to hear from anyone on the AllTrails team to learn more about why the team chose to ship native libraries for all architectures, so get in touch if you know!
Analysis Links
Here are the links to all build analysis pages referenced:
- v16.3 build analysis (November '22)
- v17.0 build analysis (December '22)
- v16.3 vs. v17.0 diff analysis
- v17.2 build analysis (January '23)
- v18.8 build analysis (January '24)
- v17.2 vs. v18.8 diff analysis
- v17.8.1 build analysis (May '23)
- v17.9.1 build analysis (May '23)
- v17.8.1 vs v17.9.1 diff analysis(May '23)