Как проверить, поддерживает ли среда BITCODE для Xcode7
Из Xcode 7 это стало одной из распространенных проблем, которые сторонние структуры должны поддерживать Bitcode. Мы также можем отключить BITCODE, установив ENABLE_BITCODE в NO в настройках Build. Но я не хочу отключать его, вместо этого хочу преобразовать все мои фреймворки в совместимые с BITCODE.
Итак, как проверить, совместим ли среда с BITCODE, кроме компиляции фреймворка в Xcode. Иногда Xcode дает ошибку для совместимости BITCODE для одной структуры, оставляя остальных, даже если у них нет поддержки BITCODE.
Есть ли проверка инструмента/командной строки?
Ответы
Ответ 1
От этот форум разработчиков Apple, пользователь dshirley и bwilson предлагают использовать инструменты командной строки otool
и grep
, чтобы проверить, существуют ли разделы биткода.
$ otool -l libName.o | grep __LLVM
или
$ otool -l MyFramework.framework/Versions/A/MyFramework | grep __LLVM
Запуск вышеуказанной команды, если библиотека содержит биткод, вы увидите вывод segname __LLVM
.
Ответ 2
Принятый ответ предполагает, что вы должны сделать grep __LLVM
, но я предпочел бы сделать это
otool -l libName.o | grep __bitcode
поскольку существуют разные сегменты __LLVM
, и не все из них указывают на наличие битового кода. Вот пример:
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
Наличие раздела __cmdline
не указывает, что присутствует бит-код, но он также будет найден при простом поиске __LLVM
.
Ответ 3
Я заметил, что раздел __bitcode присутствует только для статических библиотек, а не для динамических библиотек. Итак, по решению приведена ниже команда.
otool -l libDeviceManager.a | grep __LLVM
Кроме того, иногда с двойными жировыми отлоями может не давать сегменты __LLVM, даже если они присутствуют. Вы можете использовать следующую команду для этих случаев
otool -arch armv7 -l libDeviceManager.framework/libDeviceManager | grep __LLVM
Ответ 4
вы можете попробовать следующие команды:
otool -arch armv7 -l libDeviceManager.a | grep bit code
и
otool -arch arm64 -l libDeviceManager.a | grep bitcode