Today I’ve decided to upgrade my iPad from iOS 4.3.2 to iOS5. I Thought the process would be dead easy, but some complications occured. I connected the device, clicked the „Update” iTunes button, upgrade downloaded, iTunes performed iPad backup. And then iTunes presented an error message „The iPad could not be restored. This device isn’t eligible for the requested build.” That was confusing. And totally unexpected.
Quick google research revealed that quite a few people were struggling with the same issue. Most often it happened when they tried to update the jailbroken device. People had various suggestions, here’s what worked for me. But first, a little background.
Sometimes you may want to downgrade your device iOS version. You may want to do that if you’re into iOS software development or jailbreaking. Or simply you may find some of the new firmware version’s changes unacceptable (i.e. lack of multitasking gestures for iPad 1 in iOS5). After all it’s always good to have a choice.
To do that, you need a couple of things. One of those are your device SHSH blobs (digital signatures based on some device hardware keys and the firmware version). You need to preserve them before upgrading to newer iOS version (or jailbreaking the device). Without them it’s impossible to downgrade, Apple doesn’t allow to install firmware they haven’t sign (and they sign only newest iOS version, so if iOS5 is out, you cannot sign e.g. 4.3.2 firmware any more). More information on this topic can be found here: http://bit.ly/aNI5hA.
Since I’m a software developer and also I find jailbreaking useful (I don’t encourage installing pirated software, but jailbreak actually makes some really cool stuff possible via custom Cydia packages) some time ago I wanted to store my device SHSHs for 4.3.2. I used sofware called „Tiny Umbrella” to do that. It certainly did the job, but it also caused some harm in the process. When you try to install earlier firmware version SHSH is not taken from one of the Apple servers, it’s pushed from your localhost instead (from TinyUmbrella’s integrated local TSS server) or from Cydia server. To achieve this, iTunes request to Apple servers are being redirected to localhost/Cydia. That makes perfect sense. The bad part is that TinyUmbrella doesn’t always (or ever) clean up after it’s job is done. So after you saved your SHSHs and tried to restore earlier firmware version, the clutter on your Mac remains untouched.
Imagine that you used TinyUmbrella and now want to update to the newest iOS version, which you have never installed before. What happens is… well – basically it doesn’t work at all. iTunes thinks it sends a sign request to Apple server, but in fact it sends it to localhost (your computer; or Cydia server). If TinyUmbrella’s TSS server is not running (default behavior), iTunes doesn’t get any response at all. So it thinks sth. is wrong with your device and presents the „device could not be restored” error.
Ok, but why does it happen?
Remember that you had to provide your admin credentials to make TinyUmbrella run? That’s because it needs to modify
/etc/hosts file (to redirect iTunes requests). That’s where unhandled clutter remains. Let me show you how to fix it.
1. Run Terminal App
You can find it in Application -> Utilities.
Alternatively you can use Spotlight to find it. Press Cmd+Space and type „Terminal”. Click on the first result.
Terminal window pops out.
2. Change user to administrator
If your account has administrator privileges you can safely omit this step.
su admin_account_name where
admin_account_name is Administrator login on your system. You will be asked to type administrator’s password.
On my Mac user with administrator privileges is named
tomekwyszomirski, so I typed „
su tomekwyszomirski” and entered that user’s password:
Great! Now you are able to edit system files.
sudo nano /etc/hosts
sudo nano /etc/hosts
You land in a console texteditor (nano) with hosts file opened.
4. Find line with
gs.apple.com not preceded by #
Move your cursor (using keyboard arrows) to beginning of the line which contains
gs.apple.com but doesn’t start with hash #.
Insert hash # at the beginning of that line to comment it out.
5. Save file and quit
Save file by pressing Ctrl+O (^+O in Mac notation). Nano asks to confirm filename, hit Enter.
Quit nano by pressing Ctrl+X (^+X). You can now close terminal window.
6. update your iOS device!
That’s it! You’re done! You can now proceed to iPhone/iPad firmware update using iTunes! It won’t fail now.