ios - getting - Xcode 5 advierte sobre la configuración de mi arquitectura cuando abro mi proyecto de Google Maps creado en Xcode 4
sdk map ios (3)
Acabo de actualizar el recién lanzado Xcode 5. Tengo una aplicación de iOS en desarrollo que utiliza el SDK de iOS de Google Maps. Cuando estaba desarrollando en Xcode 4, cambié la configuración de Architectures
en la configuración de mi proyecto, como se indica en el paso 7 de las instrucciones de Google para agregar el SDK al proyecto :
7. Elija su proyecto, en lugar de un objetivo específico, y abra la pestaña Configuraciones de compilación. Reemplace el valor predeterminado de Arquitecturas con armv7. En la sección Banderas del otro enlace, agregue -ObjC. Si estas configuraciones no son visibles, cambie el filtro en la barra Configuración de compilación desde Básico a Todo.
Todo estaba bien en Xcode 4. Sin embargo, cuando abro mi proyecto en Xcode 5, veo la siguiente advertencia en el navegador de problemas:
Validar configuración del proyecto
Actualizar a la configuración recomendada
Cuando hago clic en la advertencia, Xcode me lleva a la configuración de mi proyecto y muestra una ventana emergente con los botones "Cancelar" y "Realizar cambios", y la siguiente descripción del cambio que quiere realizar.
Proyecto ''Your Project'' - Seleccionar arquitecturas automáticamente
El proyecto ''Your Project'' anula la configuración de Architectures. Esto eliminará la configuración y permitirá a Xcode seleccionar automáticamente Arquitecturas basadas en el hardware disponible para la plataforma activa y el destino de despliegue.
Intenté hacer clic en ''Realizar cambios'' y dejar que Xcode hiciera lo que quisiera hacer, y la aplicación todavía funcionaba bien para los simuladores. Sin embargo, cuando intenté conectar un iPhone 5 (que admite ARMv7S) y ejecutarlo, la aplicación no pudo compilarse con el siguiente error de enlazador:
Ld /Users/macmini/Library/Developer/Xcode/DerivedData/Your_App-bmrouudjlblpafdjzhpwcuekzgwu/Build/Products/Debug-iphoneos/Your/ App.app/Your/ App normal armv7s
cd "/Users/macmini/Documents/Your App"
setenv IPHONEOS_DEPLOYMENT_TARGET 6.1
setenv PATH "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin:/Applications/Xcode.app/Contents/Developer/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin"
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -arch armv7s -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk -L/Users/macmini/Library/Developer/Xcode/DerivedData/Your_App-bmrouudjlblpafdjzhpwcuekzgwu/Build/Products/Debug-iphoneos -F/Users/macmini/Library/Developer/Xcode/DerivedData/Your_App-bmrouudjlblpafdjzhpwcuekzgwu/Build/Products/Debug-iphoneos -F/Users/macmini/Documents/Your/ App -filelist /Users/macmini/Library/Developer/Xcode/DerivedData/Your_App-bmrouudjlblpafdjzhpwcuekzgwu/Build/Intermediates/Your/ App.build/Debug-iphoneos/Your/ App.build/Objects-normal/armv7s/Your/ App.LinkFileList -dead_strip -ObjC -fobjc-arc -fobjc-link-runtime -miphoneos-version-min=6.1 -framework SystemConfiguration -framework MapKit -framework QuartzCore -framework OpenGLES -lz -licucore -lc++ -framework ImageIO -framework GLKit -framework CoreText -framework CoreLocation -framework AVFoundation -framework CoreData -framework UIKit -framework Foundation -framework CoreGraphics -framework GoogleMaps -Xlinker -dependency_info -Xlinker /Users/macmini/Library/Developer/Xcode/DerivedData/Your_App-bmrouudjlblpafdjzhpwcuekzgwu/Build/Intermediates/Your/ App.build/Debug-iphoneos/Your/ App.build/Objects-normal/armv7s/Your/ App_dependency_info.dat -o /Users/macmini/Library/Developer/Xcode/DerivedData/Your_App-bmrouudjlblpafdjzhpwcuekzgwu/Build/Products/Debug-iphoneos/Your/ App.app/Your/ App
ld: file is universal (2 slices) but does not contain a(n) armv7s slice: /Users/macmini/Documents/Your App/GoogleMaps.framework/GoogleMaps file ''/Users/macmini/Documents/Your App/GoogleMaps.framework/GoogleMaps'' for architecture armv7s
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Una vez que revertí los cambios automáticos que Xcode había hecho, mi aplicación volvió a compilarse bien para el iPhone 5, pero por supuesto tuve la advertencia.
¿Cómo puedo satisfacer Xcode y deshacerme de la advertencia mientras sigo permitiendo que mi aplicación se construya con éxito para iPhone 5?
El vinculador le está dando un error porque el marco de trabajo de GoogleMaps que está utilizando no es compatible con la arquitectura de armv7s. Tal vez la última versión del marco de GoogleMaps tenga tal soporte o tal vez tenga que esperar una actualización de Google.
Vaya, como sucedió, solo tardé unos segundos de experimentación después de publicar esta pregunta para encontrar la respuesta yo mismo:
- Haga clic en la advertencia ''Validar configuración del proyecto'' en Issue Navigator.
- Desmarque la casilla de verificación a la izquierda del cambio sugerido ''Automatically Select Architectures''.
- Haga clic en "Hecho" (o "Realizar cambios" si quedan otros cambios en la lista que realmente desea hacer; en mi caso, este fue el único).
Ahora su configuración es la misma que antes, y puede compilar para iPhone 5, pero la advertencia ya no existe.
Me siento un poco triste ahora por haber dedicado mi tiempo a publicar esta pregunta, pero dejo la pregunta y esta respuesta aquí en caso de que ayude a alguien en el futuro.
Google Maps SDK v1.5 ahora es compatible con ARMv7S. De las notas de la versión v1.5:
El SDK de Google Maps para iOS ahora viene con un segmento de armv7s. (Problema 4745)
El hecho de admitir ARMv7S en su aplicación mejorará el rendimiento, por lo que el mejor curso de acción si observa la advertencia descrita en la pregunta es actualizar su versión del SDK de Google Maps a la versión 1.5 (o posterior, si está leyendo esto en el futuro) y luego haga doble clic en la advertencia y permita que Xcode cambie la configuración de su arquitectura a la predeterminada.