Бит-код отключен на зависимостях Карфагена
сценарий
Мой проект (кодовая база для iOS/watchOS/tvOS) имеет настройки сборки с ENABLE_BITCODE = YES
и использует преимущества фундаментальных библиотек, которые еще не поддерживают битовый код, хотя цитирует документацию Apple в App Thinning
Биткод по умолчанию, но необязательно. Для приложений watchOS и tvOS требуется битовый код. Если вы предоставляете битовый код, все приложения и платформы в комплекте приложений (все цели в проекте) должны включать битовый код
В настоящее время я интегрирую эти фундаментальные библиотеки с Карфагеном.
проблема
Чтобы получить чистый процесс сборки, я попытался отправить несколько запросов извлечения соответствующим владельцам для включения битового кода, но из-за сложности их кодовых баз, которые работают для нескольких операционных систем / архитектур, мои запросы извлечения все еще находятся в в ожидании: поэтому, чтобы иметь возможность собрать свой собственный проект, мне все равно придется вручную изменить их параметры сборки.
Вопрос
Как я могу замкнуть процесс Карфагена для введения определенных настроек сборки (в этом случае ENABLE_BITCODE = YES
в соответствующие библиотеки?
1 ответ
Я нашел решение, сделав сценарий оболочки, способный стереть отключение битового кода, на случай, если кто-то сталкивается или заинтересован решить аналогичную проблему, сценарий таков:
carthage update --platform ios
for D in ./Carthage/Checkouts/*; do
if [ -d "${D}" ]; then
find $D -type d -name \*.xcodeproj -print0 |
while IFS= read -r -d $'\0' folder; do
sed -i '' 's/ENABLE_BITCODE = NO;//g' $folder/project.pbxproj
done
fi
done
carthage build --platform ios
поэтому в основном механизм скрипта:
- загрузка всех зависимостей
- для каждой зависимости найдите
pbxproj
жить внутриxcodeproj
и отрезать строкуENABLE_BITCODE = NO
- наконец, построение зависимостей, чтобы сделать.
framework
Чтобы добавить к ответу Андреа, убедитесь, что вы строите карфагию с --no-use-binaries
поскольку у зависимости может быть отключен битовый код в выпущенной структуре, которая будет использоваться без --no-use-binaries
.