On the first day of 360iDev, I was in a session to learn about programming an iPhone, and somebody mentioned that a friend of theirs had updated their iPod firmware, and couldn’t figure out how to reset it back to the prior version. Since I had recently done this, I thought I could write this walk-through.
Apple uses the iTunes application to upgrade your operating system which does a nice job and for the most part protects you from doing anything too terrible by automating the process. On the iPhone, iTunes will give you an alert about the availability of a new operating system, and ask you if you’d like to upgrade, and tell you that if you have problems you will have the option to restore from a backup.
The interesting thing about the backup piece though, is that it doesn’t really restore the firmware, only the settings. For most users this is fine since the reason for needing to go through the “restore” process is actually because of a problem with the firmware, and the “restore” does all the work required to get your phone back to working with the new firmware and your old settings.
If however, you need to go to a prior version of the firmware, the process is not so obvious. Until recently I didn’t even think this was possible for somebody to restore to the prior version unless they were a developer.
After I updated my firmware on my iPhone recently, I noticed that my hard drive was getting to be very full, which prompted me to search for what was using up my disk space. This led me to find that the old version of the firmware gets saved by iTunes when you do the update.
Firmware files have an .ipsw extension and can be found at the following locations:
~/Library/iTunes/iPhone Software Updates
To restore the firmware to the prior version, do the following:
- Launch iTunes (with your iPhone connected)
- Click the button that says “Restore” while holding down the “Option” key (use the Shift key on Windows). Note: if you get a prompt asking if you want to back up your phone, you probably weren’t holding down the key when you clicked, and you’re actually going through the restore process.
Alternatively, if you’re an iPhone developer, the XCode Organizer can also drive this process of selecting a version to install on your phone.
In either case, the actual firmware change is done through iTunes. Now you should see the firmware file being extracted:
Your phone will be reset, and you’ll see the firmware being validated in iTunes:
Next you’ll see the update message:
At this point your phone will be reset back to factory settings for that prior version of the firmware. You’ll probably get the prompt that tells you an update is available, which you can cancel.
Finally if you want to restore your settings, pick the backup you want to use (you can also tell it to set up as a new iPhone, which just means you won’t have any of your settings from before). This will restore all of your apps and setting, although you may end up with a message that tells you about applications that won’t work if you have any that are for a newer version of the firmware (in other words if your backup contains an App version that wasn’t available for the firmware you reloaded).
After all of this, iTunes will probably ask you if you want to upgrade your firmware to the current version, which is how you would go back to the current version when you are ready to do so (or you can go through this whole process again to go to a specific version). You may want to turn off the automatic update checking if you are going to switch to other versions very often.
Note that your “problem” applications from the prior message will work once again after you are on a version of the firmware that is current enough to support thos applicatons.