ios - Cómo verificar si un framework es BITCODE para Xcode7
ios-frameworks (4)
He observado que la sección __bitcode solo está presente para las bibliotecas estáticas y no para las dinámicas. Entonces, en la solución está el siguiente comando.
otool -l libDeviceManager.a | grep __LLVM
Además, a veces con binarios de grasa, el otool puede no dar segmentos __LLVM aunque esté presente. Puedes usar el siguiente comando para esos casos
otool -arch armv7 libDeviceManager.framework/libDeviceManager | grep __LLVM
Desde Xcode 7 se convirtió en uno de los problemas comunes que los marcos de terceros deberían admitir Bitcode . También podemos deshabilitar el BITCODE configurando ENABLE_BITCODE en NO en la configuración de compilación. Pero no quiero desactivarlo, en cambio quiero convertir todos mis marcos a BITCODE compatible.
Entonces, ¿cómo verificar si un marco es compatible con BITCODE además de compilar el marco en Xcode? A veces, Xcode da error para la compatibilidad con BITCODE para un marco, dejando a los otros a pesar de que no tienen soporte para BITCODE.
¿Hay alguna herramienta / control de línea de comando?
La respuesta aceptada sugiere que debes hacer grep __LLVM
pero prefiero hacer esto
otool -l libName.o | grep __bitcode
Como hay diferentes segmentos __LLVM
y no todos estos indican la presencia de Bitcode. Aquí hay un ejemplo:
Section
sectname __bitcode
segname __LLVM
addr 0x00000000000007d0
size 0x0000000000000f10
offset 3360
align 2^4 (16)
reloff 0
nreloc 0
flags 0x00000000
reserved1 0
reserved2 0
Section
sectname __cmdline
segname __LLVM
addr 0x00000000000016e0
size 0x0000000000000069
offset 7216
align 2^4 (16)
reloff 0
nreloc 0
flags 0x00000000
reserved1 0
reserved2 0
La presencia de la Sección __cmdline
no indica que Bitcode esté presente, pero también se encontraría cuando solo se busca __LLVM
.
Puedes probar estos comandos:
otool -arch armv7 -l libDeviceManager.a | grep bit code
y
otool -arch arm64 -l libDeviceManager.a | grep bitcode
En esta discusión del Foro de Desarrolladores de Apple , los usuarios dshirley y bwilson sugieren usar las herramientas de línea de comandos otool
y grep
para verificar si existen secciones de códigos de bits.
$ otool -l libName.o | grep __LLVM
o
$ otool -l MyFramework.framework/Versions/A/MyFramework | grep __LLVM
Al ejecutar el comando anterior, si la biblioteca contiene código de segname __LLVM
salida de segname __LLVM
.