Downgrade an iPhone for testing purposes - ios

I am wondering if it is possible to downgrade an iPhone to older versions of iOS even when the firmware is not signed by Apple.
I am a developer and I might need to install iOS6/7 on my iPhone, which currently has iOS8.
Is there a way to do that?

No, if you had an older device and saved the SHSH blobs when Apple were still signing the firmware then you would be able to.
I keep an old device for each major version of the OS from 4 upwards, and you get get them on ebay for quite cheap. iOS 6 is a very small percentage of the overall market now, so unless you are needing to support it for a specific reason it would be best to drop support.

If anyone is still interested in this in 2017, you can save your SHSH2 blobs by following this guide & then using Prometheus from Tihmstar.

Related

What are the *real* requirements for iOS development

As far as I can see, the requirements to develop for any iOS device are:
1. Own a Mac computer that runs the latest version operating system.
2. Register with Apple to be an iOS developer for $99.00 + tax, annually.
3. Own an iOS device that runs the latest iOS operating system your application will support. For a professional iOS developer, that means the latest operating system out.
Am I wrong?
If so, where? I've just bought a brand new iMac and I'm looking for a used iPhone. I want to make sure I buy one that will allow me to develop iOS in the latest version.
Yes, I worked at a company doing iOS development and I had to do those three things (They handled the registration), and nothing more. You don't need a physical phone either though, XCode comes with a pretty good simulator. When working I almost always used the simulator, occasionally pulling the real device for touch/UI testing. It's still important to check functionality in real life if you have a nontrivial UI, since it's hard to know how the UI "feels".
You need the latest version of Xcode (requirements for Xcode 10 can be found in this post). Having a relatively up to date Mac usually does the trick.
You need an Apple Developer account - $99 / year for personal account or $299 / year for enterprise account.
You do not technically need any iOS devices to do iOS development and releases; however, the simulator does not have all the functionality a real device has. So depending on your features, it may be required. Also, some bugs only show up on certain devices, so it’s always good to test on as many real world devices as possible. For more details on the capabilities of the iOS Simulator, check here.

Release an exlusive ios5 version of my app

I recently found my app doesn't work on iOS 5 and I have a few users who have asked that I release an older version that works on iOS5. One of them sent me this link http://news.softpedia.com/news/Apple-Enables-Pre-iOS-7-Downloads-Offers-Old-App-Versions-When-Necessary-383663.shtml Is there any way to release two versions of my app? One for ios6+ and one for ios5?
Apple does not provide a way to do this, but there is a way to do it yourself if you REALLY want to.
You have to create a new app id and name, (eg: MyApp for iOS 5). Then you have to set the deployment target of your iOS 5 app to iOS 5. Of course, someone with iOS 6 or 7 could also install it, so you might want to detect the the system version (via UIDevice) and offer to take them to the app store to get the newer version. You'll end up with two apps in the app store and your users will have to figure out which one is the best one for them.
You're probably better off trying to get your existing app to work on iOS 5 and fix whatever issues you're encountering with that OS (unless you're using autolayout--which is not supported on iOS 5 and would mean you'd likely have to re-do a lot of your UI for that OS version).
That said, there's a diminishing return on investment to support older versions of iOS. Most people update to the latest version of iOS pretty quickly and the number of users stuck with an old version of the OS who are unable to upgrade is going to steadily shrink.

What factors should be taken into consideration when deciding on a version of iOS to develop for?

I'm currently in the planning stages of developing an iOS app, and I need to decide what versions to support. This is my first app, and I'm leaning towards iOS 5. The app will be pulling most data from the web and won't be very processor intensive. My main concern is that if I develop for iOS 5 or 6 some individuals won't be able to use it. So what factors should be taken into consideration when deciding on this?
Apple has dropped the iOS 4 simulator from any version of Xcode used on Mountain Lion and is likely about to drop iOS 4 support entirely. That's speculation but based on the facts that:
iOS 4 will probably be almost two years old whenever iOS 6 comes out;
iOS 4.3 dropped support for ARMv6 devices, so continuing to allow builds for pre-4.3 adds a significant maintenance cost to the developer tools;
iOS 4 has lesser support for automatic reference counting, which is now pretty much a fundamental feature.
These things aren't announced in advance, someone will just flip the switch one day.
I'd also argue that if you're new to it then iOS 4 is worth avoiding because it lacks:
story boards; and
a built-in JSON parser.
The former is an easier way to design the user interface and the latter is probably what you're going to want for decoding your web results, statistically speaking.
So I'd vote iOS 5.
You should develop for the lowest version possible while taking into account performance requirements and any necessary features that may be present in newer versions. If you want to use iOS5 and 6 features but they aren't necessary to the base line functionality of your app you can still target 4 and just do conditional checks against those features to see if they are available to you.
One of the main reasons you would purposely choose a higher version would be to intentionally leave out devices that won't support it(iPhone 3g or lower and iPad 1st gen)
1) Do you need to support earlier versions of iOS? If you do, you have to pay attention to NOT use the API's that were realeased before your deployment target (aka the lower version you're going to support).
2) If you don't need/want to support earlier versions, Apple says that you should always target the higher iOS version, so you can use the most recent APIs... There are some stuff that you just can't do using older APIs.
What devices do you want your app to run on? If you want your app to run on older devices, this is going to effect what iOS you develop for.
Also, here is a chart with iOS version usage statistics. This will be useful in deciding what to support and what to ignore. iOS Version Usage Statistics
It is true that a number of users will not be fully up-to-date on the current version of iOS. However, that number is very small. The typical user will not immediately upgrade to newest version, but they will usually transition within 1 month.
The users who do not upgrade are very specific. Jailbroken users are the largest community I can think of that will have to typically wait before they can upgrade their iOS version. Other users would be those with older devices such as the iPhone 2g and the 3g, which aren't supported by new versions of iOS.
With this is mind, it is recommended to always program for the highest version number. That code will be the most maintained and the most lasting. Programming for lower versions typically involves many difficult work arounds that are easily accomplished in newer versions of iOS. Also, anytime a new version comes out (think about iOS 7, 8, 22?), you will have to make sure your legacy code still works on the new version. This means you will need access to a device with that version installed.
All in all, the majority of users will be using the newest version of iOS.

Supporting older iOS Versions

Is there any elegant way to "Cut off" support for older iOS operating system versions? When I first published my app the current version of iOS was in the 3.x range. As time progresses continuing to put out updates that support iOS 3.0, while integrating new features found in 4.0 is getting more and more time consuming. Yet I don't see any way that iTunes or any iDevice will effectively handle this for existing users.
Should I simply upload an update set the minimum iOS to 4.0 (or whatever I choose) and move on?
Most people have already upgraded to iOS 4.x, but there are still a few on iOS 3.x. Leaving those out will surely bring a couple bad App Store reviews (since they won't be able to update, and even worse: if they delete the app they won't be able to download the last 3.x-compatible version of your app), but sometimes it's worth it.
And yes, you'll need to upload a version that was built with "iOS Deployment Target" set to iOS 4.0.
There isn't any really elegant way, but fortunately most users have moved on to at least OS 4.
The best thing you can do is to give lots of notice in your app update notes, letting users know that "the next update will be 4.0+ only" or that "this is the final 3.x supporting version, please make a backup if you need it..."
Communication is key.
A few days before Apple released iOS 7, they start supporting download of older versions of your app. From the article:
For example, a user running iOS 5 can now — for the first time — download an app that supports that version of iOS, even if the latest version of the app is ready for iOS 7. The move, which was highlighted on Reddit, is a significant one as it will give those who have not upgraded their iPad, iPhone or iPod to the most recent versions of iOS access to a lot more apps.
So if I were you, I would do one more update to support older iOS devices for one last time before moving on and setting the deployment target to higher iOS version.
The weird thing is, I don't think we can go back and update the older version of our app. So if we have App 1.0 that supports down to iOS 5, then App 1.1 supports only iOS 7 and above, there is no way to release a 1.0.1 update to fix critical bugs for iOS 5 users.
That's why I said I'd update it one last time before bumping the deployment target. Maybe wait a few weeks and see if your last update has any critical bugs.

Install old iPhone OS on development device

I want to roll back an iPod Touch 2nd gen from the 3.0 OS to the 2.2.1 release so I can test my application on there. The documentation lists the OSes as being available on the dev center, but I'm unable to find them but for the 3.1 beta's. Did Apple just hide them where I didn't look, or are those files not available anymore, and if so, is there an alternative to rolling back the device?
I've found a site that is an interface to Apple's update feed, listing all the available firmwares for both the IPod touch and the IPhone. Using the XCode Organizer it is then possible to load new firmwares unto the development device, however, to downgrade it is necessary to put the device into DFU mode
Same question over here:
http://discussions.apple.com/thread.jspa?messageID=9655781
Basically you have to find the 2.2.1 software yourself. That's why I always keep my copies of firmwares.
The first thing to note is that rolling back to older releases is not officially supported.
Perhaps because of this, downgrading is not a simple point-and-click exercise. I found a guide here. Most of the complexity is around the iPhone baseband firmware which shouldn't be a problem with the iPod touch.
If you Google around you can usually find these.
Apple tries to hide them because they are paid updates (grr).
For iPhone users: http://www.poorlad.com/iCommunity/

Resources