xcode 5.1: problemas de arquitectura libCordova.a

81

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 se compilaría en 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 sobre SO que se relacionan tanto con el cambio de arquitecturas activas y la construcción de solo arquitecturas activas, y ninguna de ellas funciona. Así que esto es lo que he intentado y los errores que obtengo. Inicialmente recibí el error:

missing required architecture arm64 in file <long file path omitted> libCordova.a
Undefined symbols for architecture arm64

Así que intenté lo siguiente. Seleccioné el subproyecto CordovaLib en mi proyecto, y tanto en el proyecto como en el destino, fui a Build Settings en Architectures y me aseguré de que arm64no 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

Al configurar Build Active Architecture Only 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 la arquitectura del proyecto solo incluye la clave "Base SDK" que está configurada para iOS 7.1. El destino del proyecto no tiene configuraciones de arquitecturas. De todos modos, estoy bastante seguro de que el problema radica en el subproyecto incrustado CordovaLib. ¿Qué puedo hacer para que esto se compile correctamente en mi dispositivo?

Actualización: el mismo problema en Jira de Apache: https://issues.apache.org/jira/browse/CB-6223

inorgánico
fuente
2
Tengo exactamente el mismo problema. iOS 7.1 y Xcode 5.1 han estado disponibles para los desarrolladores durante algún tiempo, por lo que es decepcionante que el equipo de Cordova no haya emitido al menos una advertencia sobre esto antes de su lanzamiento.
Ade
Sí. Creé un nuevo proyecto Cordova 'Hello World' con el Cordova más reciente instalado y no se compilaba correctamente.
inorganik
¿Es posible conseguir y reinstalar el SDK de iOS 7.0?
Ade
Lo logré compilar usando esta configuración, pero cuando voy a Validar el archivo, aparece el error: ** Este paquete no es válido. Las aplicaciones que incluyen una arquitectura armv7s deben incluir una arquitectura armv7. Lo cual es extraño porque parece que he incluido ambos.
Ade
3
Solucione los pasos en el problema de Apache Cordova JIRA: issues.apache.org/jira/browse/CB-6223 .
Shazron

Respuestas:

86

@Shazron publicó la solución en Apache JIRA; señala que la solución se lanzará como parte de Cordova 3.5:

  1. Seleccione el icono de su proyecto
  2. Elija Configuración de compilación.
  3. Para "Arquitecturas", seleccione $ ARCHS_STANDARD - Arquitecturas estándar (armv7, armv7s, arm64)
  4. Para "Arquitecturas válidas", agregue "arm64"
  5. Seleccione su icono CordovaLib.xcodeproj
  6. En la configuración de compilación para el proyecto (no el destino), elimine la configuración de la arquitectura condicional (coloque el cursor para ver el signo menos)
  7. Para "Arquitecturas", seleccione $ ARCHS_STANDARD - Arquitecturas estándar (armv7, armv7s, arm64)
  8. Para "Arquitecturas válidas", agregue "arm64"
  9. Vaya a 6, pero ahora hágalo para "Target"

Aquí hay un enlace a la descripción completa de Shazron sobre este problema: http://shazronatadobe.wordpress.com/2014/03/12/xcode-5-1-and-cordova-ios/

Ahora está disponible 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, realice una "actualización de la plataforma cordova ios".

inorgánico
fuente
10
Excelente. Para el paso # 6, ¿estoy en lo correcto al pensar que debería borrar TODOS estos: CAPTURA DE PANTALLA ?
Ade
1
Al principio parece estar bien : la aplicación archiva y valida. Pero cuando se exporta como una distribución ad hoc, no se ejecutará en un iPhone 5S.
Ade
7
Sí, esta respuesta hace que la aplicación se compile e instale en un 5S, pero cuando comienza a ejecutarse, arroja un error lldb y se bloquea (o se detiene si está ejecutando su dispositivo conectado a su Mac mientras ejecuta Xcode).
Jough Dempsey
5
Aquí está el enlace a la publicación de @Shazron. Cubre 3 números: shazronatadobe.wordpress.com/2014/03/12/…
stefbach
Confirmo que funciona para mí. No olvide el punto 9, que consiste en eliminar cualquier configuración de arquitectura condicional para el objetivo 'Cordova Lib'. Debería tener tanto para el proyecto 'CordovaLib' como para los destinos 'CordovaLib'. La configuración de la arquitectura debe verse: - Depuración: Arquitectura estándar (...) - Versión: Arquitectura estándar (...)
stefbach
11

Otro enfoque que funciona:

  1. Haga clic en su proyecto en la parte superior del navegador de proyectos (no en el subproyecto Cordova.lib).
  2. En el panel del editor, seleccione el proyecto (no el destino), seleccione la pestaña del editor Configuración de compilación y haga clic en los botones Todos y Niveles.
  3. Expanda el grupo Arquitecturas si es necesario y busque la fila Arquitecturas debajo de él.
  4. La primera (resuelta) y la tercera (iOS predeterminada) columnas en la fila Arquitectura dirán Estándar; la segunda columna (proyecto) estará en blanco.
  5. Haga clic en la segunda columna en blanco para que aparezca un cuadro que tendrá una línea, "$ (ARCHS_STANDARD)".
  6. Haga doble clic en esa línea para que sea editable, luego cámbiela para que lea “$ (ARCHS_STANDARD_32_BIT)”.
  7. Haga clic fuera del cuadro para confirmar su cambio. Ahora, la primera y la segunda casilla solo tendrán un $ en ellas.
  8. Ahora deberías poder construir.
Neil Faiman
fuente
10

Downgrade Xcode 5.1 a 5.0.2 funcionó para mí, no podía esperar a 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

AlexLopezIT
fuente
3
Esto funciona, la única advertencia es que no puede probar directamente en XCode en un iPhone que ejecuta iOS 7.1. Aquí es donde el simulador resulta útil. La aplicación compilada puede ejecutarse en iOS 7.1 (confirmado tanto en un iPhone 5 como en un 5S), por lo que la degradación hasta que se lance Cordova 3.5 parece la mejor opción.
Ade
Esto funciona mejor para mí ahora también. Descargué Xcode 5.02 y lo copié (nombrándolo primero XCode_502) en Aplicaciones me permitió ejecutarlo junto a Xcode 5.1.
EeKay
Ade He bajado a 5.0.2 y he estado probando mi aplicación en iPhone 5 y iPad 2 ambos con iOS 7.1, sin problemas, también envié la aplicación a iTunes Connect sin problemas.
AlexLopezIT
8

Acaban de lanzar una nueva versión 3.4.1 que aborda estos problemas.

Por lo tanto, actualizo un solo archivo para apuntar a la ETIQUETA 3.4.1:

/usr/local/lib/node_modules/cordova/platforms.js

línea 24 desde:

version: '3.4.0'

a:

version: '3.4.1'

Luego eliminas la carpeta de iOS en tu proyecto y ejecutas:

cordova platform add ios

Esto descargará la nueva plantilla basada en 3.4.1 con todos los parches.

Fabrizio Giordano
fuente
@JPRichardson Gracias, actualizaré ahora :)
dk123
1
npm update cordova -g, luego cordova platform update ios
sepulturkey
5

Siga las instrucciones de este video: https://www.youtube.com/watch?v=EIkJAKcz8DE

Simplemente agregue arm64 en sus proyectos arquitecturas válidas y elimine toda la arquitectura condicional del proyecto de Cordova.

viajero
fuente
Me acabas de ahorrar tantos dolores de cabeza. Este video solucionó el problema con el que estaba luchando durante unas horas.
Bullyen
Esto funcionó para mí. Gracias por hacer el video, lo dejó muy claro.
John Q
3

Pude hacer que mi aplicación se compilara en XCode 5.1 compilando primero el proyecto CordovaLib por separado desde XCode y luego compilando mi proyecto.

Wayferer
fuente
Esto funcionó para mí también. Perfecto, ya que degradar Xcode (y no poder probar en dispositivos iOS7.1) no es una opción para mí. ¡Gracias!
Adam Tuttle
2

Solo tiene que agregar la arquitectura arm64 en cada declaración y configuración de edificio, 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 SDK de iOS

Y LO MAS IMPORTANTE

-Arquitecturas válidas en cordova build settings

Esta configuración genera muchas advertencias, pero solo cambia "% d" por "% ld" en todas las líneas que dice la advertencia.

Felipe Quirós
fuente