Biblioteca de iOS a BitCode


Recientemente he descargado Xcode 7 beta, y Xcode se queja de que algunas de mis bibliotecas C no están compiladas en BitCode. ¿Cómo podría decirle a Clang que produzca BitCode que sea compatible con iOS? He visto respuestas similares en stackoverflow, pero no se si se aplican a la producción de bibliotecas de BitCode para iOS.

Editar:

Estoy usando la configuración correcta, - fembed-bitcode, pero cuando intento archivar, obtengo el error: ld: advertencia: ignorando el archivo XXXX / XXXX, el archivo fue construido para el archivo que no es la arquitectura enlazada (arm64). Cuando uso-fembed-bitcode-marker, puedo archivar, pero recibo el error: el paquete completo de bitcode no se pudo generar porque XX/XX se construyó solo con el marcador de bitcode. La biblioteca debe ser generada a partir de Xcode archive build con bitcode habilitado.

Alguna idea sobre lo que va mal? La biblioteca está compilando con éxito, pero no me permite archivar. Creé una función de adición simple y la convertí en una biblioteca, y obtengo lo mismo síntomas, así que no es la biblioteca la que estoy compilando.

Editar 2: Debes construir las versiones arm64 y armv7 usando bitcode y lipo juntos. El uso de bitcode no elimina la necesidad de una biblioteca fat al archivar. fuente : https://forums.developer.apple.com/message/25132#25132

Author: stack_tom, 2015-07-05

5 answers

Al construir bibliotecas estáticas, debe agregar lo siguiente para la generación de bitcode:

-fembed-bitcode 

Para una biblioteca dinámica necesita enlazar adicionalmente con

-fembed-bitcode

Nota: Este comando solo está disponible con Xcode7 +

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

Usted debe ser consciente de que una construcción normal con el -la opción fembed-bitcode-marker producirá secciones de bitcode incrustadas de tamaño mínimo sin ningún contenido real. Esto se hace como una forma de probar los aspectos relacionados con el bitcode de su compilación sin ralentizar el proceso de construcción. El contenido real de bitcode se incluye cuando lo haces una compilación de archivos.

Bwilson Personal de Apple. https://forums.developer.apple.com/thread/3971#12225


, Para ser más específicos:

  • -fembed-bitcode-marker simplemente marca dónde estaría el bitcode en el binario después de una compilación de archivo.
  • -fembed-bitcode en realidad hace la generación e incrustación de bitcode completa, por lo que esto es lo que necesita usar para construir bibliotecas estáticas.
  • Xcode se construye con -fembed-bitcode-marker para compilaciones regulares (como deploy to simulator)
  • Xcode solo construye con -fembed-bitcode para compilaciones de archivos / compilaciones de producción (ya que esto solo es necesario para Apple).
 56
Author: Danoli3,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-03-12 12:53:10

Vaya a la configuración de compilación . Busca"custom compiler flags".
Añadir -fembed-bitcodea Otras banderas C. Esto asegurará que la lib se construya con compatibilidad con bitcode en tiempo de compilación. Hice esto para iOS de 64 bits y 32 bits, y los lipo en uno. Funciona como un encanto.

Ya que ustedes tenían 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.

introduzca la descripción de la imagen aquí


El bitcode lib no funcionará con Xcode 6.

 45
Author: Gautam Jain,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-04-12 11:29:24

Si todavía tiene problemas después de agregar el -fembed-bitcode a las Otras banderas C, busque "Habilitar Bitcode" en "Opciones de compilación" y establézcalo en No. Esto le permitirá archivar correctamente.

 21
Author: Ian Han,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-04-27 03:53:26

Lo que necesitas es-fembed-bitcode. Cuando ENABLE_BITCODE está habilitado, Xcode construye con-fembed-bitcode-marker para compilaciones regulares y con-fembed-bitcode para compilaciones de archivos. Una opción simplemente "marca" dónde estaría el bitcode en el binario después de una compilación de archivo e impone las nuevas reglas de bitcode, mientras que la otra realmente hace la generación completa de bitcode, que es probablemente más lenta y, por lo tanto, no está habilitada en cada tipo de compilación.

Guía de Syo Ikeda para manejar BITCODE también podría ayudarle:

Puede encontrar la cubierta de diapositivas completa aquí.

 11
Author: Xeieshan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-05-06 13:26:03

Si está construyendo una biblioteca estática y desea habilitar el bitcode, solo el (1) ENABLE_BITCODE = YES puede no ser suficiente.

(2) También con la configuración -fembed-bitcode el siguiente error todavía se estaba lanzando para varios archivos cuando se construyó 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

Algunos consejos / cosas a considerar que me ayudaron a resolver el problema en última instancia, además de los pasos anteriores (1) y (2)

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

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

  3. On Build Settings, click on the + sign at the top to add a user-defined build setting with the nameBITCODE_GENERATION_MODE , and set Debug to marker , 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 ayudar https://medium.com/@heitorburger/static-libraries-frameworks-and-bitcode-6d8f784478a9

También cada vez que realice los cambios anteriores, intente eliminar los datos derivados, Limpie el proyecto XCode y posiblemente salga y reinicie XCode

 6
Author: Naishta,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-04-27 08:45:42