The question of “Which Android and iOS versions should my app support?” is often raised by clients. In this article we will discuss this question and we will attempt to present a reasonable answer.
As software engineers (as I am by nature), we are always looking to take advantage of the latest technologies and best architecture approaches. Each update of mobile operating system introduces new technologies and updated APIs that give us the ability to create more stable, more functional and more beautiful apps. However, new OS versions are double-edged swords; along with the new features comes the inevitable issues with backwards compatibility (some of the new classes and frameworks just aren’t available in older versions of OS).
By taking an approach of selecting the minimum OS version you can achieve a balance between going low enough to support as many devices as possible and not going too low that you don’t lose time and money. As in most things in life, you must remember that you will never satisfy everyone, it’s the real world of mobile applications.
And, the more you go back, the greater the development pain (and expense).
Google does not have the control over all devices and manufactures and so they cannot completely control the delivery of new updates. Most Android devices are manufactured by third-party companies (Samsung, LG, Huawei, Xiaomi etc.), each with its own policy on if and when devices are updated with new versions of the operating system. Some manufacturers simply don’t want to invest the effort on adjusting their customized Android OS for older devices.
Frequently there is a delay in OS updates by other companies because they implement their own user interface with exclusive features over the stock Android. This customizing and then subsequent testing for bugs is a time-consuming process. Thus, those devices are updated at a rather slow pace.
This section provides data about the relative number of devices running a given version of the Android platform.
Data collected during a 7-day period ending on April 16, 2018. Any versions with less than 0.1% distribution are not shown.
To get current information on what the ecosystem looks like for Android, check out Google’s dashboard https://developer.android.com/about/dashboards/index.html
Currently I suggest supporting all Android version from 5.0 (Lollipop) and up. Android KitKat 4.4 still has a market share of close to 10%, but your developers will probably tell you, that it does make sense to have Lollipop as minimum version for new project due to the technical improvements.
If it isn’t that easy, analyze and keep your target audience in mind and choose either of the two version 4.4 (KitKat) or 5.0 (Lollipop) depending on your user base’s circumstances.
As you might already know, iOS is the operating system that runs on iPhones, iPads etc. and produced by Apple.
Unlike Google, Apple has full control over all devices and ecosystem. Apple manufacturers all the devices that run iOS and chooses which devices will receive updates. Apple also maintains control of which devices are going to receive updates. They simply cut support for older devices.
iOS users generally upgrade faster than Android users. Unless your app has a special use case or user base, the general wisdom is to support the current major version of iOS and the previous one.
To make an educated decision regarding which iOS versions to support, you must understand Apple’s adoption rates and release cycles. Apple doesn’t make official announcements about iOS adoption statistics on a regular basis — you’ll need to keep your ear to the ground to get the most recent stats.
As measured by the App Store on May 31, 2018.
In order to do this, one of the first things you should do is check current iOS adoption situation on this page https://developer.apple.com/support/app-store/. If you are starting a new project usually it’s enough to set a deployment target to previous version of iOS so your app will support 2 latest versions. On the other hand, if your project already has quite a big audience, then you should probably think about adding a support of n-2 version of iOS (where n is the current version number). In absolute device numbers these 3-5% potentially could be thousands or even millions of new users. In this case the efforts to implement the support are worth.
If you have reason and want to make it impossible for some devices to run your app you can limit deployment target according to the beautiful table on this page http://iossupportmatrix.com. For example, to “block” iPhone5 and 5C you can set deployment target to iOS11.
In my experience, don’t stick with old versions based only on device statistics. Ignoring the reality of your user base will raise the costs and increase the time of developing applications. By removing support for older OS versions, we get a much simpler scenario, less code, a cleaner architecture, we reduce effort of maintenance which in turn will free time to implement new features.
Keep your target audience in mind and remember that you’ll never satisfy everyone.