Apple Gives Some Love to Older Devices

As an iOS developer dealing with old devices is a thorny problem. Progress in iOS marches ever onward and eventually a new version comes out which drops support for older devices. You are then faced with a choice: keep supporting that older OS and your established customers who are unable to upgrade, or abandon them.

Apple has come up with a new feature for users on older versions of iOS which allows them to download the last compatible version of your app.  This is good news for users and potentially a headache for developers.

I always try to support the older OS as long as possible. If there’s a new OS feature I’d like to take advantage of it’s usually possible to do so–and make it so that feature is simply unavailable for users on an older OS version. But at some point there is a fundamental new feature you want to support that requires an architecture change to your code and means dropping that old OS.

When it does finally come time to abandon support for an OS version I always try to make sure there is one final version of my app that has a number of bug fixes and improvements that will leave these people happy until such time as they get a new device that can support the latest OS.  This version of the app goes up in the app store and in the “What’s New” metadata I’ll highlight that the update is the last version to support whichever OS version is being dropped.  I’ll leave this version in place for several weeks to a month–which should be ample time for my users to update.

Still, some stragglers who are lazy about updating their device might not get around to it, or some new customer with an older device might hear about my app and want to try it.  Apple’s new system is going to help them out by letting them download and use my app.  Hooray!  This is good news for them and for me.

The one main gotcha is if that last version is a doozy–perhaps because of some nasty bugs I never got around to fixing.  Undoubtedly there will be developers in this camp and some people who are unhappy with Apple’s latest move.  I think this just highlights the importance of doing that final maintenance release before you drop support for an OS.

Update 9/20/13

Kyle Richter (co-founder of Empirical Development) points out some additional considerations with Apple’s new service.  I agree there are some pitfalls, but on balance I still think this is a win for users–as long as developers are careful to put out a high-quality final version before dropping support for an older OS version.

WWDC 2013 Top Ten

I was one of the lucky ones who attended WWDC 2013 this year.  (Pro tip: copy your Apple ID password to the clipboard so you can sign in very quickly and order your ticket.)  As always there is a lot of information about new products, OS updates, innovations and APIs.  Below is a round up of some of the most important developments in iOS development from Apple.

  1. Bots.  Apple has finally made continuous integration a breeze.  In the past I have used Jenkins to set up a continuous integration system–but it was a lot of work which required a great deal of manual configuration.  With XCode 5 and OS X Server you can use Bots to easily build a continuous integration system and even have a “scoreboard” which shows stats on the state of your build.
  2. XCTest.  Apple has upgraded their unit test framework and made testing your code easier than ever.
  3. XCode 5.  Built on ARC the new XCode should take up less memory and run faster than before.  They’ve streamlined the interface and included some new built-in profiling tools to help catch memory leaks and performance issues while you’re developing.  Instruments is still there with its rich tools, but now XCode has an early warning system while you’re debugging.
  4. New Background Features.  Background transfer means that the OS will download (or upload) your data for you while your app is in the background.  This is huge for data-intensive apps!  Read up on NSURLSession to find out more.  Remote Notification allows you to send a push notification to your app and wake it up to perform a task.  Background Fetch tells the OS to periodically wake your app and give it a chance to update its data, so that whenever the user brings it to the foreground it has up-to-date information to present to the user.
  5. UIKit Dynamics.  iOS has always had rich animation support, but now it’s easier than ever to create dynamic and engaging interactions in your app.  And for gamers check out SpriteKit (Cocos2D watch out). It even has a particle effects editor!
  6. Inter-App Audio.  CoreAudio has some cool new features that allow audio-enabled apps to share audio between each other.  This is very similar to AudioBus–but works directly with the OS and doesn’t require a third party library (which makes me wonder what’s going to happen to the innovative AudioBus app and framework).
  7. Collection View Layout Transitions.  There is some really cool stuff you can do in iOS 7 with collection views and layout transitions.  Check out the iOS 7 photo app or calendar for examples!  This new feature will let you seamlessly transition from one layout to another within the same collection view.  Instead of pushing a new view onto a navigation controller the existing collection view can animate to a new layout and present a detail view within a larger context–giving users a better sense of place.
  8. Custom Navigation Transitions.  Have a great idea for a navigation controller transition?  Now you can build it.  There are a lot of details here, and it looks pretty complicated, but if you follow the rules it looks like it will work pretty smoothly and save you the trouble of building your own navigation UI.
  9. State Restoration.  This has existed since iOS 6 but there are some new features that make it more powerful and easier than ever to let iOS restore your app to its former state when it is re-launched.  Combined with snapshots this makes your app seem like its process never got killed.
  10. Game Controller Support. This looks awesome for the gaming crowd. Watch out console makers! Did I mention SpriteKit makes it easy to build awesome 2D games?

PS: be sure to check out the WWDC 2013 videos online!