Xcode 5.1: no hay arquitecturas para compilar (ONLY_ACTIVE_ARCH = YES, active arch = x86_64, VALID_ARCHS = i386)

168

Después de actualizar a Xcode 5.1, ya no puedo construir mi proyecto para el simulador de 64 bits, recibiendo este error:

 No architectures to compile for (ONLY_ACTIVE_ARCH=YES, active arch=x86_64, VALID_ARCHS=i386).

Estas son mis configuraciones de compilación de destino:

Configuración de compilación de destino de Xcode

Intenté cambiar "Construir arquitectura activa" a No, así como agregar "i386" a las "Arquitecturas válidas", desafortunadamente ninguno funcionó. Gracias por cualquier sugerencia!

ebi
fuente
44
He visto bastantes preguntas similares a raíz de la última actualización de iOS 7.1 y la solución fue omitir arm64. Es cierto que eso no resuelve su problema específico, pero hay razones para creer que Apple arruinó algo.
dandan78
Gracias, eso tiene sentido, supongo que no usaré 64 bits hasta que Apple lance una actualización para esto.
ebi
1
posible duplicado de EXC_BAD_ACCESS, código 1, dispositivos iOS 7.0.x 64bit
ignotusverum
El mismo problema en Xcode 6.1, he probado todas las soluciones que figuran a continuación, no funcionan. Tengo CocoaPods en mi proyecto. Cualquier solución sobre cómo solucionarlo en Xcode 6.1
Vinayaka Karjigi

Respuestas:

102

Recibí el mismo mensaje de error después de actualizar a XCode 5.1. ¿Estás usando CocoaPods? Si es así, esto debería solucionar el problema:

  1. Elimine el proyecto "Pods" del espacio de trabajo en el panel izquierdo de Xcode y cierre Xcode.
  2. Ejecute "pod install" desde la línea de comandos para recrear el proyecto "Pods".
  3. Vuelva a abrir Xcode y asegúrese de que "Build Active Architecture Only" esté configurado en "No" en la configuración de compilación tanto del proyecto "Pods" como de su propio proyecto.
  4. Limpiar y construir.
Mike Onorato
fuente
1
Se solucionó eliminando arm64 de las arquitecturas Pods.
ebi
También resolví el mismo problema en un proyecto Cordova / PhoneGap para mí. Gracias
Rocco
182

Lo que debe hacer es configurarlo ONLY_ACTIVE_ARCHen NO(al menos funciona para mí). A continuación hay una captura de pantalla para ello:


EDITAR:

Por lo que yo sé ( por favor señalarlo si hay algo mal, gracias ), si se establece ONLY_ACTIVE_ARCHque YES, significa que la única Xcode construirá para la arquitectura activa (que se refiere al dispositivo que está activa actualmente en Xcode). Parece que la configuración predeterminada de Xcode está establecida en Depuración YES, por lo que no generará binarios para otras arquitecturas cuando solo desee compilar para un dispositivo especial que se conectó a su Mac.

La razón por la que no se pudo construir es que el proyecto no es compatible con la arquitectura del dispositivo que conectó. Entonces, la mejor solución es agregar la arquitectura correcta para su dispositivo. A continuación se muestra una lista de arquitecturas y dispositivos compatibles:

  • ARMv8 / ARM64: iPhone 6, iPhone 5s, iPad Air,Retina iPad Mini
  • ARMv7s: iPhone 5, iPhone 5c,iPad 4
  • ARMv7: iPhone 3GS, iPhone 4, iPhone 4S, iPod 3G/4G/5G, iPad, iPad 2, iPad 3,iPad Mini
  • ARMv6: iPhone, iPhone 3G,iPod 1G/2G

Así que por qué "Establecer el ONLY_ACTIVE_ARCHa NO" obras? Debido a que el dispositivo aún puede ejecutar el binario que se creó para todas las arquitecturas que agregó (pasar la compilación), pero perderá algo de rendimiento. Esta es solo una solución rápida, pero no la mejor.


Nota : Cuantas más arquitecturas haya agregado, mayor será el binario generado. Por lo tanto, es bueno elegir las arquitecturas adecuadas para su proyecto. ;)

Kjuly
fuente
@EmilMarashliev solo el objetivo de construcción. Lo verá cuando seleccione su proyecto raíz (con el icono azul).
Kjuly
@Praveen no está seguro, parece que esta opción se cambió en Xcode 5.1.
Kjuly
Esta es la respuesta correcta, me salvaste toda una vida aquí, gracias :)
Bikramjit Singh
2
Esta es la respuesta más clara y completa. ¡Definitivamente debería ser el aprobado! Gracias
MeV
1
Esto fue muy útil. la respuesta estaría completa, si puede agregar cómo descargar la arquitectura que se necesita.
Kalpesh Popat
29

Añadir arm64al objetivo valid architectures. Parece que también agrega x86-64arquitectura a las arquitecturas válidas del simulador.

xardas
fuente
27

Si está utilizando CocoaPods, el problema más probable es que la configuración de compilación del proyecto Pods para Build Active Architecture Only está establecida en para depuración.

La solución es simple. Cámbielo a no .

Del mismo modo, cambie a No para su proyecto de aplicación.

samwize
fuente
12

Tuve un problema similar. Lo resolvió cambiando "Arquitectura" a " $ (ARCHS_STANDARD_32_BIT) " en Configuración de compilación para el proyecto.

Ahora, debe seleccionar arquitecturas estándar (armv7, arm64) - $ (ARCHS_STANDARD) ya que Apple recomienda que las aplicaciones se construyan en una arquitectura de 64 bits. Haga clic en: documento de Apple

Jayprakash Dubey
fuente
@JayprakashDubey, ¿qué pasa con esto? $(ARCHS_STANDARD_INCLUDING_64_BIT)?
Hemang
¿Debo usar $(ARCHS_STANDARD_32_BIT)o $(ARCHS_STANDARD_INCLUDING_64_BIT)?
Hemang
@hagile: Ve con $ (ARCHS_STANDARD_INCLUDING_64_BIT)
Jayprakash Dubey
10

Añadir: Arquitecturas: $ (ARCHS_STANDARD_INCLUDING_64_BIT)

Arquitecturas válidas: arm64 armv7 armv7s

AntonijoDev
fuente
Hmm, ¿intentaste restablecer todo, contenido del simulador, simulador, proyecto limpio, reiniciar xCode y Mac, porque tengo xCode5.1 y mi simulador funciona bien?
AntonijoDev
¿Está ejecutando su aplicación / simulador con un iPhone de 4 pulgadas y 64 bits?
ebi
5

Por si acaso, para cualquiera que todavía encuentre el problema a pesar de seguir lo anterior, verifique que el simulador que está ejecutando también sea compatible. Tenía el mío especificado para arm7 y arm7s, pero estaba tratando de ejecutar la aplicación en un simulador de 64 bits.

irs8925
fuente
+1 ¡Sí, este es el indicado! Después de verificar y volver a verificar y verificar tres veces que todo sigue bien, ¡este era el problema!
JOM
1
Guau. ¿Tengo que conectar el dispositivo para el que quiero construir para poder compilar el código de destino adecuado? Solo vomité un poco en mi boca. Su publicación resolvió este problema para mí, gracias.
5

Para evitar que se reinicie "pod install" only_active_arch para depurar cada vez que se ejecuta, puede agregar lo siguiente a su archivo pod

# Append to your Podfile
post_install do |installer_representation|
    installer_representation.project.targets.each do |target|
        target.build_configurations.each do |config|
            config.build_settings['ONLY_ACTIVE_ARCH'] = 'NO'
        end
    end
end
Jake Hall
fuente
3

Simplemente agregue arm64 en una arquitectura válida. Espero que funcione para usted.

Shauket Sheikh
fuente
3

Mi problema era que el proyecto Pods estaba dirigido a OS X, a pesar de que mi Podfile lo tenía platform :ios. Estoy usando cocoapods 0.35.0.rc2.

Para solucionarlo, seleccione el proyecto Pods en el navegador de proyectos y verifique que el nodo PROYECTO Pods (tenga en cuenta, no el objetivo de Pods) esté dirigido a iOS. Es decir, la configuración de construcción de arquitecturas debe ser:

  • Arquitecturas: $(ARCHS_STANDARD)
  • SDK base: iOS 8.1
  • Plataformas compatibles: iOS
  • Arquitecturas válidas: $(ARCHS_STANDARD)

También quería construir todas las arquitecturas, así que agregué lo siguiente al Podfile:

post_install do | installer |
    installer.project.build_configurations.each do |config|
        config.build_settings['ONLY_ACTIVE_ARCH'] = 'NO'
    end
end
Jano
fuente
3

Tuve que agregar lo siguiente i386y x86_64para Valid Architectures. Estoy ejecutando Xcode 7.2 y apunto a iOS 8+. Ya tenía armv7, armv7sy arm64allí y eso estaba funcionando en Xcode 6.4.

timgcarlson
fuente
2

Enfrenté el mismo problema al ejecutar mi aplicación en iPad usando xcode 5.1. Se resolvió eliminando armv7s de 'arquitecturas válidas' y estableciendo el valor 'construir arquitecturas activas solo' en No. Ambos campos se pueden encontrar en su aplicación-> objetivos-> configuración de construcción-> arquitecturas.

Anubha
fuente
2

Llegué a esta pregunta debido a un problema con la construcción de la línea de comandos para el simulador en Xcode 7.2. En caso de que alguien más llegue aquí con el mismo problema, compartiré la solución que encontré:

Aparentemente hay un error en Xcode 7.2 que causa xcodebuildun error al intentar construir para el simulador. La solución es especificar la opción "-destination", por ejemplo:

xcodebuild -project TestBuildCmd.xcodeproj -scheme TestBuildCmd -sdk iphonesimulator -destination 'platform=iOS Simulator,name=iPhone 6' build

Actualizar

El comando de ejemplo anterior creará un binario que incluye los gráficos solo para iPhone 6. Si el binario se ejecuta en otros simuladores, los gráficos del iPhone 6 se escalan a la plataforma. Una mejor solución que contiene todos los gráficos para todas las plataformas es especificar el parámetro PLATFORM_NAME=iphonesimulator, por ejemplo:

xcodebuild -project TestBuildCmd.xcodeproj -scheme TestBuildCmd -sdk iphonesimulator -arch i386 PLATFORM_NAME=iphonesimulator build
JRV
fuente
0

Intente eliminar todas las arquitecturas anteriores (es decir, elimine la configuración ARCHS_STANDARD) al mismo tiempo que agrega i386 a las arquitecturas. Esto debería cambiar la arquitectura activa a i386. Encontré un problema similar cuando intenté compilar para armv7 de forma predeterminada, pero seguía intentando compilar para arm64. Cambié ARCHS_STANDARD a ARCHS_STANDARD_32_BIT, y esto cambió la arquitectura activa elegida.

halifix
fuente
0

En arquitectura, a veces para soportar 6.0 y 7.0, excluimos arm64

En arquitecturas -> arquitectura - seleccione arquitectura estándar arm64 armv7 armv7s. Justo debajo, en Arquitectura válida, se incluye el usuario arm64 armv7 armv7s. Esto funcionó para mí.

Ankish Jain
fuente
0

Resolví este problema usando la respuesta de @ Kjuly y la línea específica:

"La razón por la que no se pudo construir es que el proyecto no es compatible con la arquitectura del dispositivo que conectó".

Con Xcode cargado, configura automáticamente mi aplicación de iPad en iPad Air

ingrese la descripción de la imagen aquí

Esto causó el error de análisis de dependencia.

Cambiar el tipo de dispositivo resolvió el problema de inmediato:

ingrese la descripción de la imagen aquí

No sé por qué esto funciona, pero esta es una respuesta muy rápida que me ahorró mucho tiempo en el fondo y al instante puso a prueba la aplicación. Nunca hubiera pensado que esto podría ser una cosa y algo tan simple lo arreglaría, pero en este caso lo hizo.

simon_smiley
fuente
0

Descubrí que era necesario ingresar los nombres de arquitectura a mano:

ingrese la descripción de la imagen aquí

No sé por qué esto era necesario, es decir, por qué estos valores no se heredaron del propio Xcode. Pero tan pronto como hice esto, el problema desapareció.

mate
fuente
0

En arquitecturas válidas: seleccione cada entrada (versión, depuración) y compile y presione la tecla de retroceso. Deberia de funcionar

Khaled Annajar
fuente