My Experiences With iPhone OS 3.1 (Or How To Downgrade your iPhone)

I Signed up to be a fully registered developer around the time 3.0 was announced. I didn’t bother with beta 1 but from beta 2 onwards I was running the pre-release OS on my iPhone 3G, which incidentally is my main phone, and my only Apple touch device (apart from my GF’s 1st Gen iPod Touch, which would be unfair to mess around with).

I have to say I was super impressed with 3.0 right the way through the beta period, it was stable and fast, and in most cases did not give me any problems. A few of my favourite apps stopped working but, it was only a matter of time before they were sorted out.

I really enjoyed developing with 3.0 through that period, it has really great improvements in the API.

Needless to say I was rather excited by the release of 3.1b1 and immediately installed it on my iPhone. It was ok, a bit unstable to be honest, having a tendency to freeze up completely every so often, which was frustrating. But apart from a few other bugs, nothing to be too concerned about.

I installed 3.1b2 as soon as it came out, and boy what a shock! It was terrible! My calendar stopped working, i couldn’t send a text, my email kept disappearing, not to mention the removal of the ability to tether through the widely publicised hack.

I can’t really go into any details about the contents of 3.1 due to the confidentiality agreements, but lets just say that with the exception of the 3Gs, there isn’t a great deal of improvement, and there certainly isn’t anything in there that I need for development purposes currently. What I did need was a stable phone so I decided to downgrade back to 3.0.

Apple clearly warn people before upgrading that in doing so, the device is locked in test mode and cannot be downgraded but there is a way, and it requires nerves of steel and a few pieces of software. The important thing to remember is that it is very difficult to brick the iPhone/iPod Touch, at worst you can re-install the latest OS and carry on as before, and you don’t need to jail break either.

This process involves putting your iPhone/iPod Touch into DFU (Device Firmware Upgrade) mode. This is lower level recovery mode (sort of) that bypasses iBoot (a detailed description can be found here and a useful video can be seen here).

One interesting point, a video response to the vid i posted above says that there is a bug in 10.5.6 that prevents connection to the device when its in DFU mode. I didn’t experience this but the guy says that to get round it plug the device into a powered usb hub. I have a 2007 MacBook Pro, which has usb ports on either side. The port on the right can carry a higher current than the one on the left (for powering usb drives, etc) and this is the port i used, so this may be why.

Please Note: With this Guide you can only downgrade your firmware but not baseband. Even after downgrading iPhone 3.1 to 3.0 your baseband version will still remain the same.
Also, I cannot confirm this but i understand that it is not currently possible to downgrade an iPhone 3Gs with the released build of 3.1 as it is unsigned by Apple.


So, here are the steps:

  1. First you need to download iRecovery. The project home page only has the source but you can download the compiled versions for Mac OSX here: irecovery
  2. iRecovery is a console app which must be run in terminal. Extract the zip to your desktop.
  3. Copy libusb-0.1.4.dylib to /usr/local/lib and run command ‘chmod 777 libusb-0.1.4.dylib’ in a terminal window (you will need Administrator access)
  4. cd to ~/Desktop (still in terminal)
  5. Run command ‘chmod 777 iRecovery’
  6. Make sure your device is connected to your Mac.
  7. Put your iPhone/iPod Touch into DFU (see link above for instructions on how to do this).
  8. iTunes should start up and tell you the device is in recovery mode, click the ‘Restore’ button. iTunes will now download the current live firmware and start to install it.
  9. The Installation should fail, reporting error 1015. This occurs when the baseband is being loaded. Just click ok.
  10. Go back to your terminal window (which should be pointing at ‘~/Desktop’ ) and type ‘iRecovery -s’. This should then connect to the device. If This fails you’ve done something wrong and should check through the previous steps.
  11. Issue the following commands:
  12. ‘setenv auto-boot true’ press return
  13. ‘saveenv’ press return
  14. ‘fsboot’ press return
  15. If the device doesn’t boot, type ‘fsboot’ again (took me 2 attempts).
  16. The device should now boot up and be running on 3.0

These are the steps I took to restore my iPhone and it has been running without any problems since. If you have any problems I can try and help, but cannot be held responsible for any damages to your device.