Estoy empezando un nuevo proyecto en Xcode 5. Quiero desarrollar aplicaciones utilizando iOS SDK 7 pero con la implementación de destino iOS 5.0. Tan pronto como puedo crear un nuevo proyecto en Xcode y trate de cambiar el destino de la implementación a 5.0, tengo 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.

Cambiado tanto las arquitecturas Standard (no de 64 bits). Me compila, ejecuta, pero realmente no entiendo lo que ha pasado.

¿Cuál es la diferencia entre Architectures y Valid architectures ajustes en el proyecto de Xcode Configuración de generación?
Si me puse Architectures a excluir de 64 bits lo que sucede cuando ejecuto una aplicación de 64 bits del iPhone o del Simulador de iOS (que sé que funciona, estoy solo por curiosidad, ¿qué hapens debajo)?
Puede usted explicar lío grande con la nueva arquitectura de 64 bits?

Xcode 5 y iOS 7: la Arquitectura y las arquitecturas Válidas

6 Comentarios

  1. 122

    Conjunto de la arquitectura en construcción de la configuración de Estándar de la arquitectura armv7,armv7s)

    Xcode 5 y iOS 7: la Arquitectura y las arquitecturas Válidas

    iPhone 5S es alimentado por la A7 de 64 bits del procesador. De apple docs

    Xcode puede construir su aplicación con 32-bit y 64-bits binarios incluidos. Esta combinación binaria requiere un mínimo de destino de la implementación de iOS 7 o posterior.

    Nota: Una futura versión de Xcode te permitirá crear una sola aplicación que admita el de 32 bits en tiempo de ejecución en iOS 6 y posteriores, y que soporta los 64 bits en tiempo de ejecución en iOS 7.

    De la documentación de lo que he entendido es

    • Xcode puede crear tanto de 64 bits de 32 bits binarios para una sola aplicación, pero la
      destino de la implementación debe ser iOS7. Se dice que en el futuro se
      ser iOS 6.0
    • De 32 bits binario funciona bien en el iPhone 5S(procesador de 64 bits).

    Actualización (Xcode 5.0.1)

    En Xcode 5.0.1 se agregó el soporte para crear ejecutable de 64 bits para iOS 5.1.1 en adelante.

    Xcode 5.0.1 puede construir su aplicación con 32-bit y 64-bits binarios incluidos. Esta combinación binaria requiere un mínimo de destino de la implementación de iOS 5.1.1 o posterior. El binario de 64 bits sólo se ejecuta en 64 bits dispositivos con iOS 7.0.3 y más tarde.

    Actualización (Xcode 5.1)

    Xcode 5.1 cambio significativo en la sección de arquitectura. Este respuesta será un seguimiento para usted.
    Marque esta

    • Como he escrito en mi pregunta, ya lo he hecho. Mi pregunta es más acerca de lo que cambia y lo que pasa por debajo.
    • acerca de la edición: Así que es sólo acerca de los binarios incluidos? Con una Arquitectura que se establecen para excluir de 64 bits, el iPhone 5S va a ejecutar binarios de 32 bits?
    • sobre edit: creo que el mínimo despliegue de destino debe ser iOS 6.0, no iOS 7.0. @CrazyYoghurt Sí, como con Mac – máquinas de 64 bits puede ejecutar binarios de 32 bits, de lo contrario una máquina de 64 bits tendría nada para que se ejecute cuando se introdujo por primera vez.
    • actualmente trabajo de la aplicación de 5s y otros dispositivos con iOS7 destino de la implementación debe ser iOS 7.0
    • pero yo quiero que mi aplicación para que sea compatible con iOS ver. >= 5.0
    • A continuación, debe colocar arm64.
    • como @trojanfoe dijo soltar el brazo de 64. Su aplicación va a funcionar en todos los dispositivos
    • última actualización: eso es lo que yo quería saber. Así que con la Arquitectura de conjunto de excluir de 64 bits y Destino de la Implementación de iOS 5.0, Xcode generará sólo de 32 bits binarios, que se ejecuta en todos los dispositivos con iOS ver >= 5.0.
    • ya… usted puede seguir adelante
    • Creo que el OP es de la fecha en que el objetivo mínimo de grasa binarios. Xcode 5.0 explícitamente me dice que debe ser iOS6 o superior, no de 7.
    • Ah, pero los médicos dicen que «Xcode 5.0.1 puede construir su aplicación con 32-bit y 64-bits binarios incluidos. Esta combinación binaria requiere un mínimo de destino de la implementación de iOS 5.1.1 o posterior.» Estoy confundido. Hicieron reducir los requisitos en 5.0.1?
    • «En Xcode 5.0.1 se agregó el soporte para crear ejecutable de 64 bits para iOS 5.1.1 en adelante.» Me gustaría implementar para iPads ejecución 5.1.1 pero eso no es una opción—sólo 5.1. Hay alguna forma de modificar el destino de la implementación?

  2. 7

    Al conjunto de 64 bits el binario resultante es una «Grasa» binario, que contiene los tres Mach-O imágenes liado con una fina capa de grasa de encabezado. Se puede ver que el uso de otool o jtool. Usted puede comprobar fuera de un poco de grasa de los binarios incluidos como parte de la iOS 7.0 SDK, por ejemplo, el AVFoundation Marco, 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)

    Como para el propio binario, se utiliza el ARM64 bits con conjunto de instrucciones, que es (en su mayoría compatible con 32 bits, pero totalmente diferente del conjunto de instrucciones. Esto es especialmente importante para el programa de gráficos (usando NEÓN instrucciones y registros). Del mismo modo, la CPU tiene más registros, lo que hace un impacto en el programa de la velocidad. Hay una interesante discusión en http://blogs.barrons.com/techtraderdaily/2013/09/19/apple-the-64-bit-question/?mod=yahoobarrons sobre si o no todo esto hace una diferencia; evaluación comparativa de las pruebas hasta ahora han indicado claramente que no.

    Utilizando otool -tV de volcado de la asamblea (si usted tiene XCode 5 y posterior), y entonces usted puede ver el conjunto de instrucciones diferencias por sí mismo. La mayoría (pero no todos) de los desarrolladores seguirá siendo independiente de los cambios, como la mayor parte de ellos no afectan directamente Obj-C /C (CG* Api no obstante), y tienen que ver más con el nivel bajo puntero de la manipulación. El compilador de la obra su magia y optimizaciones.

  3. 7

    Mi comprensión de Apple Docs.

    • Lo que es Arquitecturas (ARCOS) en Xcode acumulación de configuración?
      • Especifica la arquitectura/s para que el sistema binario es DIRIGIDA. Cuando se especifica más que una arquitectura, el binario generado puede contener código objeto para cada uno de la arquitectura especificada.
    • Lo que es Válido Arquitecturas (VALID_ARCHS) en Xcode acumulación de configuración?

      • Especifica la arquitectura/s para que el archivo binario puede ser CONSTRUIDO.
      • Durante el proceso de construcción, esta lista se cruzaba con ARCOS, y la lista resultante especifica las arquitecturas en las que el binario se puede ejecutar en.
    • Ejemplo :- Uno de iOS proyecto tiene las siguientes acumulación de configuración en Xcode.

      • ARCOS = armv7 armv7s
      • VALID_ARCHS = armv7 armv7s arm64
      • En este caso, binario será construido para armv7 armv7s arm64 arquitecturas. Pero el mismo binario que se ejecuta en SÓLO ARCHS = armv7 armv7s.
    • No, todavía confunde el infierno fuera de mí :S
    • ¿qué es la «lista» ??
    • El resultado de la intersección.
    • Tendría sentido si yo pudiera encontrar una razón por la que me gustaría construir una arquitectura que no quiero que se ejecuta.
  4. 6

    Usted no necesita limitar el compilador sólo armv7 y armv7s mediante la eliminación de arm64 configuración de arquitecturas soportadas.
    Usted sólo debe fijar destino de la Implementación ajuste a 5.1.1

    Nota importante: no se puede establecer la Implementación de destino a 5.1.1 en Configuración de generación de sección porque es desplegable con valores fijos. Pero usted puede configurar fácilmente a 5.1.1 en General la sección de configuración de la aplicación con sólo escribir el valor en el campo de texto.

  5. 5

    Simple revisión:

    Objetivos -> Configuración de generación -> Opciones de generación -> Activar Bitcode -> No

    Funciona en dispositivos con iOS 9.3.3

  6. 4

    Ninguna de las respuestas trabajado y, a continuación, me estaba olvidando de establecer los requisitos mínimos de implementación de destino que se puede encontrar en Proyecto -> General -> Implementación Info -> Destino de la Implementación -> 8.0

    Xcode 5 y iOS 7: la Arquitectura y las arquitecturas Válidas

Dejar respuesta

Please enter your comment!
Please enter your name here