iOS versions have generally had a massively forward adoption rate. I read that 80% of iPhones were on the most modern OS. It looks to me like the lack of support for the 3GS will create a split in adoption of the OS, which will trickle down and create an even larger gap in the purchasing of new iOS devices. I think this split will occur due to the stability of the 3G iPhones.
This is concerning to me due to my company having iOS releases for the enterprise. This means that our customers are purchasing iOS devices just for our app. This also means that we have to be backwards compatible with yet another version of the OS. In code, this is where Macros come in.
I am reminded of the days of Microsoft vs Apple where Microsoft had better backwards compatibility. I think that the use of these devices in the business world will echo the days past and the cheaper device, Android, will be the go to business device.
> "It looks to me like the lack of support for the 3GS will create a split in adoption of the OS"
Sure, but having seen the 3GS usage numbers on my own app (which, granted, is hardly a gold standard of representative demographics), I think this will be a rounding error. Despite Apple selling the devices until relatively recently, there are actually very few out in the wild. A developer can now effectively develop for iPhone 4 as their baseline.
Granted, you might have uniqueness in your demographic that will skew 3GS usage higher than the general population.
> "This also means that we have to be backwards compatible with yet another version of the OS. In code, this is where Macros come in."
Ah, but you can't use macros, since a single binary will have to work on all devices - there aren't multiple binaries built with multiple flags. What you will have is a lot of runtime checks against either the OS version or specific featuresets.
Be prepared to write a whole lot of if ([obj respondsToSelector@selector(...)])
The worst part about this isn't just supporting new features - that part's easy since you can simply test for the presence of necessary bits, mostly with respondsToSelector. The worst part are the undocumented behavior changes in UI components that will break between iOS6 and 7. For example, it looks like there are large implementation changes in UITableView and UITableViewCells. This means you must necessarily test against the version string and branch from that. Annoying at best, code-quality-destroyer at worst.
Why is lack of support for the 3GS any different than iOS 6's lack of support for the 3G? The 3GS came out in _2009_. I'm surprised it supports iOS 6; the 3G can't even run iOS 5.
I am reminded of the days of Microsoft vs Apple where Microsoft had better backwards compatibility. I think that the use of these devices in the business world will echo the days past and the cheaper device, Android, will be the go to business device.