c ios8 xcode7-beta2 bitcode

Biblioteca de iOS para BitCode



ios8 xcode7-beta2 (5)

Recientemente descargué Xcode 7 beta, y Xcode se queja de que algunas de mis bibliotecas C no se compilan en BitCode. ¿Cómo le diría a Clang que produzca BitCode que sea compatible con iOS? He visto respuestas similares en stackoverflow, pero no sé si se aplican a la producción de bibliotecas BitCode para iOS.

Editar:

Estoy usando la configuración correcta, -fembed-bitcode, pero cuando trato de archivar, aparece el error: ld: advertencia: ignorando el archivo XXXX / XXXX, el archivo se creó para el archivo que no es la arquitectura que se está vinculando (arm64). Cuando uso -fembed-bitcode-marker, puedo archivar, pero obtengo el error: no se pudo generar el paquete de código de bits completo porque XX / XX se creó solo con el marcador de código de bits. La biblioteca debe generarse a partir de la compilación del archivo Xcode con el código de bits habilitado.

¿Alguna idea sobre lo que va mal? La biblioteca se está compilando correctamente, pero no me permite archivar. Creé una función de agregar simple y la convertí en una biblioteca, y tengo los mismos síntomas, por lo que no es la biblioteca que estoy compilando.

Edición 2: debe compilar las versiones arm64 y armv7 utilizando código de bits y lipo juntas. El uso de código de bits no elimina la necesidad de una biblioteca gruesa al archivar. fuente: https://forums.developer.apple.com/message/25132#25132


Lo que necesita es -fembed-bitcode. Cuando ENABLE_BITCODE está habilitado, Xcode compila con -fembed-bitcode-marker para compilaciones normales y con -fembed-bitcode para compilaciones de archivo. Una opción simplemente "marca" dónde estaría el código de bits en el binario después de una compilación de archivo y aplica las nuevas reglas de código de bits, mientras que la otra realmente hace la generación de código de bits completa, que probablemente sea más lenta y, por lo tanto, no esté habilitada en todo tipo de compilación .

La guía de Syo Ikeda para manejar BITCODE también podría ayudarlo a:

Puede encontrar la plataforma completa de diapositivas aquí.


Al crear bibliotecas estáticas, debe agregar lo siguiente para la generación de código de bits:

-fembed-bitcode

para una biblioteca dinámica, necesita vincular adicionalmente con

-fembed-bitcode

Nota: este comando solo está disponible con Xcode7 +

Con respecto a la respuesta aceptada de usar -fembed-bitcode-marker

Debe tener en cuenta que una compilación normal con la opción -fembed-bitcode-marker producirá secciones de código de bits incrustadas de tamaño mínimo sin ningún contenido real. Esto se hace como una forma de probar los aspectos relacionados con el código de bits de su compilación sin ralentizar el proceso de compilación. El contenido real del código de bits se incluye cuando realiza una compilación de archivo.

bwilson Apple Staff. https://forums.developer.apple.com/thread/3971#12225

Para ser más especifico:

  • -fembed-bitcode-marker simplemente marca dónde estaría el código de bits en el binario después de una compilación de archivo.
  • -fembed-bitcode realidad realiza la generación e incrustación de código de bits completo, por lo que esto es lo que necesita usar para construir bibliotecas estáticas.
  • Xcode mismo construye con -fembed-bitcode-marker para compilaciones regulares (como desplegar en simulador)
  • Xcode solo -fembed-bitcode con -fembed-bitcode para -fembed-bitcode de archivo / compilaciones de producción (ya que esto solo es necesario para Apple).

Si aún tiene problemas después de agregar el -fembed-bitcode a las otras banderas C, busque "Activar código de bits" en "Opciones de compilación" y configúrelo en No. Esto le permitirá archivar correctamente.


Si está creando una biblioteca estática y desea habilitar el código de bits, solo el (1) ENABLE_BITCODE = YES puede no ser suficiente.

(2) También con la configuración -fembed-bitcode el error a continuación todavía se estaba -fembed-bitcode para múltiples archivos cuando se construía en Teamcity

bitcode bundle could not be generated because ‘/path/fileInYourStaticLib.a(fileInYourStaticLib.o)’ was built without full bitcode. All object files and libraries for bitcode must be generated from Xcode Archive or Install build for architecture arm64

Pocos consejos / cosas a tener en cuenta que me ayudaron a resolver el problema, además de los pasos anteriores (1) y (2)

  1. Asegúrese de establecer la variable ''Otros C Flags'' en "-fembed-bitcode" en el ''PROYECTO'' y todos los ''OBJETIVOS''.

  2. Si hay varios proyectos para los que intenta crear una biblioteca estática, asegúrese de que todos los proyectos tengan "-fembed-bitcode" .

  3. On Build Settings, click on the + sign at the top to add a user-defined build setting with the name BITCODE_GENERATION_MODE , and set Debug to marcador , Release to bitcode

  4. Si los pasos anteriores no funcionan, también puede probar esta opción. On Build Settings -> Other C flags, set Debug to -fembed-bitcode-marker , and Release to -fembed-bitcode

Este blog fue de gran ayuda https://medium.com/@heitorburger/static-libraries-frameworks-and-bitcode-6d8f784478a9

Además, cada vez que realice los cambios anteriores, intente eliminar DerivedData, Limpie el proyecto XCode y, posiblemente, salga y reinicie XCode


Vaya a la configuración de compilación . Busque " banderas compiladoras personalizadas ".
Agregue -fembed-bitcode a otras banderas de C. Esto asegurará que la lib esté construida con compatibilidad de código de bits en tiempo de compilación. Hice esto para iOS de 64 bits y 32 bits, y los lipoodé en uno. Funciona de maravilla.

Como ustedes tuvieron consultas, aquí hay una captura de pantalla de la configuración: la configuración es la misma para el objetivo del proyecto y el objetivo del SDK.

Bitcode lib no funcionará con Xcode 6.