The latest version that ever ran on the iPhone 3G was iOS 4.2.1, but even though iOS 4 brought multi-tasking to the platform the iPhone 3G never got that. The iPhone 3G had been introduced in June 2008 with 16 and 8 GB capacities. Of these the 16 GB was discontinued after 1 year while Apple kept the 8 GB model around as the cheaper iPhone. This was discontinued on June 4, 2010 when the iPhone 3GS took its place as the “cheap one” while the iPhone 4 became the “current model”.
Long story short: The iPhone 3G has been discontinued 2 years ago. But there is also a technical reason why 2012 will be the final nail in the coffin that buries the iPhone 3G: The deprecation of armv6.
The discontinuation of support for armv6 has been already a year in the making. In Xcode 4.3 Apple had already removed the armv6 setting from the ARCHS_STANDARD_32_BIT, that was strike one. I argue by accident because at that time you still had to submit so-called “fat binaries” that have compiled code for armv6 and armv7 in the same file. From that point on you had to manually add the armv6 setting to the Architectures in Build Settings.
Apple didn’t bother with this oversight because there’s a simple workaround and since armv6 deprecation was on their roadmap for a long time. And everybody had to remember to add this setting for any project or sub-project to be able to build app store legal apps.
The second strike was with the 7th and final preview version of Xcode 4.4, build 4F243, where – another incident of overzealousness? – the ARClite library was missing the armv6 binary causing the following linker warning:
ld: warning: ignoring file /Applications/Xcode44-DP7.app/Contents/Developer/Toolchains/ XcodeDefault.xctoolchain/usr/lib/arc/libarclite_iphoneos.a, file was built for archive which is not the architecture being linked (armv6): /Applications/Xcode44-DP7.app/Contents/Developer/Toolchains/ XcodeDefault.xctoolchain/usr/lib/arc/libarclite_iphoneos.a
You would see this warning if your project contained ARC either in the main project or in any of its sup-projects because this is the situation where Xcode needs to add the ARC Lite static library. I guess that this library is needed to support ARC on iOS 4 devices.
This was an actual bug. Fortunately Apple saw the error in their ways and fixed this in the released version of Xcode 4.4, build 4F250 which is the one that’s now on the app store. If they hadn’t done so then there would have been no way to build for armv6 on Mountain Lion because Xcode 4.3 no longer runs on this. Everybody is anxious to upgrade their shiny new Macs and thus this would have been a major pain in the backside.
There is a support document which outlines the third strike:
As of 4.5, Xcode no longer supports building armv6 code, or working with armv6 devices and does not support below iOS 4.3.
As they say, “three strikes and you’re out”.
What are those armv6 and armv7 devices anyway?
I find it hard to remember myself which devices were able to support the armv6 and armv7 instruction sets. Especially because some devices actually support both, namely all armv7 CPUs are backwards compatible. But of course if your app binary has both versions compiled in then the armv7 CPUs will only use the variant optimized for them.
Fortunately there is the iTunes Connect Developer Guide: Appendix C: Device Compatibility Matrix.
This tells us that that these are all the devices that didn’t support armv7:
- iPod Touch 1st Gen (max iOS 3.1.3)
- iPod Touch 2nd Gen (max iOS 4.2.1)
- iPhone (max iOS 3.1.3)
- iPhone 3G (max iOS 4.2.1)
All newer devices support armv7 and can also run iOS 5. So by the time iOS 6 ships (and you will switch to Xcode 4.5) you have no reason to keep supporting iOS 4, even though technically you could still target iPod Touch 3rd Gen and iPhone 3GS running iOS as low as 4.3. But who in his right mind doesn’t use the iCloud-sweetness available for free with iOS 5?
Won’t we miss out on many existing iPhones that are now no longer supported?
Well, Apple does not publish exact numbers of how many iPhone 3G had been sold in comparison with other devices. But out of scientific curiosity let’s do a rough estimate. Apple did publish the worldwide iPhone sales by fiscal quarter, with the year and first quarter starting around September 25th.
Those are Apple’s worldwide iPhone sales by fiscal quarters.
So the iPhone 3G was the main iPhone roughly from Q1 2008 until Q4 2009. This is really REALLY rough estimating, but we get an appreciation for the orders of magnitude in difference. This pretends that there never was a cheaper “free” model and only assumes that Q1-Q4 capture one model. You can see that in some quarters the was a reduction in sales as people anticipated the next iPhone.
- iPhone (until Q4 2008): 13 Mio
- iPhone 3G (until Q4 2009): 21 Mio
- iPhone 3GS (until Q4 2010): 40 Mio
- iPhone 4 (until Q4 2011): 72 Mio
- iPhone 4S (until Q4 2012): probably over 124 Mio
43 Million armv6 iPhones versus 236 Million armv7 iPhones. So by my estimate of all iPhones that would have been sold by Fall 2012 the armv6 models account for 15%. This is a best case number.
BUT, assuming that most people are getting a new iPhone every 2 years with contract we can assume that only a fraction of these devices is still in use. The latest date that you could have gotten a subsidized iPhone 3G was in June 2010, over two years ago. Though I don’t see any good reason why somebody would have preferred the 3G over the then-new 3GS model.
The iPhone 3G holds a special place in our hearts since it was the second generation of a revolutionary device and the first that added high speed cellular data. But as technology progresses there must come a time when the iPhone 3G has well deserved its retirement.
Apple thinks so too and has sealed its fate in three strikes as outlined above. iOS 6 will no longer run on armv6 hardware and also Xcode 4.5 will no longer be able to build for iPhone 3G. Retiring support for it means good riddance to the last iOS device that didn’t support multi-tasking.
May the iPhone 3G rest in piece.