Developer life sure was simpler when I began developing apps for Apple's iOS platform nearly half a decade ago. My first commercial iOS app was developed while the original iPad still loomed on the horizon. The iPhone 4 had just been announced with its "stunning retina" display that boasted twice the resolution of its predecessor, thanks to a much greater pixel density. From a developer's perspective, creating universal applications 4-5 years ago merely required basic knowledge of Apple's three mobile device variances:
- iPhone/iPod Touch 3rd Generation and below (320x480; 163 PPI)
- iPhone/iPod Touch 4th Generation (640x960; 326 PPI 'Retina Display')
- iPad 1 (1024x768; 132 PPI)
At the time, all available iPhones and iPod Touches shared the same aspect ratio and screen size, so supporting retina displays was basically a matter of producing 2x-sized assets (i.e., a 44px icon on standard devices would be rendered at 88x88 on the retina 2x devices). Apple enforced the convention of appending '@2x' to the filenames of each retina-made asset to automatically load them in place of the standard assets on supported devices. The iPad used standard resolution assets but had a larger resolution; depending on the app some adjustments would need to be made to take advantage of the added screen real-estate. Aside from these few considerations, it was blindingly simple to develop for the few available iOS devices.
Back then, Android had already proven itself to be a a serious competitor to iOS by offering more affordable and diverse phones to the masses. (Android, in fact, overtook Apple in phone market share share before 2010 had ended.) Unlike iOS devices, which were kept in total control by Apple, Andoid was an open platform that ushered in endless third party manufacturers to capitalize on the smartphone craze. Android phones came in all shapes and sizes—some were budget phones costing just tens of dollars while the MVPs of the bunch would cost hundreds of dollars while sporting features that eclipsed any offered by iPhones.
Android developers frequently pointed toward Android's mass fragmentation and decentralization as a cause for headache and concern. Not only did the screen resolutions, pixel densities and camera capabilities vary substantially from device-to-device, but the installed Android OS versions were also heavily unpredictable. Most carriers would use custom builds of the Android software, so whenever a major new version of Android was released it was up to the individual carriers to update their custom OS and push out the update to its customers.
According to Google, more than 12% of Android users are still using versions of its OS from over four years ago, while 41% remain on Jelly Bean (circa 2012-2013) and another 40% are using KitKat released in the fall of 2013. Only a sliver of all users are on the latest Android OS. By contrast, 78% of all iOS users have already migrated to iOS 8 (released last fall) with 20% still on iOS 7. This means that only 2% of all iOS users are using a version from more than 1.5 years ago. Apple is fairly aggressive at encouraging users to update their OS as soon as a new version has been released—prompting users on the devices and via iTunes at every opportunity.
While Apple continues to shine with its OS user adaption rate, I am finding the magnitude of different devices to be increasingly cumbersome from a developer's perspective. Traditionally, Apple would reveal a new flagship mobile product each year with the only consumer options being color and storage capacity (i.e., a 16GB or 32GB version). In September 2013, Apple debuted the iPhone 5S along with a cheaper counterpart, the iPhone 5C. The resolutions were the same on each but other technical features were different, including the CPU architecture. In September 2014, Apple announced the iPhone 6 and iPhone 6+, each with significantly different screen sizes, resolutions and pixel densities. The iPhone 6+ also brought about a 3x retina display, which for developers signaled yet another asset requirement. [I still chuckle over Apple's rebuttal toward larger phones when it announced the iPhone 4, only to go against those very arguments in making the most uncomfortably large phone yet with the iPhone 6+ just two years later].
Apple's arsenal of supported mobile offerings now includes multiple generations of iPads, iPad Minis, 5th generation iPod Touches and a slew of iPhones, along with the recently unveiled iWatch. At the same time, older devices including iPhone/iPod Touch 4 and below, and the original iPad have been phased out with no additional iOS support provided by Apple. Notably, the original iPad was only supported by Apple for approximately one year before Apple ended its life, with the last available iOS update being 5.1.1 from October 2011.
I have made every attempt to retain legacy support for the original iPad (and iPod/iPhone 3+) in my developed apps by building against iOS 5+, but that must now come to an end. Statistically speaking, only 3-6% of my app's users are on these unsupported devices so the impact at this point is minimal and I held out supporting them longer than most other apps on the market. All of the third party libraries and frameworks I use now require at least iOS 6+ and most require 7+, and all of the most popular apps including Facebook and Instagram also require iOS 7+. I plan to still support iOS 6+ on a limited basis for those who still have an iPod Touch 4, including a few of my nieces and nephews. But when it takes more time and effort to retain legacy support than it's worth, it is no longer a desirable nor profitable solution. So, I will be bumping all of my iOS apps up to iOS 7+ requirements in the near future.
In order to properly support iPhones, iPods and iPads in this era from iOS 6+, one must now include a dozen launch screen images to accommodate the slew of different resolutions and retina displays. On that note, 20 separate icon graphics must also be included, or even more if supporting other devices (as seen above). Three core sets of application media has to be generated including 1x, 2x and 3x. I had high hopes that I would finally be able to bid farewell to the traditional 1x assets which have become a nuisance to maintain, but alas the non-retina iPad 2 and original iPad Mini are still actively used, so that can't happen just yet.