Ошибка компоновщика Xcode 7 «CrashReporter не содержит битовый код»

Я напрямую связываю PLCrashReporter в своем приложении iOS без использования какого-либо внешнего инструмента, и теперь, когда я пытаюсь скомпилировать его в Xcode 7, я получаю ошибку ссылки:

ld: '.../CrashReporter.framework/CrashReporter(libCrashReporter-iphoneos.a-armv7-master.o)' не содержит битового кода. Вы должны перестроить его с включенным биткодом (параметр Xcode ENABLE_BITCODE), получить обновленную библиотеку от поставщика или отключить биткод для этой цели. для архитектуры armv7

Где взять обновленный фреймворк или исходники, чтобы скомпилировать их с включенным биткодом и избавиться от ошибки, не отключая биткод для всего проекта?


person Fabrizio Bartolomucci    schedule 11.09.2015    source источник
comment
Вы пытались отключить биткод в проекте?   -  person trojanfoe    schedule 11.09.2015
comment
Я предпочитаю не делать этого, так как они являются новым активом для улучшения опыта пользователей, но я нашел исходники и перекомпилировал их.   -  person Fabrizio Bartolomucci    schedule 11.09.2015
comment
Большинство библиотек не обновляются бит-кодом, который приходит из Xcode 7. Поэтому сейчас, чтобы удалить это предупреждение, нам нужно отключить его в настройках. Найдите форму решения здесь stackoverflow.com/a/32710815/3647325   -  person Gaurav Pandey    schedule 24.09.2015
comment
Это может быть так, но как мне обновить фреймворк PLCrashReporter, чтобы использовать битовый код, не отключая его везде, или настроить уже скомпилированный фреймворк? Как уже говорилось, попытка скомпилировать исходный код на XCode 7 — это кошмар.   -  person Fabrizio Bartolomucci    schedule 24.09.2015
comment
Никто не хочет отключать использование биткода, все хотят делать что-то лучше, но пока PLCrashReporter не обновит свой фреймворк, чтобы сделать его совместимым с биткодом, вы должны его отключить.   -  person Gaurav Pandey    schedule 24.09.2015
comment
Собственно так я и сделал, но уже упускаю возможность проверить вылеты приложения; это, конечно, до тех пор, пока Apple не предложит такую ​​​​услугу напрямую.   -  person Fabrizio Bartolomucci    schedule 24.09.2015
comment
Для проверки сбоев приложения с точной строкой, ответственной за сбой, вы также можете использовать инструмент Crash Reports, предлагаемый Apple, начиная с Xcode 6, и это действительно здорово.   -  person Gaurav Pandey    schedule 24.09.2015


Ответы (5)


В итоге я решил эту проблему, собрав PLCrashReporter 1.2.1 из исходников. Эта версия является минимальной, в которой были объединены исправления Xcode 7 и iOS9.

Исходник взят отсюда: PLCrashReporter 1.2.1

Разархивируйте загруженный исходник 1.2.1 в папку.

Потяните проект Xcode внутри этой папки в Xcode и добавьте следующее в раздел «Пользовательские настройки компилятора» «Другие флаги C» настроек сборки проекта: -fembed-bitcode

Затем добавьте следующее в раздел Custom Compiler Settings «Other Warning Flags» настроек сборки проекта: -Wno-error=unused-command-line-argument

Затем закройте проект из графического интерфейса Xcode. Пользовательские настройки необходимы, потому что мы собираемся строить из командной строки с помощью xcodebuild, чтобы избежать ошибок устаревания PLCR, и при этом по умолчанию используется только -fembed-bitcode-marker при построении фреймворка таким образом. Мы переопределяем поведение по умолчанию, и нам нужно подавить предупреждение о резкой остановке, которое это вызывает.

Наконец, из приглашения окна терминала в папке, где находится zip-файл источника, включая файл проекта xcode, выполните следующее:

xcodebuild -configuration Release -target 'Disk Image'

Это запустит сборку и оставит фреймворк в ./build/Release/PLCrashReporter-1.2.1/iOS Framework

Теперь эти шаги создадут платформу с поддержкой биткода, но сторонние отчеты о сбоях несовместимы с биткодом (когда App Store перекомпилирует, у вас нет возможности получить файл символов из этой сборки на лету).

person drshock    schedule 24.09.2015
comment
Я выполнил это предложение, и фактически была создана структура, которую я мог затем импортировать в свой проект. Тем не менее, когда я пытаюсь заархивировать, я получаю: ld: файл универсальный (5 фрагментов), но не содержит (n) фрагмента armv7k: /Users/fbartolom/Documents/cocoa apps/inArrivoHD/CrashReporter.framework/CrashReporter file '/Users /fbartolom/Documents/cocoa application/inArrivoHD/CrashReporter.framework/CrashReporter' для архитектуры armv7k Что касается сторонних инструментов, я использую QuincyKit, который скомпилирован с моим приложением, поэтому он также должен поддерживать биткод. - person Fabrizio Bartolomucci; 31.10.2015
comment
Тем не менее, после добавления этой опции в Xcode и повторения процедуры она отлично компилируется и архивируется. Теперь я пытаюсь отправить приложение в магазин и надеюсь, что мне повезет. - person Fabrizio Bartolomucci; 31.10.2015
comment
Когда вы отправляете в App Store, обязательно снимите флажок «Включить биткод» внизу при использовании этой платформы. - person drshock; 31.10.2015
comment
На самом деле я последовал предложению drshock и сумел включить и мое приложение, и PLCrashReporter с включенным бит-кодом — я предпочитаю следовать предложениям Apple как можно скорее. Сейчас я пытаюсь отправить двоичный файл, но все еще получаю ошибку Cannot Verify client 3000. - person Fabrizio Bartolomucci; 31.10.2015
comment
@Fabrizio Bartolomucci, я бы предложил проверить ipa из Xcode Organizer, затем экспортировать двоичный файл из Xcode (опять же с непроверенным бит-кодом) для типа магазина приложений и вместо этого отправить двоичный файл ipa с помощью Application Loader [ссылка] itunesconnect.apple.com/apploader/ApplicationLoader_3.0.dmg - person drshock; 31.10.2015
comment
Проблема возникла из-за того, что я пропустил обновление до Xcode 6.1 и поэтому не смог установить его на свое устройство IOS 9.1, поэтому я скопировал соответствующую платформу из бета-версии. Это действие каким-то образом заставило iTunes подключиться к предположению, что сам Xcode является бета-версией. В любом случае, теперь я удаляю полную установку и переустанавливаю Xcode для AppleStore, и эта конкретная ошибка была устранена, к сожалению, устранена еще более загадочной: произошла ошибка при загрузке в iTunes Store. - person Fabrizio Bartolomucci; 31.10.2015
comment
Привет еще раз, как вы можете видеть по адресу: требуется архитектура x86 64 в libmumblekit a 3 slices"> stackoverflow.com/questions/33476627/ У меня есть аналогичная проблема с другой библиотекой, которую я не смог исправить только с помощью ваших предложений. Не могли бы вы мягко помочь? Возможно, проблему можно решить, превратив MumbleKit во фреймворк, но я понятия не имею, как это сделать. - person Fabrizio Bartolomucci; 02.11.2015
comment
@drshock Я пытаюсь понять, зачем снимать флажок с включенного битового кода? - person Syed Absar; 08.12.2015
comment
@SyedAbsar отключение битового кода необходимо, потому что символизация в любой такой сторонней библиотеке отчетов о сбоях зависит от синергии с dSYM во время локальной сборки. С включенным биткодом у вас есть динамическое время удаленной перестройки. Возможно, вы сможете загрузить соответствующий dSYM в этой ситуации, и если да, то можете оставить его включенным. Но если нет, вам нужно отключить символизацию любых отчетов. - person drshock; 09.12.2015
comment
Работает! Проблема с зависанием под iOS 9 на iPad Air 2 ушла :-) - person AppsolutEinfach; 08.09.2016

Есть 2 варианта.
1. Скачать PLCrashReporter исходники и скомпилируйте его с включенным биткодом и используйте его в своем проекте.
2. Отключите биткод для вашей цели
Перейдите на вкладку Настройки сборки вашей цели, найдите Enable Bitcode и установите значение НЕТ.

введите здесь описание изображения

person arturdev    schedule 24.09.2015
comment
Наоборот, я включил биткод для PLCrashReporter, воспользовавшись ответом ниже. - person Fabrizio Bartolomucci; 24.09.2015

Это сработало для меня, чтобы включить структуру Rollbar в мой проект:

В моем рабочем пространстве я сначала выбираю свой проект в Навигаторе проектов -> цель моего проекта -> Настройки сборки -> Включить биткод = НЕТ

введите здесь описание изображения

Затем я выбираю PODS в Project Navigator -> Rollbar Target -> Enable Bitcode = NO

введите здесь описание изображения

person ivoroto    schedule 15.04.2016

Испытывал ту же проблему. Я создал структуру отчетов о сбоях из исходного кода, используя https://www.plcrashreporter.org/code.

  • Откройте его в Xcode
  • Выберите цель CrashReporter с красным яблочком.
  • Построить это

Затем выполните поиск в ~/Library/Developer/Xcode/DerivedData/CrashReporter-xxxxxxx, чтобы получить пакет .framework.

person Friggles    schedule 17.09.2015
comment
Да, на самом деле, делая это таким образом, он компилируется без ошибок. Теперь я пытаюсь с включенным биткодом. - person Fabrizio Bartolomucci; 24.09.2015
comment
К сожалению, когда я попытался отправить свое приложение, снова возникла та же проблема. Теперь, когда я пытаюсь скомпилировать его снова, я получаю: ld: предупреждение: объектный файл (/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/arc/libarclite_macosx.a(cf.o) ) был создан для более новой версии OSX (10.6), чем связанный (10.5) ld: предупреждение: объектный файл (/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/arc/libarclite_macosx.a( arclite.o)) был создан для более новой версии OSX (10.6), чем связанная (10.5) - person Fabrizio Bartolomucci; 30.10.2015

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

ld: предупреждение: объектный файл (/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/arc/libarclite_macosx.a(cf.o)) был создан для более новой версии OSX (10.6), чем связанный (10.5) ld: предупреждение: объектный файл (/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/arc/libarclite_macosx.a(arclite.o)) был создан для более новой версии OSX ( 10.6), чем быть связанным (10.5)

Более того, если я устанавливаю разрешающий битовый код на уровне проекта, я получаю немедленную ошибку: цель «CrashReporter-MacOSX-Static» имеет включенный битовый код (ENABLE_BITCODE = YES), но он не поддерживается для платформы «macosx».

Что я должен сделать, чтобы создать фреймворк с включенным биткодом?

person Fabrizio Bartolomucci    schedule 30.10.2015