Не удалось сгенерировать пакет битового кода для arm64

Я сталкиваюсь с ошибкой сборки, когда устанавливаю для параметра «Включить битовый код» значение «ДА» в настройках сборки проекта, над которым я сейчас работаю. Ошибка:

ld: пакет битового кода не может быть сгенерирован, потому что '/Users/nick/Library/Developer/Xcode/DerivedData/PROJECTNAME-esksqmlmtpqewpbktcqeqloackeu/Build/Intermediates.noindex/PROJECT.build/DAMEPbujects/iphoneNormos/DAMEPBug-JiphoneNorms/ /main.o 'был построен без полного битового кода. Все объектные файлы и библиотеки для битового кода должны быть сгенерированы из архива Xcode или установочного файла сборки '/Users/nick/Library/Developer/Xcode/DerivedData/PROJECTNAME-esksqmlmtpqewpbktcqeqloackeu/Build/Intermediates.noindex/PROJECTOSPROJECT. .build / Objects-normal / arm64 / main.o 'для архитектуры arm64 clang: error: команда компоновщика завершилась неудачно с кодом выхода 1 (используйте -v, чтобы увидеть вызов)

(Я отредактировал название проекта на PROJECTNAME, а вариант - на PROJECT, чтобы разместить здесь.)

Сначала я подумал, что это может быть связано с одной из зависимостей, которые этот проект использует через Cocoapods, но у всех них для параметра Enable Bitcode установлено значение YES, и я ожидал увидеть имя библиотеки-нарушителя в сообщении об ошибке, если так и было. В проекте не используются никакие фреймворки, кроме тех, что включены в Cocoapods (и фреймворки Apple).

Я попытался удалить производные данные, перезапустить Xcode, а также очистить папку сборки, но ошибка не исчезла.

Я также пробовал решение '-fembed-bitcode-marker', как предлагается для аналогичной проблемы здесь:

из библиотеки iOS в BitCode

Но я создаю не статическую библиотеку, а приложение, поэтому неудивительно, что это не имело никакого значения.

Проект довольно большой и разрабатывался с 2012 года, поэтому включает в себя Objective-C и Swift. В настоящее время он имеет iOS 8 в качестве цели развертывания и 11.2 в качестве базового SDK. Раньше Bitcode никогда не был включен ни в одной из версий для разработки или производства. У нас включен Bitcode в похожих, но более поздних проектах. В настоящее время мы используем Xcode 9.2 (9C40b).

Я знаю, что могу установить для параметра «Включить битовый код» значение «НЕТ» для настроек сборки проекта, чтобы «исправить» ошибку, но я бы предпочел, чтобы битовый код был включен для повторной оптимизации, которую Apple может выполнить после загрузки двоичного файла, как указано здесь: Apple Docs - Оптимизация приложений

Мне не хватает флага в настройках сборки, который исправляет эту ошибку или, возможно, что-то еще? Любой совет очень ценится!

Большое спасибо, Ник


person Nick Daly    schedule 03.01.2018    source источник


Ответы (1)


После обновления до Xcode 10 мы снова попытались сгенерировать пакет Bitcode для этого проекта и (попробовав разные конфигурации сборки) смогли это сделать. Конфигурация, которая в конечном итоге сработала для этого проекта, была:

Для настроек сборки проекта и модуля:

  • Для параметра Enable Bitcode установлено значение YES.
  • Добавление '-fembed-bitcode' к 'другим флагам C'
  • Добавление BITCODE_GENERATION_MODE со значением bitcode

Эти настройки были необходимы как для отладки, так и для выпуска. Это связано с тем, что отладка выдает ошибку «битовый код не может быть сгенерирован» (см. Исходный вопрос), если мы попытаемся использовать флаги «-fembed-bitcode-marker» или «marker».

Мы бы предпочли использовать «маркерные» варианты для отладки, так как он быстрее компилируется, но, по крайней мере, теперь у нас есть что-то, что работает!

person Nick Daly    schedule 27.10.2018
comment
Добавление части BITCODE_GENERATION_MODE было для меня исправлением для моей собственной статической структуры, встроенной в мой проект xcode 10.2 в 2019 году. СПАСИБО ВАМ - person Mike; 28.08.2019
comment
@Mike, скажите, пожалуйста, куда бы вы добавили BITCODE_GENERATION_MODE? - person Hari Narayanan; 23.09.2019
comment
Я добавил этот BITCODE_GENERATION_MODE, но я не могу удалить эти пользовательские настройки, не могли бы вы, как мне его удалить.! - person Hari Narayanan; 23.09.2019
comment
Добавлен BITCODE_GENERATION_MODE, и теперь он работает, я не уверен, почему этот параметр нигде не упоминается. - person Dinesh Kachhot; 17.08.2020
comment
Что ж, больше ничего не работало, но ваше решение спасло положение. Я устанавливал его на маркер (отладка) и битовый код (выпуск), но он все равно не работал. Еще один шаг, который мне пришлось сделать, - это снять флажок Bitcode при создании IPA. Без этого обработка IPA не выполнялась. Большое спасибо за ваше предложение! - person AJ7; 22.04.2021