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
yarmv7s
(o$(ARCHS_STANDARD_32_BIT)
como lo menciona nschum ), cierre la ventana emergente.Edite el valor
Valid Architectures
y simplemente elimine la parte dearm64
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
Yo tenía el mismo error. La descarga de la nueva versión del SDK de Google AdMob 6.8.0 resolvió el problema. Aquí está el enlace: https://developers.google.com/mobile-ads-sdk/download#downloadios
Por lo tanto, no es necesario deshabilitar la arquitectura arm64.
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):