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

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.

Related

Installing older iOS for device testing

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.

Will iphone 5.1 deployment target reach all iphones upon release of ios 6?

I am new to iphone app development and am wondering which deployment target to use (as ios 6 approaches). My app is simple (http web service interaction, map) and my natural inclination is to target 3.1 to maximize potential use. However, I understand that ios 6 will soon be available to all iphones and I presume it will be widely adopted.
So, if I target 5.1 today, will my app be available to most, if not all, iphone users once ios 6 is released?
Right now, requiring a minimum of 5.1 is a bit bold in my opinion, but that depends on your app. It is customary to support the current version and the previous major release.
If you want to expand your target, you may considering going back to 4.3 or even all the way down to 4.0. But 3.x is practically obsolete. but:
Warning: Don't target a version you can not test on device. If you don't have a device running 4.0, testing your app only on the 4.0 simulator is not recommended (although perhaps it is OK. No assurance).
The iPhone 3G can run up to iOS 4.2.
All other phones and iPads can run the latest OS (5.1.1)
Not sure about iPod Touch devices but 3rd (and 4th) gen. should run iOS 5.
You can use 5.1.1 as deployment target if it is available to your menu.. if not 5.1 is best for your needs for now.
This way all (Who have not updated to IOS 6) can use your app...
Best luck for app development.

How to test iOS 5.0 app on Xcode 4.2?

I can change my deployment target from 3.0 to 4.3 and test that my application is compatible with all these versions but how can I test if my application is compatible with all versions including iOS 5.0? Any idea regarding the same? Also note that I have iPhone 3GS with iOS 4.0.2 and need to test in iOS 5.0. Hope to get a good help. Thanks.
Eventually, you'll need to get a device that has iOS 5 installed. Without that, you can only test this in the iOS 5 simulator.
Also note that changing the deployment target is not enough to test if your app is compatible with that OS version. Basically, this just means that you promise that it'll run from this version upwards, but it doesn't enforce that you don't use any APIs that might not be available there.
I you wanna do it properly, you will have to get every device there is, with every version you want to support ... that is, imho, overkill. I just test my Apps on the 4.3 and 5.0 Simulator in XCode and on my 5.0 iPhone 4. And have not had any problems with that 'til now.
BTW you should update your 3GS to 5.0.1.
To test in the simulator with iOS5, you can set the OS version with the Version submenu of the simulator's Hardware menu.

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)

Best practices for iPhone apps on multiple OS versions

I'm developing an app that uses iOS4 features (like MFMessageComposeViewController), but I want to support iOS 3.1.x as well. I know how to do that in code and build settings, but it's getting hard to find devices to test on--I've upgraded my phone and so have most of my friends. And the simulator with XCode 3.2 doesn't support simulating 3.1 as far as I can tell.
When my apps are raking in money hand over fist, of course I'll invest in multiple devices to test different OS and hardware, but I'm wondering what people do when they're starting out and resources are limited. For example, to test an SMS-capable device with 3.1.x, I'd need not only a spare device, but I'd have to pay for a phone service plan as well.
A couple of things I've considered in the meantime:
Install an older version of XCode and use that simulator for 3.1 testing
Buy a used iPod touch and install OS 3.1 (but couldn't test SMS/GPS)
Other ideas? I'd love to hear what other people are doing.
What I do is keep one of each model of iPhone and iPod touch and install the latest version of the OS that runs on it. So I have iPhone 2G and iPod touch 1G with OS 3.1.3; iPhone 3GS, iPhone 4, and iPod touch 2G with OS 4.0; and a WiFi iPad with OS 3.2. Only one of the phones has cell phone service.
As for my builds, I build with SDK 4.0 and set OS 3.1.3 as the earliest target. If you claim to support a certain OS, you must have tested on the device with that OS.
We have a couple of devices at our startup company, and also have very old iPods. Perhaps you can get some for very little second hand?
OffTopic: I think supporting versions old of an OS when a free update is available shouldn't be done for too long. People need a bit of "help" updating. Must admit that iOS 4 might be an exception though, my iPod doesn't live for long with it installed. :(