Every year, as the new OS version ships, some older devices can’t upgrade. This year the first generation iPad and iPhone 3gs are left behind, never to move beyond iOS 6.1. The problem, as a developer, is that our customers are still using these devices so we need to continue supporting them, even though Apple has moved on and may or may not even give us the ability to target those older operating system versions.
Last week Apple released a very nice new feature. Instead of those customers who didn’t upgrade being screwed, now at least they have the option of recovering an older version of the app, the version that last ran on that version of the OS.
There is a problem with this, of course, in that some older versions of the app just can’t run anymore on any OS. For instance Twitter changed their API and old versions of Tweetie or Twitterific just won’t function anymore. Kyle Richter talked about this on his blog (the image is also from him):
The common misconception here is when an app is updated it is updated to add new features and maybe some bug fixes. These new features may require a newer version of iOS so old users are left in the cold. The truth is a lot happens under the covers during updates, API endpoints are updated, data models changed, multiplayer protocols changed, even legal issues are addressed.
The likelihood of any complex app, especially anything API driven, working after several years of neglect are slim. Those that do work may be incredibly unreliable and buggy.
First of all, there are tons of apps in the app store that would work perfectly fine under these new Apple policies. Our app, powerOne, is a perfect example. It gives me the opportunity to put old OS versions behind me as long as I make sure these are stable before I release a new version. In fact, I already used this feature. Since the bug we fixed last week only impacted iOS 7, I lopped off support for iOS 4.3-6.0 devices at the same time knowing that Apple would cover those people if they lose the app. This allowed me to do more comprehensive testing on just two OS versions rather than six or seven.
Furthermore, I will make future design decisions based on this knowledge. Let’s say I wanted to change the add-on library. Instead of just changing what we already have visible, I’d probably create a new version, making sure my old customers don’t lose out on access.
Of course Kyle is right: there are some apps that this just won’t work for. But if I’m a customer using an old version on an old device, I’ll take “some” rather than “none.” And if the old versions really won’t work, Apple added an option for us developers to turn off the feature.