Armv7, armv7s, arm64, i386, x86_64, and armv7armv7s in iOS
Preface
What do armv7, armv7s, arm64, i386, and x86_64 in iOS mean? In Xcode, how do I select?
Introduction
Armv7, armv7s, and arm64 are ARM processor instruction sets.
I386 and x86_64 are mac processor instruction sets.
Which devices are using these instruction sets?
Arm64: iPhone6s | iphone6s plus | iPhone6 | iPhone6 plus | iPhone5S | iPad Air | iPad mini2 (iPad mini with Retina Display) armv7s: iPhone5 | iPhone5C | iPad4 (iPad with Retina Display) armv7: iPhone4 | iPhone4S | iPad | iPad2 | iPad3 (The New iPad) | iPad mini | iPod Touch 3G | iPod Touch4i386 is designed for intel general purpose microprocessor 32-bit processor x86_64. i386 architecture is required for testing 64-bit processor simulators 32-bit processors in x86 architecture, the 64-bit processor test of the simulator requires the x86_64 architecture, the 32-bit processor of the real machine requires the armv7 architecture, or the armv7s architecture. The 64-bit processor of the real machine requires the arm64 architecture.
Selection issues in actual development
Instruction Set related options in Xcode (in Build Setting)
1. ubuntures
Specify the types of instruction sets that can be compiled into a project. The more instruction sets supported, the more data packets that contain multiple instruction sets will be compiled. The larger the Binary Package generated, that is, the ipa package will become larger.
2. Valid ubuntures
Limit the range of instruction sets that may be supported, that is, the Binary Package Types compiled by Xcode are generated from these types, and the package of which instruction set is compiled, the intersection of ubuntures and Valid ubuntures is determined.
3. Build Active snapshot uture Only
Specifies whether to compile only the instruction set supported by the currently connected device.
When the value is set to YES, it is for debugging and compilation speed is faster. It only compiles the current architecture version, and when it is set to no, it compiles all versions. Therefore, you can select yes for debugging and no for release to adapt to different devices.
Example
For example, Valid ubuntures supports the following arm instruction sets: armv7, armv7s, and arm64. The corresponding ubuntures supports the arm Instruction Set versions: armv7s, at this time, Xcode generates only one Binary Package of the armv7s instruction set.
Note: In the Valid ubuntures settings, the default values are Standard ubuntures (armv7 and arm64). If you want to change the values, you can change the values in other.
Using the Standard utres (including 64-bit) (armv7, arm64) parameter, the package contains 32-bit and 64-bit codes, for iPhone 5s (the cpu of iPhone 5s is 64-bit), the 64-bit code package is preferred. The other 32-bit iPhones can only run 32-bit packages, however, the code package that contains two architectures only runs on systems above iOS 6.
And use
Standard ubuntures (armv7, armv7s)Parameter, only 32-bit code is in the playing bag. The iPhone 5S cpu is 64-bit, but it is compatible with 32-bit code, that is, it can run 32-bit code. However, this will reduce the iPhone5s performance. The remaining iPhones have no problem with 32-bit code packages, and 32-bit code packages have almost no restrictions on the system.