What should I include in Xcode build settings in "Architectures" section

Rashmi Ranjan mallick picture Rashmi Ranjan mallick · Sep 23, 2014 · Viewed 18.2k times · Source

We were supporting iOS 6 & 7 previously for our universal iOS application (which means we support both iPhone and iPad). Now, with the release of iOS 8, we have to support iOS 6, iOS 7 & iOS 8. Also, we have to extend our targeted device list to support iPhone 6 and iPhone 6 Plus.

Also, we are planning to upgrade to Xcode 6 shortly. Because Apple may anytime mandate the use of Xcode 6 to be able to submit apps to app store.

Keeping all the above points in mind, I am confused what should be my Architecture settings in Xcode build settings. Mainly There are 3 important items under Xcode Architectures settings. Please see the below screenshot.

enter image description here

I have highlighted the 3 important parameters. I want to know what values I should assign to these parameters in order to support all the above. Any help will be greatly appreciated. I am confused a bit with this.

Also, I would like to know if i need to change anything else in order to migrate to Xcode 6 and iOS 8.

Answer

lef picture lef · Sep 27, 2014

In Architectures, you'll be fine with armv7, armv7s, arm64, i386, where i386 is for the Simulator. The rest can be left default values.

UPDATE: It is not required to mention desktop architectures (i386, x86_64) in order to support the build for iOS Simulator. Given Simulator is supported just by including respective ARM architecture. Hence, Architectures are fine if populated just with armv7 armv7s arm64. By observing, since Xcode 6.3 it might even cause build to fail if the setting contains any of the desktop architectures.

Valid architectures can be set individually for each target, Xcode will make intersection of the global Architectures setting with this. If you are not interested, leave it untouched, Xcode will cope with that on its own without problems.

In case your code is not 64bit ready, remove arm64 from Architectures. App will still run on iOS 8 and all the recent 64bit devices.

As for the Build Active Architecture Only, I recommend setting it to No. This property affects what Xcode decides to build e.g. based on currently connected device. But it may happen problems arise: you may end-up with some targets are built for different architecture, resulting in linking errors. Nevertheless, if you would like to use the pros of the feature, set it to Yes just for Debug or some sort of configuration used only for testing, not the final release. Xcode will build all binaries only for one of all the architectures you have set in Architectures x Valid then.