ios objective-c xcode xcode5.1

ios - Arquitectura Arm64 en xcode 5.1



objective-c xcode5.1 (6)

A partir de Xcode 5.1 $ (ARCHS_STANDARD) ahora incluye arm64 (así como también armv7 y armv7s) mientras que con Xcode 5.02, $ (ARCHS_STANDARD) solo incluía armv7 y armv7s.

Para Xcode 5.1

$ (ARCHS_STANDARD) = armv7 armv7s arm64

$ (ARCHS_STANDARD_32_BIT) = armv7 armv7s

Entonces, si DEBE compilar en 64 bits, entonces necesita asegurarse de que todas las bibliotecas incluidas tengan un segmento de 64 bits. Si aún no admiten 64 bits, deberá compilar en 32 bits.

Pero en cualquier caso, debajo de las configuraciones de compilación de tus objetivos, debes asegurarte de que tanto las Aquitecturas como las Aquitectas Válidas se establezcan de la misma forma y que coincidan (ver imágenes a continuación). Así que puedes probar ambos con $ (ARCHS_STANDARD) y si no compila, puedes probar ambos con $ (ARCHS_STANDARD_32_BIT) que en teoría eliminará los errores y compilará un proyecto en funcionamiento.

-

Así para 64 bits con arm64 armv7s y armv7:

-

O como esto para 32 bits con armv7s y armv7 solamente (sin arm64):

En el nuevo XCode 5.1, arm64 se ha convertido en una de las arquitecturas estándar para construir.

Sin embargo, en los proyectos actuales míos, incluí bibliotecas (Google AdMob, por ejemplo) que aún no admiten esta nueva arquitectura; ahora están causando errores de enlazador:

ld: symbol(s) not found for architecture arm64

Por ejemplo, se dice que Google AdMob 6.8.0 admite a arm64, pero no puedo confirmarlo, a menos que cputype (16777228) cpusubtype (0) sea ​​arm64. (encontrado a través de la herramienta de línea de comandos del archivo)

libGoogleAdMobAds.a: Mach-O universal binary with 5 architectures libGoogleAdMobAds.a (for architecture armv7): current ar archive random library libGoogleAdMobAds.a (for architecture armv7s): current ar archive random library libGoogleAdMobAds.a (for architecture i386): current ar archive random library libGoogleAdMobAds.a (for architecture x86_64): current ar archive random library libGoogleAdMobAds.a (for architecture cputype (16777228) cpusubtype (0)): current ar archive random library

¿Hay alguna manera de hacerlo?


En Configuraciones de compilación para su objetivo, cambie las "Arquitecturas válidas" a solo las que admite; probablemente armv7 y armv7s en este caso.

Si está utilizando Cocoapods, asegúrese de cambiar esto para todos los objetivos dentro del proyecto Pods y configure todos los objetivos '''' Construir arquitectura activa solamente '''' en '''' No '''' para todos los esquemas.

Se detalla aquí un pequeño cambio en el archivo de su pod para eliminar automáticamente la arquitectura de compilación de 64 bits de sus objetivos de cocoapods: http://cameronspickert.com/2014/01/20/remove-the-arm64-architecture-from-cocoapods-targets


Establecer la arquitectura en $ (ARCHS_STANDARD_32_BIT) en XCode 5.1 funciona. No es necesario eliminar arm64 de las arquitecturas válidas.

La Arquitectura especifica las arquitecturas reales sobre las que se construirá e ignorará la entrada arm64 en las arquitecturas válidas (que especifica el superconjunto). Con suerte, Apple soluciona esto pronto.


No es tan difícil deshacerse de arm64 por el momento. todo lo que necesitas hacer es:

  • Edite la configuración de compilación de su objetivo . Cambie el valor de Architectures abriendo el menú desplegable, haga clic en Otro ... y selecciónelo, elimine la fila con el valor $(ARCHS_STANDARD) y agregue dos filas con valores: armv7 y armv7s (o $(ARCHS_STANDARD_32_BIT) como lo menciona nschum ), cierre la ventana emergente.

  • Edite el valor Valid Architectures y simplemente elimine la parte de arm64 de él.

  • Hazlo por cada proyecto anidado que puedas tener dentro de tu espacio de trabajo o proyecto.

Nota: Esto no es una solución, solo hay unos pocos pasos para mitigar su problema actual, siga sus proyectos de dependencia para averiguar cuándo vienen con la compatibilidad de arm64 y revertir el cambio de estas configuraciones lo antes posible.

Buena suerte



Ninguna de las respuestas funcionó para mí.
Finalmente envié mi aplicación instalando el antiguo Xcode 5.0.2 además de Xcode 5.1
Usé esta versión de Xcode para archivar la aplicación sin errores.

Descargue aquí la versión anterior de Xcode 5.0.2 (debe haber iniciado sesión con su ID de Apple):