ios - xcode 5.1: problemas de arquitectura libCordova.a
xcode5.1 (8)
Ayer (10/3/14) cuando se lanzó iOS 7.1, también actualicé a Xcode 5.1 y descubrí que mi proyecto PhoneGap / Cordova ya no compilaría para mi iPhone 5s. También actualicé Cordova a la versión más reciente: v 3.4.0-0.1.3.
He leído muchas soluciones diferentes en SO que se refieren a arquitecturas activas tan cambiantes y que solo construyen arquitecturas activas, y ninguna de ellas funciona. Entonces esto es lo que he intentado y los errores que recibo. Inicialmente recibí el error:
missing required architecture arm64 in file <long file path omitted> libCordova.a
Undefined symbols for architecture arm64
Así que probé lo siguiente. Seleccioné el subproyecto CordovaLib en mi proyecto, y tanto en el proyecto como en el objetivo, fui a Build Settings en Architectures y me aseguré de que arm64
no estuviera incluido en ninguna de las arquitecturas Debug o Release. En este momento, Build Active Architecture Only está configurado en "Sí". Eso resultó en el siguiente error:
file was built for archive which is not the architecture being linked (armv7):
<long file path omitted> libCordova.a
Undefined symbols for architecture armv7
Configurando Build Active Architecture solo en "No", el error vuelve a ser:
missing required architecture arm64 in file <long file path omitted> libCordova.a
Undefined symbols for architecture arm64
No estoy seguro de qué más probar. La configuración de arquitectura del proyecto solo incluye la clave "Base SDK" que está configurada en iOS 7.1. El objetivo del proyecto no tiene configuraciones de arquitecturas. De todos modos, estoy bastante seguro de que el problema radica en el subproyecto CordovaLib integrado. ¿Qué puedo hacer para que esta cosa se compile en mi dispositivo con éxito?
Actualización: el mismo problema en Jira de Apache: https://issues.apache.org/jira/browse/CB-6223
@Shazron publicó la corrección en el Apache JIRA - señala que la solución se lanzará como parte de Cordova 3.5:
- Seleccione su ícono de Proyecto
- Elija Configuraciones de compilación.
- Para "Arquitecturas", seleccione $ ARCHS_STANDARD - Arquitecturas estándar (armv7, armv7s, arm64)
- Para "Arquitecturas válidas", agregue "arm64"
- Seleccione su icono CordovaLib.xcodeproj
- En las configuraciones de compilación para el proyecto (no el objetivo), elimine la configuración de la arquitectura condicional (pase el mouse para ver el signo menos)
- Para "Arquitecturas", seleccione $ ARCHS_STANDARD - Arquitecturas estándar (armv7, armv7s, arm64)
- Para "Arquitecturas válidas", agregue "arm64"
- Vaya a 6, pero ahora hágalo por "Objetivo"
Aquí hay un enlace al informe completo de Shazron sobre este problema: http://shazronatadobe.wordpress.com/2014/03/12/xcode-5-1-and-cordova-ios/
Ahora se lanzó y la versión corta de qué hacer es:
Cordova CLI 3.4.1-0.1.0 está disponible, que incluye Cordova iOS 3.4.1 que incorpora todas las correcciones mencionadas en esta publicación de blog. Actualice su CLI de Cordova, y si tiene un proyecto existente, haga una "actualización de la plataforma cordova ios".
Acaban de lanzar una nueva versión 3.4.1 que aborda estos problemas.
Por lo tanto, actualizo un único archivo para apuntar al TAG 3.4.1:
/usr/local/lib/node_modules/cordova/platforms.js
línea 24 desde:
version: ''3.4.0''
a:
version: ''3.4.1''
A continuación, elimine la carpeta de iOS en su proyecto y ejecute:
cordova platform add ios
Esto descargará la nueva plantilla basada en 3.4.1 con todos los parches.
Downgrade Xcode 5.1 a 5.0.2 funcionó para mí, no podía esperar para una versión oficial de Cordova 3.5 con la solución.
Puede obtener una copia de la versión anterior aquí: https://developer.apple.com/downloads/index.action
Otro enfoque que funciona:
- Haga clic en su proyecto en la parte superior del navegador del proyecto (no en el subproyecto Cordova.lib).
- En el panel del editor, seleccione el proyecto (no el objetivo), seleccione la pestaña del editor de Configuraciones de compilación y haga clic en los botones Todo y Niveles.
- Expanda el grupo Arquitecturas si es necesario y busque la fila Arquitecturas debajo de él.
- Las primeras columnas (resueltas) y las tercera (predeterminadas de iOS) en la fila Arquitectura dicen Estándar; la segunda columna (proyecto) estará en blanco.
- Haga clic en la segunda columna en blanco para que aparezca un cuadro que tendrá una línea, "$ (ARCHS_STANDARD)".
- Haga doble clic en esa línea para que sea editable, luego cámbiela para que diga "$ (ARCHS_STANDARD_32_BIT)".
- Haga clic fuera del cuadro para confirmar su cambio. Ahora el primer y segundo cuadro solo tendrán $ en ellos.
- Ahora deberías poder construir.
Pude hacer que mi aplicación construyera en XCode 5.1 construyendo primero el proyecto CordovaLib por separado desde XCode y luego construyendo mi proyecto.
Siga las instrucciones en este video: https://www.youtube.com/watch?v=EIkJAKcz8DE
Simplemente agregue arm64 en las arquitecturas válidas de sus proyectos y elimine toda la arquitectura condicional del proyecto de Cordova.
Solo tiene que agregar la arquitectura arm64 en cada declaración y configuración de construcción, es decir, en su proyecto actual y en el proyecto cordova.
En tu proyecto:
- Arquitecturas
- Arquitecturas válidas
en Córdoba:
- Arquitecturas
- depurar
- lanzamiento
- Cualquier ios SDK
Y LO MAS IMPORTANTE
- Arquitecturas válidas en la configuración de construcción de Córdoba
Esta configuración genera muchas advertencias, pero solo cambia el "% d" por "% ld" en todas las líneas que dice la advertencia.
Toma el ícono de xcode y arrástralo al contenedor.
Vaya aquí https://developer.apple.com/downloads/index.action?name=Xcode y descargue 5.0.2 e instálelo.
Después de la instalación, ejecute xcode, luego pruebe el emulador desde la terminal.
¡Trabajó para mí, aunque molesto!