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)
-
Asegúrese de establecer la variable ''Otros C Flags'' en "-fembed-bitcode" en el ''PROYECTO'' y todos los ''OBJETIVOS''.
-
Si hay varios proyectos para los que intenta crear una biblioteca estática, asegúrese de que todos los proyectos tengan
"-fembed-bitcode"
. -
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 -
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.