ios - Xcode 5.1-Sin arquitecturas para compilar(ONLY_ACTIVE_ARCH=YES, activo arch=x86_64, VALID_ARCHS=i386)
xcode5.1 (18)
Agregar: Arquitecturas: $ (ARCHS_STANDARD_INCLUDING_64_BIT)
Arquitecturas válidas: arm64 armv7 armv7s
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:
Traté de cambiar "Build Active Architecture" a No, así como agregar "i386" a "Valid Architectures", desafortunadamente ninguno de los dos funcionó. Gracias por cualquier sugerencia!
Agregue arm64
a las valid architectures
del objetivo. Parece que agrega una arquitectura x86-64
para simular arquitecturas válidas también.
En arquitecturas válidas: seleccione cada entrada (versión, depuración) y creación, y presione retroceso. Deberia de funcionar
En la biblioteca, a veces para admitir 6.0 y 7.0, exluimos arm64
En arquitecturas -> arquitectura - seleccione la arquitectura estándar arm64 armv7 armv7s. Justo debajo, en la arquitectura válida, se incluye el usuario arm64 armv7 armv7s. Esto funcionó para mí.
Intente eliminar todas las arquitecturas anteriores (es decir, elimine la configuración ARCHS_STANDARD) al mismo tiempo que agrega i386 a Architectures. Esto debería cambiar la arquitectura activa a i386. Me encontré con un problema similar cuando traté de compilar para armv7 de forma predeterminada, pero siguió tratando de compilar para arm64. Cambié ARCHS_STANDARD a ARCHS_STANDARD_32_BIT, y esto cambió la arquitectura activa elegida.
Llegué a esta pregunta debido a un problema con la construcción de línea de comando 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 hace que xcodebuild
falle al intentar construir para el simulador. La solución es especificar la opción "-destinación", por ejemplo:
xcodebuild -project TestBuildCmd.xcodeproj -scheme TestBuildCmd -sdk iphonesimulator -destination ''platform=iOS Simulator,name=iPhone 6'' build
Actualizar
El comando de ejemplo anterior construirá 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 adaptan 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
Lo que debe hacer es simplemente establecer ONLY_ACTIVE_ARCH
en NO
(al menos funciona para mí). A continuación se muestra una captura de pantalla:
EDITAR:
Hasta donde yo sé ( por favor, indíquelo si hay algo mal, gracias ), si establece ONLY_ACTIVE_ARCH
a YES
, significa que el Xcode solo se compilará para la arquitectura activa (que se refiere al dispositivo que está activo actualmente en Xcode). Parece que la configuración predeterminada de Xcode es establecer Debug en YES
, por lo que no creará binarios para otras arquitecturas cuando solo quieras construir para un dispositivo especial que esté conectado a tu Mac.
El motivo por el cual no se pudo construir es que el proyecto no admite la arquitectura del dispositivo que conectó. Entonces, la mejor solución es agregar la arquitectura correcta para su dispositivo. A continuación hay una lista de arquitecturas y dispositivos que admiten:
- 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
Entonces, ¿por qué "configurar ONLY_ACTIVE_ARCH
a NO
" funciona? Debido a que el dispositivo todavía puede ejecutar el binario que se creó para todas las arquitecturas que ha agregado (pase la construcción), pero perderá algo de rendimiento. Esta es solo una solución rápida, pero no es la mejor.
Nota : Cuantas más arquitecturas agregue, más grande se generará el binario. Por lo tanto, es bueno elegir las arquitecturas correctas para su proyecto. ;)
Me enfrenté al 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 solamente'' en No. Ambos campos se pueden encontrar en su aplicación-> objetivos-> configuraciones de compilación-> arquitecturas.
Mi problema era que el proyecto Pods apuntaba a OS X, a pesar de que mi platform :ios
Podfile tenía platform :ios
. Estoy usando cocoapods 0.35.0.rc2.
Para solucionarlo, seleccione el proyecto Pods en el navegador del proyecto y compruebe que el nodo PROYECTO Pods (tenga en cuenta, no el objetivo Pods) se dirige a iOS. Es decir, las configuraciones de compilación de arquitecturas deberían ser:
- Arquitecturas:
$(ARCHS_STANDARD)
- Base SDK:
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
Para evitar que "pod install" restablezca only_active_arch para depuración cada vez que se ejecuta, puede agregar lo siguiente a su archivo de 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
Por si acaso, para cualquier persona 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 armar7 y armar7, pero estaba tratando de ejecutar la aplicación en un simulador de 64 bits.
Resolví este problema usando la respuesta de @Kjuly y la línea específica:
"El motivo por el que no se pudo construir podría ser que el proyecto no admite la arquitectura del dispositivo que conectó".
Con Xcode cargado, configura automáticamente la aplicación de mi iPad en iPad Air
Esto causó el error de análisis de dependencias.
Cambiar el tipo de dispositivo solucionó de inmediato el problema:
No sé por qué funciona, pero esta es una respuesta muy rápida que me ahorró un montón de vueltas en el fondo y al instante conseguí que la aplicación funcionara para probar. Nunca hubiera pensado que esto podría ser una cosa y algo tan simple lo solucionaría, pero en este caso sí lo hizo.
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á configurada en Sí para Debug.
La solución es simple. Cambiarlo a No.
Del mismo modo, cambie a No para su proyecto de aplicación.
Simplemente agregue arm64 en una arquitectura válida. Espero que funcione para usted.
Tuve 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:
- Elimine el proyecto "Pods" del espacio de trabajo en el panel izquierdo de Xcode y cierre Xcode.
- Ejecute "pod install" desde la línea de comandos para recrear el proyecto "Pods".
- Vuelva a abrir Xcode y asegúrese de que "Crear arquitectura activa solamente" esté configurada en "No" en la configuración de compilación tanto del proyecto "Pods" como de su propio proyecto.
- Limpiar y construir
Tuve que agregar el siguiente i386
y x86_64
a las Valid Architectures
. Estoy ejecutando Xcode 7.2 y apuntando a iOS 8+. Ya tenía armv7
, armv7s
y arm64
allí y eso funcionaba en Xcode 6.4.
Tuve un problema similar. Lo resolvió cambiando "Arquitectura" a " $ (ARCHS_STANDARD_32_BIT) " en Configuraciones de compilación para Proyecto.
Ahora, debe seleccionar las arquitecturas estándar (armv7, arm64) - $ (ARCHS_STANDARD), ya que Apple recomienda que las aplicaciones se construyan sobre la arquitectura de 64 bits. Haga clic en: documento de Apple