Xcode 4.2 and older iOS devices
If you want to build software using the new default templates on Xcode 4.2, you have some work to do for older devices (anything that can’t run iOS 5).
For some unknown reason, the variable
$(ARCHS_STANDARD_32_BIT), which used to expand to
armv6 armv7 now expands only to
Furthermore, there is a new entry in the default Info.plist which will prevent Xcode from even uploading the binary to your device.
Finally, there are issues with the compiler’s
‘thumbnail generation’ code ‘Thumb code’ generation in Xcode 4.2. You can disable that compiler option for armv6 builds in Xcode.
I have a 2nd generation iPod Touch that I use daily. It runs iOS 4.2.1, the latest it will ever run. This is essentially the same hardware as an iPhone 3G in terms of capabilities.
I also have a 1st gen Touch, but it’s getting used less and less as I target iOS 4 as the earliest capable version. I’m not going to iOS 5 yet because my main device is still iOS 4.
When I create a new project, I use iOS 5 as the SDK and iOS 4.2 as the deployment target. In theory, this allows me to target all devices that can run iOS 4, which includes my beloved Touch.
To make this work properly, you will want to do three things:
- In your Project’s Build Settings, locate the “Architectures” line. It should say
$(ARCHS_STANDARD_32_BIT). Edit it to contain two entries:
- In your Project’s Info.plist, locate the entry for “Required device capabilities” and delete it.
If you expand it, you will see that it contains only
- Bonus! Thanks to @jamesthomson, there are issues with clang-llvm 3.0 on armv6 devices.
In your Project’s Build Settings, locate “Other C flags” and add “-mno-thumb” to the armv6 architecture.
When radar comes back online, I’ll file the bug (which will undoubtedly be marked “Duplicate”)