ios xcode6.1

ios - XCode 6.1 Falta la arquitectura requerida X86_64 en el archivo



xcode6.1 (11)

En XCode 6.1, recibo un error para iPhone 6, iPhone 5s (iOS 7.1) que dice

Undefined symbols for architecture x86_64: "_OBJC_CLASS_$_ClientAuthenticator", referenced from: objc-class-ref in AppDelegate.o ld: symbol(s) not found for architecture x86_64 linker command failed with exit code 1

Esto es lo que tengo para la perspectiva de la configuración de arquitectura

Architectures : Standard Architectures(armv7, arm64) - $(ARCHES_STANDARD) Base SDK : Latest iOS(8.1) Valid Architectures: arm64, armv7, armv7s IOS Deployment Target: iOS 6.0

Recientemente actualicé mi sistema operativo a Yosemite y XCode de 6.0 a 6.1. He buscado en Stackoverflow esta pregunta que se refiere a XCode 5.1 y probé todas las soluciones dadas, pero nada ha funcionado.

Actualización : probé los cambios como se sugiere en la respuesta, pero sigo recibiendo el error que dice " Falta la arquitectura requerida X86_64 ". En una investigación adicional, descubrí que el archivo ClientAuthenticator.o que es de mi biblioteca no se está creando para la arquitectura X86_64 y probablemente ese sea el problema. Estoy mirando cómo se puede construir para x86_64.

Mi nueva pregunta es ¿cuál es la diferencia entre arm64 y x86_64 ? Más parece la diferencia entre el fabricante de arquitectura, pero la arquitectura básica de 64 bits sigue siendo la misma.


Aquí hay una respuesta a su última pregunta sobre la diferencia entre x86_64 y arm64 :

  • Se requiere la arquitectura x86_64 para ejecutar el simulador de 64 bits.

  • arm64 arquitectura arm64 para ejecutar el dispositivo de 64 bits (iPhone 5s, iPhone 6, iPhone 6 Plus, iPad Air, iPad mini con pantalla Retina).


Después de los cambios que tiene que hacer, eso es todo (cambie la arquitectura a armv7 y elimine otros): -


Establecer las arquitecturas activas de compilación solo en No solucionó este problema para mí.


Me encontré exactamente con el mismo problema y seguí este tutorial https://github.com/jverkoey/iOS-Framework#faq

La forma en que hice este trabajo es después de poner los scripts en la fase de compilación de su agregado, antes de compilar, asegúrese de compilarlo usando un simulador de iPhone (usé iPhone6) en lugar de un dispositivo IOS.

lo que me dará 2 rebanadas: armv7 y x86_64, luego arrastrarlo y soltarlo en un nuevo proyecto me está funcionando bien.


Mi solución fue conectar mi iPhone 6, construir sobre él y conseguí que el proyecto se ejecutara con éxito.

Porque estaba construyendo para iPhone 6 Simulator.


Muchos usan los scripts de compilación que se encuentran aquí: http://www.raywenderlich.com/41377/creating-a-static-library-in-ios-tutorial o aquí: https://gist.github.com/sponno/7228256 por su script de ejecución en su objetivo.

Me estaba arrancando el pelo tratando de agregar x86_64, i386, armv7s, armv7 y arm64 a la sección Arquitecturas, solo para encontrar lipo -info targetname.a nunca devolvió estas arquitecturas después de una construcción exitosa.

En mi caso, tuve que modificar el runcript objetivo, específicamente el paso 1 desde el enlace principal, para incluir manualmente las arquitecturas usando -arch.

Step 1. Build Device and Simulator versions xcodebuild -target ${PROJECT_NAME} ONLY_ACTIVE_ARCH=NO -configuration ${CONFIGURATION} -sdk iphoneos BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}" xcodebuild -target ${PROJECT_NAME} -configuration ${CONFIGURATION} -sdk iphonesimulator -arch x86_64 -arch i386 -arch armv7 -arch armv7s -arch arm64 BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}"


Otra cosa a tener en cuenta es que XCode maneja mal las importaciones de la biblioteca, y en muchos casos la solución es encontrar el archivo importado en su proyecto, eliminarlo en Finder o desde la línea de comando y agregarlo nuevamente, de lo contrario XCode no lo actualizará correctamente. Al dejar XCode allí el archivo antiguo que sigue ejecutando en círculos sin entender por qué no se está compilando, falta la arquitectura, etc.


Si está creando una biblioteca universal y necesita admitir el simulador (x86_64), cree el marco para todas las plataformas estableciendo Build Active Architecture Only en No


Si tiene este problema en proyectos reactivos nativos con una de las bibliotecas externas. Debe eliminar el proyecto y usar el react-native link <package-name> nuevamente. Eso debería resolver el problema.


Uso el comando lipo para combinar dos bibliotecas estáticas construidas manualmente.

EJ: Tengo una biblioteca estática (libXYZ.a) para construir.

Debug-iphoneos/ build para el Generic iOS Device y obtuve el producto en Debug-iphoneos/

$ lipo -info Debug-iphoneos/libXYZ.a Architectures in the fat file: Debug-iphoneos/libXYZ.a are: armv7 arm64

Luego ejecuto build para cualquier iOS Simulator y obtuve el producto en Debug-iphonesimulator/

$ lipo -info Debug-iphonesimulator/libXYZ.a Architectures in the fat file: Debug-iphonesimulator/libXYZ.a are: i386 x86_64

Finalmente combino en uno para contener todas las arquitecturas.

$ lipo -create Debug-iphoneos/libXYZ.a Debug-iphonesimulator/libXYZ.a -output libXYZ.a $ lipo -info libXYZ.a Architectures in the fat file: libXYZ.a are: armv7 i386 x86_64 arm64


  • Lo primero que debe asegurarse es que su biblioteca estática tenga todas las arquitecturas. Cuando haces una lipo -info myStaticLibrary.a en la terminal, deberías ver armv7 armv7s i386 x86_64 arm64 para tu binario gordo.

  • Para lograr eso, supongo que está creando un binario universal: agregue lo siguiente a la configuración de su arquitectura del proyecto de biblioteca estática:

  • Entonces, puede ver que tengo que configurar manualmente las Standard architectures (including 64-bit) (armv7, armv7s, arm64) del proyecto de biblioteca estática.

  • Alternativamente, dado que el $ARCHS_STANDARD normal ahora incluye 64 bits. También puede hacer $(ARCHS_STANDARD) y armv7s . Verifique lipo -info sin él y descubrirá las arquitecturas faltantes. Aquí está la captura de pantalla para todas las arquitecturas:

  • Para su implementación de referencia (proyecto usando biblioteca estática). La configuración predeterminada debería funcionar bien:

Actualización 12/03/14 Xcode 6 Las arquitecturas estándar excluyen armv7s.

Entonces, ¿ armv7s no es necesario? Si. Parece que las diferencias generales entre los conjuntos de instrucciones armv7 y armv7s son menores. Por lo tanto, si elige no incluir armv7s, el código de máquina armv7 objetivo todavía funciona bien en dispositivos A6 de 32 bits, y apenas se notará una brecha de rendimiento. Source

Si hay una forma más inteligente para Xcode 6.1+ (iOS 8.1 y superior), por favor comparta.