Xcode 5 y iOS 7: architecture y architectures válidas

Estoy comenzando un nuevo proyecto en Xcode 5. Quiero desarrollar una aplicación con iOS SDK 7 pero con un objective de implementación iOS 5.0 . Tan pronto como creo un nuevo proyecto en Xcode e bash cambiar el destino de implementación a 5.0, tengo este post:

 Applications including an arm64 slice are not compatible with versions of iOS prior to 6.0 Adjust your Architectures build setting to not include arm64 in order to deploy to releases prior to iOS 6.0. 

Cambió las architectures a Standard (no 64bit). Compilo, funciona pero no entiendo qué acaba de suceder.

¿Cuál es la diferencia entre las Architectures y las configuraciones de Valid architectures en las configuraciones de construcción del proyecto Xcode?
Si establecí Architectures para excluir 64 bits, ¿qué sucede cuando ejecuto mi aplicación en el iPhone de 64 bits o el Simulador de iOS (sé que funciona, solo tengo curiosidad por lo que sucede debajo)?
¿Puedes explicar un gran lío con la nueva architecture de 64 bits?

introduzca la descripción de la imagen aquí

Establezca la architecture en configuration de compilation en architectures estándar (armv7, armv7s)

introduzca la descripción de la imagen aquí

iPhone 5S funciona con un procesador A7 de 64 bits. De apple docs

Xcode puede crear su aplicación con binarys de 32 bits y de 64 bits incluidos. Este binary combinado requiere un objective de implementación mínimo de iOS 7 o posterior.

Nota: una versión futura de Xcode le permitirá crear una sola aplicación que admita el time de ejecución de 32 bits en iOS 6 y posterior, y que sea compatible con el time de ejecución de 64 bits en iOS 7.

De la documentation lo que entendí es

  • Xcode puede crear binarys de 32 bits de 32 bits para una sola aplicación, pero el objective de implementación debe ser iOS7. Dicen que en el futuro será iOS 6.0
  • El binary de 32 bits funcionará bien en el iPhone 5S (procesador de 64 bits).

Actualización (Xcode 5.0.1)
En Xcode 5.0.1 agregaron el soporte para crear binary de 64 bits para iOS 5.1.1 en adelante.

Xcode 5.0.1 puede build su aplicación con binarys de 32 bits y de 64 bits incluidos. Este binary combinado requiere un objective mínimo de implementación de iOS 5.1.1 o posterior. El binary de 64 bits se ejecuta solo en dispositivos de 64 bits con iOS 7.0.3 y versiones posteriores.

Actualización (Xcode 5.1)
Xcode 5.1 realizó un cambio significativo en la sección de architecture. Esta respuesta será un seguimiento para usted. Mira esto

Cuando configura 64 bits, el binary resultante es un binary "Fat", que contiene las tres imágenes de Mach-O incluidas con un encabezado gordo delgado. Puedes ver eso usando otool o jtool. Puede ver algunos files binarys de grasa incluidos como parte del SDK de iOS 7.0, por ejemplo, AVFoundation Framework, así:

 % cd /Developer/Platforms/iPhoneOS.platform/DeviceSupport/7.0\ \(11A465\)/Symbols/System/Library/Frameworks/AVFoundation.framework/ %otool -V -f AVFoundation 9:36 Fat headers fat_magic FAT_MAGIC nfat_arch 3 architecture arm64 # The 64-bit version (A7) cputype CPU_TYPE_ARM64 cpusubtype CPU_SUBTYPE_ARM64_ALL capabilities 0x0 offset 16384 size 2329888 align 2^14 (16384) architecture armv7 # A5X - packaged after the arm64version cputype CPU_TYPE_ARM cpusubtype CPU_SUBTYPE_ARM_V7 capabilities 0x0 offset 2359296 size 2046336 align 2^14 (16384) architecture armv7s # A6 - packaged after the armv7 version cputype CPU_TYPE_ARM cpusubtype CPU_SUBTYPE_ARM_V7S capabilities 0x0 offset 4407296 size 2046176 align 2^14 (16384) 

En cuanto al binary, utiliza el set de instrucciones de bit ARM64, que es (en su mayoría compatible con 32 bits, pero) un set de instrucciones totalmente diferente. Esto es especialmente importante para el progtwig de charts (usando las instrucciones y loggings de NEON). Del mismo modo, la CPU tiene más loggings, lo que tiene un gran impacto en la velocidad del progtwig. Hay una discusión interesante en http://blogs.barrons.com/techtraderdaily/2013/09/19/apple-the-64-bit-question/?mod=yahoobarrons sobre si esto hace una diferencia o no; Las testings de benchmarking hasta ahora han indicado claramente que sí.

Usando otool -tV volcará el ensamblaje (si tiene XCode 5 y posterior), y luego podrá ver las diferencias del set de instrucciones para usted. La mayoría (pero no todos) los desarrolladores permanecerán agnósticos a los cambios, ya que en su mayor parte no afectan directamente a Obj-C (CG * APIs), y tienen que hacer más con el event handling pointers de bajo nivel. El comstackdor trabajará su magia y optimizaciones.

Mi comprensión de Apple Docs.

  • ¿Qué es Architectures (ARCHS) en Xcode build-settings?
    • Especifica la architecture / s a ​​la que se asigna el binary. Cuando se especifica más de una architecture, el binary generado puede contener un código de object para cada una de las architectures especificadas.
  • ¿Qué son las architectures válidas (VALID_ARCHS) en la configuration de compilation Xcode?

    • Especifica la architecture / s para la cual el binary puede estar CONSTRUIDO .
    • Durante el process de compilation, esta list se cruza con ARCHS y la list resultante especifica las architectures en las que se puede ejecutar el binary.
  • Ejemplo: – Un proyecto iOS tiene las siguientes configuraciones de compilation en Xcode.

    • ARCHS = armv7 armv7s
    • VALID_ARCHS = armv7 armv7s arm64
    • En este caso, el binary se buildá para las architectures armv7 armv7s arm64. Pero el mismo file binary se ejecutará SÓLO ARCHS = armv7 armv7s.

No necesita limitar su comstackdor solo a armv7 y armv7s eliminando la configuration de arm64 de las architectures admitidas. Solo necesita establecer la configuration de destino de implementación en 5.1.1.

Nota importante: no puede establecer el destino de deployment en 5.1.1 en la sección Configuración de compilation porque es solo desplegable con valores fijos. Pero puede configurarlo fácilmente en 5.1.1 en la sección General de configuration de la aplicación simplemente escribiendo el valor en el campo de text.

Solución simple:

Destinos -> Configuración de compilation -> Opciones de compilation -> Activar código de bits -> No

Funciona en el dispositivo con iOS 9.3.3

Ninguna de las respuestas funcionó y luego me olvidé de establecer el objective mínimo de implementación que se puede encontrar en Proyecto -> General -> Información de implementación -> Destino de implementación -> 8.0

Ejemplo