Ability to Downgrade iPhones

There are many legitimate reasons to downgrade iPhones. As a user, perhaps you just don’t like the new OS.

As a developer, I have a need to test my App on all OS versions my users may reasonably use. I even have a spare iPhone I use just for testing. Alas, Apple only allow the very latest OS to be installed, even if you are a developer.

Apple also don’t ship old OS versions on the iPhone Simulator anymore, so that can’t be used to verify that you’re not calling any new methods either.

For a recent release, this meant I actually could not test it properly. I did the best I could by using the iPad 3.2 * simulator* (a very poor man’s substitute), crossed my fingers, and released. It was a nail-biting day…

Not all users upgrade immediately. Upgrading requires iTunes, yet normal day to day usage of an iPhone does not (you can do everything, buy/upgrade apps, buy music, etc). Actually I believe this is a pretty common use-case, especially for a key audience of mine: travellers. In fact, with my App, at least 10% of my active users (ones using the export server) are not yet on iOS4! That also means 10% of my potential customers. No way am I going to ignore them.

A bug has been reported to Apple on this issue.

To summarise, there are many legitimate reasons why people are on old OS’s, and why (especially developers) have a need to downgrade to old OS’s.

Fortunately there is a solution. And it doesn’t require doing anything illicit to your iPhone either.

Download The Firmware Umbrella. Plug in your iPhone to USB, and press a button.

What the Firmware Umbrella does is cache the iTunes server OK response to your firmware installation request, allowing you to fake this response in the future (to allow the downgrade). Only catch: you can only cache responses for the latest firmware, so do it today!

Important TIP: tick “Advanced Options” and change the “Request From” option to “Apple” (Cydia is for jailbreaking). Optionally, you can do both.

Caching the response is easy. Using it a bit harder – but do yourself a favour, cache the response now, and if you need it in the future, you’ll thank yourself.

2 comments on “Ability to Downgrade iPhones

  1. This is pretty bad. At the very least they should provide a static analysis tool to check for most code incompatibilities. Certainly you should be able to simulate.

    While I was looking for solutions to the woeful performance of iOS 4 on my iPhone 3G I came across this: http://lifehacker.com/5572003/how-to-downgrade-your-iphone-3g%5Bs%5D-from-ios-4-to-ios-313

    I’m unlikely to do it because of the whole restore your apps thing, but it may be a very good solution for developers who have a dedicated iPhone for testing.

  2. YES, YES, yes! Static analysis would be awesome. They really should, and some people have requested this. This is far better than testing, as, well it’s compile time! Apperently such tools exist on Mac OS X, but not in the iPhone SDK. And I agree with the simulator.

    Apple’s official responses are: “The simulator is a poor testing environment anyway” (I agree, but counter that it’s better than nothing), and “you can test 3.1.3, on a device that is running 3.1.3!” to which I counter that I don’t think just using “whatever you happen to have lying around on your desk” is a good solution to this issue.

    Americans seem to have an endless supply of old iPhones on eBay. Well they are not so cheap outside the US… and I *already* have bought a second test device, why should I need another just for 3.1.3?? Need to keep some of my profits from this App to pay my food bills!

    Ah yes, for the 3G, it is possible to downgrade. Starting with the 3G S, (and some newer 2nd gen touches), they made downgrading (currently) impossible without storing the itunes server response.

    Can you downgrade, then restore your apps? Remember, at least GPS Log has ways you can backup & restore without using iTunes.

    I hear turning off spotlight helps performance on the 3G with iOS4, did you try that?