iphone - descargar - xcode for windows
Xcode 5 e iOS 7: arquitectura y arquitecturas válidas (6)
Estoy comenzando un nuevo proyecto en Xcode 5. Deseo desarrollar una aplicación usando iOS SDK 7
pero con un destino de implementación iOS 5.0
. Tan pronto como creo un nuevo proyecto en Xcode y trato de cambiar el destino de implementación a 5.0, recibo este mensaje:
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.
Así que cambió las arquitecturas a Standard
(sin 64 bits). Compilo, corro pero realmente no entiendo lo que sucedió.
¿Cuál es la diferencia entre las configuraciones de Valid architectures
y Valid architectures
en la configuración de compilación del proyecto Xcode?
Si configuro Architectures
para excluir 64 bits, ¿qué sucede cuando ejecuto mi aplicación en el iPhone de 64 bits o en el Simulador de iOS (sé que funciona, solo tengo curiosidad por saber qué sucede debajo)?
¿Puedes explicar el gran desorden con la nueva arquitectura de 64 bits?
Cuando configura 64 bits, el binario resultante es un binario "gordo", que contiene las tres imágenes de Mach-O incluidas con un encabezado delgado. Puedes ver eso usando otool o jtool. Puede ver algunos binarios binarios incluidos como parte del iOS SDK SDK, por ejemplo AVFoundation Framework, de la siguiente manera:
% 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 binario en sí, usa el conjunto de instrucciones de bit ARM64, que es (en su mayoría compatible con 32 bits, pero) un conjunto de instrucciones totalmente diferente. Esto es especialmente importante para el programa de gráficos (usando instrucciones y registros NEON). Del mismo modo, la CPU tiene más registros, lo que tiene un gran impacto en la velocidad del programa. 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 pruebas de evaluación comparativa hasta ahora han indicado claramente que sí lo hace.
Al usar otool -tV se volcará el ensamblaje (si tiene XCode 5 y posterior), y luego podrá ver las diferencias de configuración de instrucciones para usted. La mayoría de los desarrolladores (aunque no todos) seguirán siendo agnósticos a los cambios, ya que en su mayoría no afectan directamente a Obj-C (sin perjuicio de las API CG *), y tienen que hacer más con el manejo de punteros de bajo nivel. El compilador trabajará su magia y optimizaciones.
Establezca la arquitectura en la configuración de construcción en Arquitecturas estándar (armv7, armv7s)
El iPhone 5S funciona con un procesador A7 de 64 bits. De Apple Docs
Xcode puede construir su aplicación con ambos binarios de 32 bits y 64 bits incluidos. Este binario combinado requiere un objetivo de implementación mínimo de iOS 7 o posterior.
Nota: Una versión futura de Xcode le permitirá crear una única aplicación que sea compatible con el tiempo de ejecución de 32 bits en iOS 6 y posterior, y que sea compatible con el tiempo de ejecución de 64 bits en iOS 7.
De la documentación lo que entendí es
- Xcode puede crear binarios de 64 bits de 32 bits para una sola aplicación, pero el objetivo de despliegue debería ser iOS7. Dicen que en el futuro será iOS 6.0
- El binario 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 un binario de 64 bits para iOS 5.1.1 en adelante.
Xcode 5.0.1 puede construir su aplicación con ambos binarios de 32 bits y 64 bits incluidos. Este binario combinado requiere un objetivo de implementación mínimo de iOS 5.1.1 o posterior. El binario de 64 bits solo se ejecuta en dispositivos de 64 bits con iOS 7.0.3 y versiones posteriores.
Actualización (Xcode 5.1)
Xcode 5.1 realizó cambios significativos en la sección de arquitectura. Esta answer será un seguimiento para usted. answer
Mi comprensión de Apple Docs.
- ¿Qué es Arquitecturas (ARCHS) en las configuraciones de construcción de Xcode?
- Especifica la / s arquitectura / s a las que se dirige el binario. Cuando se especifica más de una arquitectura, el binario generado puede contener código objeto para cada una de las arquitecturas especificadas.
¿Qué son las arquitecturas válidas (VALID_ARCHS) en las configuraciones de construcción de Xcode?
- Especifica la arquitectura / s para las cuales el binario puede ser CONSTRUIDO .
- Durante el proceso de compilación, esta lista se cruza con ARCHS y la lista resultante especifica las arquitecturas en las que se puede ejecutar el binario.
Ejemplo: - Un proyecto de iOS tiene las siguientes configuraciones de construcción en Xcode.
- ARCHS = armv7 armv7s
- VALID_ARCHS = armv7 armv7s arm64
- En este caso, se creará binario para las arquitecturas armv7 armv7s arm64. Pero el mismo binario se ejecutará en ONLY ARCHS = armv7 armv7s.
No necesita limitar su compilador solo a armv7 y armv7s eliminando la configuración de arm64 de las arquitecturas compatibles. Solo necesita establecer la configuración de destino de Implementación en 5.1.1
Nota importante: no puede establecer el objetivo de implementación en 5.1.1 en la sección Configuraciones de compilación porque es desplegable solo con valores fijos. Pero puede configurarlo fácilmente en 5.1.1 en la sección General de la configuración de la aplicación simplemente escribiendo el valor en el campo de texto.
Solución simple:
Objetivos -> Configuraciones de compilación -> Opciones de compilación -> Activar código de bits -> No
Funciona en el dispositivo con iOS 9.3.3