Installing older iOS for device testing - iphone

It used to be simpler to test versions of the iOS that were older than the currently shipping iOS. I can't seem to find a way to do it now that Apple calls home when trying to restore a device. If the device is eligible for a more recent iOS, iTunes and XCode 4.5 force you to upgrade the iOS.
In my case, I have an iPhone 4 that I want to test with iOS 5.1.1. I have the .ipsw file that actually was used on this device. iTunes generates an "not eligible" error when I try and force the restore from this .ipsw. XCode 4.5 does also. My understanding is that Apple is no longer signing 5.1.1 and my device is eligible for iOS 6, the reason for the error.
In the past, I had enough devices laying around that I shelved and used for testing. I don't have that luxury now.
Two questions:
1. Is there any way to install an older iOS on device that is eligible for a newer iOS?
2. How are you testing on older iOS versions?
I welcome suggestions

No, you cannot install an older iOS unless you are jailbroken and your SHSH blobs were stored with Cydia or TinyUmbrella.
Most people use the simulator, or older devices.
https://developer.apple.com/downloads/index.action
can be used to find old xcodes and ios SDKs.

Related

Supporting old iOS versions and devices

I need an iOS app to be compatible with previous iOS versions, at least from 4.0, and also with prior devices (iPhone 4S, 4, 3GS... and likely all iPad devices). I found some posts dealing with the iOS versions backwards compatibility that already have some years (for example, How to build against older iOS versions with the latest Xcode downloads?), and I donĀ“t know if this is deprecated or it still is the way to proceed, at least concerning the app building. Regarding programming issues, I guess I should check the documentation to know if the SDK features/libraries/frameworks I want to use are supported by all the iOS versions I want to be compatible... And having such information, how could I check programmatically the iOS version the device is running, in order to provide a certain feature or not?
On the other hand, regarding iOS versions and devices running them: could I find any Apple document listing which iOS versions supports each existing device? What hardware-dependent issues should I take into account while developing the app?
Thanks so much
Edit: Target architecture(s) is the only hardware consideration I've to take into account? Knowing that, for example, an iPhone 3GS is able to run, and is running, iOS 6.1.3, can I assume that the device will then support all the SDK's features, or I still need to check for the availability of such features depending on the device?
with the newest xcode version that supports iOS 6.0, you cannot develope for devices with iOS < 4.3 (lowest base SDK), and also the version that supports iOS 4.0 doesn't support iOS 6.0. For older devices you have to set the Architectures to armv6 armv7 in you project-settings tab "Build Settings".
for checking the iOS Version running, just check the available posts here at stack, you will find one that fits for you ;)
All in one I would set the base SDK to 5.1 because it's the last that can be used by iPad 1 and iPod touch 3. gen. and long enought available so everyone should have the latest update.
Older devices can have only iOS 4.2.x and are not supported by current xcode (4.6.2 (4H1003)).
iOS Support Matrix v2.4
This version is updated and includes iOS 7.
Link: http://www.iossupportmatrix.com
There is a great infographic that shows what versions of iOS are supported by which devices at http://iossupportmatrix.com.

Testing on iOS 3.1 simulator

iOS project. Base SDK 4.2, deployment target 3.0. A customer is complaining about an issue on iOS 3.1 (he has an old device).
I tried installing Xcode 3.2.3 - the oldest there is for download. It does not offer iOS 3.1 as a test target. Does anyone know how can I enable older versions of iOS on the simulator?
The box also has Xcode 4 (in a different folder). Could it be the case that they're sharing the iOS simulator, and the backwards-incompatible one from Xcode 4 is getting in the way?
There is no substitute for testing on a real device.
I've had a problem with my iPod touch (3rd gen, ios 5.0) crashing in one app. Every day. The dev won't buy, beg, borrow or steal a real iPod touch to test it on so he can fix it. As a user this is extremely frustrating.
EDIT:
The final versions of Xcode with the iPhone SDK, as it was called then, are not available from Apple's download page, but the direct links still work.
The direct links can be found at:
http://chris-fletcher.com/2010/08/28/howto-install-iphone-sdk-2-0-3-1-for-xcode-3-2/
If you use the latest Xcode, you can install device debugging support via the Downloads->Components section, a la: http://cl.ly/3U1V1G3W2p2E1G29342e
http://iphonesdkdev.blogspot.com/2010/04/old-versions-of-iphone-sdk.html
Some of the links are dead though. Apple is removing those old files little by little. Get them while supplies last.

If my build targets iOS 5.0, what happens when older OS versions try to download/run it?

I recently submitted an app to the app store. My iOS version target is 5.0.
What will happen when users with older iOS versions try download my app?
If users download it from iTunes on their computer, it will download but they won't be able to sync it to their iDevices. But if they try to download it directly from their iDevice, the device will pop up an alert, saying that they won't be able to download it.
But, most app right now has lower iOS version target for broader audience.
When users of an older iOS try to buy/install it they will get an alert that says they need iOS5 to run this app....and not be able to purchase
If you want to actually test this, you can change the target build for your app and run it in a simulator/test phone to see what happens.
If there is anything that is in your iPhone app that is iOS 5 only, there should be some problems. ARC and weak references are compatible with iOS 4.x, but not iOS 3.x.
EDIT: Make sure that the minimum OS required is not also set to iOS 5, because then it will not run on any lower OS version.

How do you test against a specific version when you don't have a device with the version?

I have 3.1.2 device and have used 3.1.2 as minimum iOS requirement for my app.
Now I want to set the minimum iOS requirement for my app to 4.0.
The problem is it seems there's no way I can upgrade my device to 4.0 without jailbreaking.
(and it seems if I jailbreak my device, I won't be able to test IAP)
Hence, I can only update the device's iOS to 5.0, and I won't have 4.0 device to test against.
What do you do when you are in such a situation?
Yes that is a problem, i've faced my self. I still own an iPhone 3G which is still running 4.2.1 and I can down grade it to iOS 4.0 My iPhone 3GS and iPhone 4S are stuck on iOS 5.
I've used testflight to for an open beta to get 20 test with different iOS version, which if it is possible can help a bit. But getting and iPhone 3G or second gen iPod touch might help.
You can install all version of the iOS (up to the one they support) on them since there is real install check done. You might need a tool to finish the installation if it hangs on the final step, but there is no need to jailbreak them.
You may need to buy an old used iOS device running the old OS version which you want to test against. You could sell your other test device with an unusable OS version to help pay for it.

What version of IOS to use when upload app to appstore?

I am just about to upload my first app to appstore :-)
I have tested the app on an iPhone 3G (IOS 4.2) and my iPhone 4. What version of code should i upload and:
If i upload 4.2 to support iPhone 3G, will that cause any problems with newer phones?
If i upload the latest version of the code i guess iPhone 3G's will not be able to run it?
Is it worth while to still support iPhone 3G?
Can someone please recommend me what to do?
If you upload a version that the 3G does not support, then all 3G users will not be able to download the app.
If you upload a version that is supported by 3G, then only if the users have updated their firmware will be able to use the app.
In other words, the role of thumb is: upload the one that is tested on the latest firmware, but can be launched from as many firmware version as possible.
That might mean to just upload the one that is tested on the least firmware possible, but be careful because newer firmware versions might stop supporting certain APIs that you might have used, and then all newer (potential) customers will be locked out of your app.
If i upload 4.2 to support iPhone 3G, will that cause any problems with newer phones?
No.
If i upload the latest version of the code i guess iPhone 3G's will not be able to run it?
You need to compile for arm6 in addition to arm7 architecture.
Is it worth while to still support iPhone 3G?
That's a matter of opinion. This there any requirement for you specific app that requires a iPhone 3GS?
Choosing the latest ios as the deployment version is bad idea. iOS 4.3 isn't supported by Verizon devices, which means that you will lose a big portion of US users.
I believe most of apple's apps are using "iOS 3.1" as the deployment version, and i would recommend choosing the this as the lowest supported version.
iOS 3.1 is the last version supported by the original iphone, which guarantees that all users can use your app. Note it's not enougth to just pick 3.1 as the deployment version. you will have to test it with a REAL 3.1 firmware. There are a few guides on downgrading your iphone to 3.1, which is helpful for testing (such as http://lifehacker.com/5572003/how-to-downgrade-your-iphone-3g%5Bs%5D-from-ios-4-to-ios-313)