2012-09-13 12 views
7

Con el iPhone 5 y otros dispositivos con armv7s apareciendo ahora, existen problemas de compatibilidad con los marcos de terceros existentes (de código cerrado) como Flurry que se construyen sin esta nueva arquitectura .¿Hay un indicador del compilador que indique la falta de arquitectura de armv7s?

Una opción es esperar hasta que lanzan una nueva compilación, pero esperaba que hubiera una bandera del compilador o algo que pudiera usar en mi proyecto de Xcode que le permitiera saber que no esperaba la arquitectura de armv7s de este marco, y usa el brazov7 en su lugar. ¿Existe algo como esto?

+10

** Stack Overflow no cierra ni elimina preguntas debido a NDA entre terceros **. Los moderadores no están aquí para hacer cumplir los acuerdos entre dos terceros independientes. Independientemente de si es o no NDA, si es una pregunta práctica y respondible y cumple con las pautas de calidad de Overflow de pila, entonces la pregunta permanece abierta y no recuperada. – casperOne

+1

Hola Matt. Solo quería darle una actualización rápida de que Flurry lanzó 4.0.3 con soporte para armv7s el viernes, 14 de septiembre. Hubo un lanzamiento de seguimiento 4.0.4 ayer, 17 de septiembre, para eliminar algunas advertencias del compilador. –

+0

Gracias, lo recibí minutos después de su lanzamiento. – coneybeare

Respuesta

10

No es posible cargar un marco que no incluya la arquitectura de destino.

Lo que podría hacer es enviar solo una aplicación armv7 hasta que se actualicen los marcos. La aplicación seguirá funcionando en el iPhone 5, pero no utilice las optimizaciones de rendimiento más recientes que ofrece.

O si pudieras vivir sin el framework en la nueva arquitectura, podrías vincularlo débilmente. Pero luego debe verificar su código si está cargado en cualquier lugar donde use cosas del marco.

6

Solía ​​haber un indicador de enlazador en GCC, allow_sub_type_mismatches, que le permitiría mezclar y combinar versiones de arquitectura ARM en bibliotecas vinculadas, pero parece que se han llevado eso en versiones recientes de Xcode.

Sin embargo, esto puede ser pirateado de otra manera; hacer una copia del marco, ver su contenido, abrir el archivo real biblioteca de código dentro de la misma en un editor hexadecimal, y haga lo siguiente reemplazar todo:

CEFAEDFE 0C000000 09000000 

a

CEFAEDFE 0C000000 0B000000 

Lo que Lo que básicamente hace es cambiar el encabezado dentro de cada objeto de código para identificarlo como ARMv7s en lugar de un código ARMv7: los conjuntos de instrucciones son retrocompatibles (o parecen serlo, de todos modos), por lo que debería funcionar bien incluso con este truco, aunque Tengo que admitir que no lo sabremos con certeza hasta que realmente tengamos la oportunidad de probarlo en un iPhone 5.

De todos modos, una vez que haya modificado el marco, simplemente agregue ambas versiones a su proyecto y vincule con el apropiado de cada arquitectura. También es posible que pueda crear un nuevo marco único utilizando lipo para fusionar las bibliotecas modificadas y originales.

+2

Esto es exactamente lo que hice y mostrar cómo aquí - http://www.galloway.me.uk/2012/09/hacking-up-an-armv7s-library/. – mattjgalloway

+0

Cool: sin duda optimiza el proceso para tener un script automatizado para él, además elimina la posibilidad de cambiar accidentalmente un CEFAEDFE 0C000000 09000000 que no estaba relacionado con el encabezado Mach-O. – Ertebolle

+1

¿Qué quiere decir con "quitado en LLVM"? ¡Es una bandera enlazadora, por el bien del Gran Profeta Zarquon! No tiene nada que ver con el compilador, y de hecho funciona, aunque probablemente sea la peor manera posible de resolver este problema (sugerencia: la forma correcta es optar por inhabilitar ARMv7s quitándolo de la configuración de compilación Arquitecturas). –

Cuestiones relacionadas