Apple Made Me Jailbreak My iPod Touch
Yes… it’s true… after 2.5 years of being legit, Apple forced me to jailbreak my device. Why? Because I had no other option to test my new game on iOS 3.1.3.
A few months ago I successfully (and legitimately) rolled my iPod Touch back from iOS 4.2.1 to 3.0. But as much as I tried I could not do the same with 3.1.2 or 3.1.3. I even tried to roll back to 3.0 (and even 2.2.1) and then upgrade to 3.1.3 to no avail. So I’ve had my iPod Touch at 3.0 and that’s what I’ve been targeting all my builds with. But then I uncovered an issue with my latest game that uses cocos2d. It was not running smoothly. On 3.0 devices cocos2d does not use CADisplayLink, which gives a much more consistent frame rate. I wanted to test my suspicion that if I used CADisplayLink it would work. Of course I could have just tested on a 4.2.1 device, but then I’d have no idea if it was CADisplayLink or some newer functionality and I really want to target the oldest iOS I can. So I spent the last 24 hours trying various options but couldn’t get my device to 3.1.3 (plus I almost bricked it a couple of times).
So… even though I wouldn’t recommend it, if you find yourself in the same position and really need to test on an older iOS, here’s the steps I took. Again… I would have loved to do this the legit way and it would be nice if Apple had a way for developers to downgrade, especially since we don’t have the luxury of multiple simulator versions anymore. I’m not including any links to these images or utilities. I’ll leave it up to you to do the research.
- Download the appropriate 3.1.3 image for your device. In my case iPod2,1_3.1.3_7E18_Restore.ipsw for a 2nd gen iPod Touch.
- Create a jailbroken image using PwnageTool 3.1.5 which is designed to work with the 3.1.3 image.
- Use iREB-r4 on Windows (I did this in a VM) to put your device into pwned DFU mode. This probably isn’t necessary if you can get the timing right on the button pushes. But I did notice on VirtualBox that the USB indicator showed if it was in DFU or RESTORE mode, which made it easier to tell when I was successful (other than the black screen v.s. iTunes connection screen).
- Use TinyUmbrella to spoof the gs.apple.com servers to allow the image to be validated and upgraded. I couldn’t get the host file change wouldn’t work for me.
- Use iTunes to downgrade the image (option-restore) and selected the jailbroken custom image.
So now I have a 3.1.3 device to test on. I guess I also get to see what’s going on with the jailbreaking community, something I haven’t payed any attention to. It was pretty cool to SSH into my device and poke around the directory structure. I think it’s at least educational to see how your app is deployed to the device. I would have to believe that Apple developers get an environment more like this when they are working on iOS or iOS apps. It’d be kind of cool if we could too.
In my next article I’m hoping to write about cocos2d and my experience with using it over my own framework that I’ve been using over the last 2 years. I’m also hoping to discuss my solution for getting it all to play nicely in a Universal app.
P.S. Jiggle Balls HD is FREE all this weekend (assuming the change I made 6 hours ago ever takes affect — something’s up with the app store)