Биткод отключен для зависимостей Carthage

Сценарий

Мой проект (общая кодовая база для iOS/watchOS/tvOS) имеет настройки сборки с ENABLE_BITCODE = YES и использует основные библиотеки, которые еще не поддерживают биткод, хотя и цитирует документацию Apple в Прореживание приложений

Биткод используется по умолчанию, но не является обязательным. Для приложений watchOS и tvOS требуется биткод. Если вы предоставляете битовый код, все приложения и платформы в комплекте приложений (все цели в проекте) должны включать битовый код.

В настоящее время я интегрирую эти фундаментальные библиотеки с Carthage.

Проблема

Чтобы иметь чистый процесс сборки, я попытался отправить несколько запросов на включение соответствующим владельцам для включения битового кода, но из-за сложности их кодовых баз, которые работают для нескольких операционных систем/архитектур, мои запросы на вытягивание все еще находятся в обработке. pending: Итак, чтобы иметь возможность собрать свой собственный проект, мне все равно придется вручную изменять их настройки сборки.

Вопрос

Как я могу сократить процесс Carthage для внедрения определенных параметров сборки (в данном случае ENABLE_BITCODE = YES) в соответствующие библиотеки?


person Andrea Mugnaini    schedule 22.11.2017    source источник


Ответы (2)


Я нашел решение, создав сценарий оболочки, способный стереть отключение биткода, на случай, если кто-то столкнется или захочет решить подобную проблему, сценарий таков:

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

поэтому в основном механизм сценария:

  1. скачивание всех зависимостей
  2. для каждой зависимости найдите pbxproj, живущих внутри xcodeproj, и отрежьте строку ENABLE_BITCODE = NO
  3. наконец, создание зависимостей для создания .framework
person Andrea Mugnaini    schedule 22.11.2017

Чтобы добавить к ответу Андреа, убедитесь, что вы строите carthage с --no-use-binaries, поскольку в выпущенной среде зависимости может быть отключен бит-код, который будет использоваться без --no-use-binaries.

person Carl Burnham    schedule 24.03.2020