Poll: Which iOS version do you require?

28 points by lacker ↗ HN
Each iOS app has a minimum iOS version that's required. You can see this on iTunes in the left column. For example, foursquare requires iOS 4.0:

http://itunes.apple.com/us/app/foursquare/id306934924?mt=8

If you're an iOS developer, which version do you require for your apps? If it's different for different apps, just pick the most common one.

36 comments

[ 4.0 ms ] story [ 37.1 ms ] thread
According to Bump's statistics from Jan 2011, 90% of all iOS devices run iOS 4.x. We decided to target 3.1.3, because while using 4.0 features would make development a bit quicker, we calculated that additional 10% (it was a bit more back then in favor of 3.1.3) is still worth it.

http://www.quora.com/What-proportion-of-all-iPhone-owners-us...

6 months later I've seen 95%+ @ greater than 4.0 from several different apps.
Do you think anybody still on 3.x will actually spend money on random apps for their phone, that aren't backed by some massive marketing campaign and/or network effects? (Obviously, if you're working on such an app, my thinking might not apply ;)

It's a genuine question, even though it sounds rhetorical. The same applies to people still using pre-3GS devices.

I'm working on the assumption that these people simply won't spend (much) money on apps, and that the effort involved in supporting older devices and OSs won't ever be repaid. If it's going to take you even one day, probably not worth bothering. iOS development is a crapshoot enough, without your spending time trying to support a wider range of devices. The longer you spend coding support for older devices, the smaller the percentage of the market they will be by the time you release.

(This is particularly true for OpenGL stuff, but I imagine it goes for Cocoa as well.)

It is a very good question indeed. And the answer is - yes, I do think so (actually I did 1 year ago, because now the 3.x market share is close to nil). Many 3G owners do wonders to downgrade back to 3.x for performance reasons. And they do spend money.

Consider European markets where costs to upgrade iPhone 3G to 3GS/4G are much more than $200.

I was working with a large retailer to develop a free iOS app. For the initial release, they wanted to target the widest number of users that they could, so our requirements were 3.1+ only. We included a bunch of analytics to track use and client statistics.

After being live for 45 days, it has around 50,000 users total at this point. Of those 50,000 users, less than 2% (817) were using pre-4.0 devices.

At that point, it was easy to convince them to abandon 3.x support for the next version, which will greatly simplify a lot things for us. I'm anxious to see how quickly 5.0 is adopted once it hits.

I predict it will be adopted even quicker than the 4.x branch, due to new notifications. Much sought after feature. Few months and 4.x market share will probably be close to 3G market share.
I'm interested to know how the people targeting iOS releases other than 4.3, 4.2, and 3.1 actually test on those platforms before release (ignoring the simulator for now — many apps don't work there at all, and it often has subtly different behavior that can cause crashes when running on a device).

The issue here is that Apple specifically blocks restoring to any firmware except the very latest available. Since the iPhone 3GS and iOS 3.0, only the most recent firmware released for that device is allowed to be installed onto the device. And, to be very clear: that doesn't mean no downgrades, it means only the very latest is allowed. And that's even through Xcode's Organizer (which will "helpfully" allow you to try and restore older versions, which will then return an error partially through the restore), as well as iTunes when specifying a custom file to restore with.

Because of that restriction, I'm not sure how any other version can be supported: you have iOS 3.1 on an original iPhone, iOS 4.2 that an iPhone 3G can restore to, and iOS 4.3 on the current models. But other iOS versions don't have devices that can be restored to them. Do you just test in the simulator? Try and keep a device with the older version around, and hope it never needs to be replaced or restored if something goes wrong? I'm just not sure how something like that is managed.

(Note: there is a way around the above restriction, namely, saving Apple's "okay, you can restore to this version" response (often called a SHSH hash) when Apple is currently allowing that device to be restored to a certain version, and then spoofing that same reply later when you want to restore. That's how TinyUmbrella[1] and Cydia's TSS service[2] work, but it's (of course) not supported and won't even be possible as of iOS 5.)

[1]: http://thefirmwareumbrella.blogspot.com/ [2]: http://www.saurik.com/id/12

I'd like to know how other developers go about supporting older firmwares. I, personally, have an iOS 4.3.3 iPad and iOS 3.1 iPod Touch Gen 2. I develop for those devices and make sure the application works on them both.
The cheapest way was to just keep old phones, etc around. I have a 3.1.2 phone, 4.0 iPod touch that can't do multi tasking, and use them when I have to test edge cases.

I don't think it's reasonable to care about <3.1.2 on the phone shaped devices, or <4.0 on iPads

I currently still have a 1g iPod touch so i can still test on the last 3.x release. Otherwise i'd just target 4.x.
I have several devices on multiple firmware versions fir my base testing. Next I will test on friends devices because they are usually a little behind on the firmware updates. Finally, if I am doing something that is especially version specific, I will downgrade devices from 3.1.3 onward.

It all depends on what devices you plan on supporting. If you are doing something advanced with audio or graphics, you may feel that only the later devices are capable of what you want to do, so you only support the latest FW on the latest devices. That makes it an easy choice. If you are doing something significantly more straightforward, like a social networking app, you will probably want the most broad adoption and try to support all devices, meaning supporting 3.1.3.

He simulator is only good to test that thins are laying out properly and working in general. It's not a very good test of device capability or even versions.

I haven't checked yet, but I would be surprised if the latest sdk for v5 even supports building for 3.x versions, given how apple wants to keep pushing people forward.

Finally, you should check Latest stats on original iPhone and iPod touch usage. I am pretty sure that it will fall significantly short below 3GS and 4 usage. That should be part of your decision making on whether or nit it is worth developing for those devices.

There is also: Trying the old version, but accepting their loss when the hardware starts to fail and just saying if it's not simulator based, sorry, you can't support it
(comment deleted)
I don't. I always target the latest firmware, and if the app sees a major version upgrade (1.0->2.0) I just target whichever newest firmware is out.
I basically have a device rotation that basically works like this:

I have the current iPhone. I keep it updated to the latest stable and it's my primary development device.

When significant new beta comes out, I buy a latest gen iPod Touch and install the beta. This becomes my primary development device for all beta builds.

Once the new iOS version is released, I update my iPhone to the latest OS version. At the same time, since Apple allows some overlap, I downgrade the iPod Touch to the latest old version of iOS. At this point, I leave the iPod touch frozen at that iOS version and use it for old compatibility testing.

Support the older rev for a while (with multiple devices, not upgrading, blobs). When apple stops supporting an older device, next major release shifts the target to whatever the minimum iOS was on the next newest device when it shipped (usually just a few revs higher). This way, we support whatever hardware apple supports on every possible iOS. iOS 5 will make this trickier.

Also, if there are significant bugs on apples part in a particular iOS that hamper our app, we'll drop it early.

They've put a chunk of new app features into the API recently. 4.2 especially had great stuff.

Also, the 4.0 style animation is so much easier and less error prone, customers demanding <4.0 compatibility make me cry a bit.

The problem is that Apple somehow thinks their updates are worth charging for. If someone has to update from 3.x to 4.x, the price of your app just went from $.99 to $10.99.
Ahh, you mean iPodTouch updates. Phone and iPad updates are free.
Wow, really? I wonder why people don't update then.
At WWDC, it came out that half of all iPhone owners have never plugged their device back in to their computers after initial set up. In fact, after I got my iPhone, my entire family fallowed suit, and none of them (literally 0 out of 5 people) sync their device, update it, anything. It just not something that they know to care about. Too much of a nuisance, not enough gain.

Wireless updates (announced for iOS 5) should definitely help though.

Sync is the big deal. Sync sucks.
(comment deleted)
And only pre-4.0 iPod Touch updates. iOS 4.0 was the first release after the accounting rule change was implemented.
Can anyone give the main differences between 3.x and 4.x?

E.g. what features and/or improvements make it so apps like Foursquare require 4.0?

I'm pretty sure the big one from a developer's perspective was background tasks.
Blocks.

Although I'm not sure what would happen if you compiled the appropriate parts of http://compiler-rt.llvm.org/ into a 3.x application.

You can use a project called PLBlocks. I've successfully submitted to the App Store with it.
I'm expecting iOS4 to win out simply because that's the lowest iOS available for the iPod Touch 2nd gen! There's a lot of the devices out, and they're cheap but still useable. Especially significant for kid apps.
You mean highest iOS?
Man, I worded that terribly. Better?

The highest iOS the 2nd gen can support is 4.2, but 4 is the lowest with most of the nicer features, and covers 90% of all devices (probably higher % now).

We currently target 3.0 and later, but we will probably move to 4.0+ later this year for all new and updated apps. Our analytics is showing that the bulk of our users are on 4.0, in line with what Bump and others are seeing.
I actively test down to iOS 2.2 and know that my newly released updates continue to work in the field on 2.1 (due to reports from successful installations by users). (I attempt to maintain compatibility with 2.0, but believe I made a mistake with Cydia 1.1.1: Cydia 1.1.2 should fix this.)

That said, I do intend to start requiring iOS 3.1 going forward, due to the drastically decreased user community on 2.x and a killer feature that Apple added in iOS 3.1 (one of the few features added that would ever make me consider this): objc_setAssociatedObject().

On the Build and Analyze podcast, I remember Marco Arment saying something like 3G users will all have to buy new phones in the not distant future because their batteries will have crapped out due to age. Struck me as a wasteful mindset. When my battery goes, I'll buy and fit a new one from eBay. The phone itself is still fine.
I'm going to stick my neck out and say you're probably in the minority vs. number of people not willing to do this due to time/knowledge.