With the release of iOS9, Apple introduced App Thinning. In their words:
“The App Store and operating system optimize the installation of iOS and watchOS apps by tailoring app delivery to the capabilities of the user’s particular device, with minimal footprint. This optimization, called app thinning, lets you create apps that use the most device features, occupy minimum disk space, and accommodate future updates that can be applied by Apple. Faster downloads and more space for other apps and content provides a better user experience.”
App Thinning is an exciting concept that will benefit users with lower storage on their mobile devices. It is made up of three core components: App slicing, Bitcode, and On-Demand Resources. These combine together to tailor applications to the specific device that they are downloaded on. This also means that each device will have a customized version of the original app that will have to be tested for. Lets take a detailed look at the components of App Thinning to fully appreciate its impact.
Slicing (iOS)
Slicing, coupled with Bitcode and On-Demand Resources, allows an app to be delivered in variant forms for their different target devices. These variants consist of only the necessary executable architecture and resources for the app to work on the specific device that is downloading it. A developed app is uploaded to iTunes Connect, which will produce variants modeled to the devices supported by your app. Sliced elements include
- GPU Resources: Sliced based on device capabilities
- Image Resources: Sliced based on their resolution and device
- tvOS: Assets in catalogs shared between iOS and tvOS targets are sliced and large app icons are removed
Thanks to Xcode, you can simulate app slicing during development, allowing you to see created variants on the fly. So why is this a good thing for the user? App thinning saves device storage, and more space for apps/photos/music is always welcome. For a user with a 16GB, this is a great benefit; every bit of space counts on a device that small, and even 1GB saved will be noticeable.
While space saving is nice, there is a trade-off: each variant is considered its own, separate app, meaning that your app MUST be tested across devices.As we have previously touched upon, ensuring you have the resources (devices, testers, time) to test your app across the most popular devices on the market (and within your user base) is critical. Now that we know a different device will have its own, individual app entity, cross device testing is mandatory
To account for testing these app variants across devices, your test execution should be scaleable, reliable, and quick; these are areas where test automation shines. By preparing for app thinning sooner than later, you can ensure stable functionality and a consistent core experience for your app variants.