2015-06-27 6 views
187

Вчера я не узнал тонну предупреждений о библиотеке parse.com:Влияния Xcode параметров сборка «Включить битовый код» Да/Нет

СРОЧНО: все будет битовый код упал, потому что «[путь]/Разобрать. framework/Parse (PFAnalytics.o) 'был построен без битового кода. Вы должны перестроить его с включенным битовым кодом (параметр Xcode ENABLE_BITCODE), получить обновленную библиотеку от поставщика или отключить биткод для этой цели. Примечание. Это будет ошибкой в ​​будущем.

Я отдаю себе отчет в том, что я могу удалить те предупреждения с this answer, но вот интересно, если это будет иметь какие-либо негативные последствия в отношении представления AppStore и/или фактического исполнения моего приложения.

Xcode сообщает вам о

битового кода

Включение этого параметра указывает на то, что цель или проект должен генерировать битового кода во время компиляции для платформ и архитектур, которые поддерживают его. Для архивных сборок бит-код будет сгенерирован в связанном двоичном файле для отправки в хранилище приложений. Для других сборок компилятор и компоновщик будут проверять, соответствует ли код требованиям для генерации битового кода, но не генерирует фактический бит-код. [ENABLE_BITCODE]

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

  • Могу ли я использовать связанный ответ, чтобы обойти проблему без какого-либо негативного воздействия и без ущерба для будущей подачи AppStore?
  • Что действительно делает ENABLE_BITCODE, это будет необязательное требование в будущем?
  • Возникают ли какие-либо последствия, связанные с производительностью, если я включаю/выключаю его?

ответ

304
  • Что делает ENABLE_BITCODE на самом деле, это будет не-факультативное требование в будущем?

Я не уверен, на каком уровне вы ищете ответ на, так что давайте немного поездки. Некоторые из них вы уже знаете.

При создании проекта Xcode вызывает clang для целей Цель-C и swift/swiftc для быстрых целей. Оба этих компилятора компилируют приложение в intermediate representation (IR), один из этих IR - это биткод. Из этого IR программа под названием LLVM берет на себя и создает двоичные файлы, необходимые для x86 32 и 64-битных режимов (для симулятора) и arm6/arm7/arm7s/arm64 (для устройства). Обычно все эти разные двоичные файлы объединяются в один файл, называемый fat binary.

Опция ENABLE_BITCODE разрешает этот последний шаг. Он создает версию приложения с битным двоичным кодом IR. У этого есть ряд хороших функций, но один гигантский недостаток: он никуда не может работать. Чтобы получить приложение с битовым битом для запуска, биткод нужно перекомпилировать (может быть собран или перекодирован ... Я не уверен в правильном глаголе) в двоичном коде x86 или ARM.

Когда приложение с битовым кодом отправляется в App Store, Apple сделает этот последний шаг и создаст готовые двоичные файлы.

В настоящее время приложения для биткода являются необязательными, но история показала, что Apple превращает необязательные вещи в требования (например, 64-разрядную поддержку). Обычно это занимает несколько лет, поэтому сторонние разработчики (например, Parse) успевают обновиться.

  • можно использовать вышеупомянутый метод без какого-либо негативного воздействия и без ущерба для будущего представления AppStore?

Да, вы можете отключить ENABLE_BITCODE и все будет работать так же, как и раньше. Пока Apple не сделает приложения для биткода требованиям к App Store, все будет в порядке.

  • Существуют ли какие-либо влияние на производительность, если включить/отключить его?

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

Что касается положительных воздействий ... ну, это сложно.

Для распространения в App Store Apple создаст отдельные версии вашего приложения для каждой архитектуры машины (arm6/arm7/arm7s/arm64) вместо одного приложения с жирным двоичным кодом. Это означает, что приложение, установленное на устройствах iOS, будет меньше.

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

+7

«Apple создаст отдельные версии вашего приложения для каждой машинной архитектуры (arm6/arm7/arm7s/arm64) вместо одного приложения с жирным двоичным кодом. Это означает, что приложение, установленное на устройствах iOS, будет меньше». Это то, что делает Slicing. Это не связано с Bitcode. – user102008

+3

«Опция ENABLE_BITCODE отключает этот последний шаг». Он не вырезает никакого шага. Все бинарные файлы архитектуры все еще производятся. Затем для архитектуры EACH добавляется информация о битовом PLUS. См. Http://stackoverflow.com/a/31030741/102008 – user102008

+0

@ user102008 hmm ... если это так, возможно, некоторые из моих данных устарели. Из моего чтения нарезка предназначена для пакетов, а биткод - для двоичных файлов. Встраиваемые бинарные файлы FAT будут необходимы для отладочных, специальных и корпоративных приложений. Бинарные файлы FAT могут быть отброшены Apple для приложений приложений приложений во время процесса подачи. –

30

является битовым кодом новой функции iOS 9

битового кодом является промежуточным представлением скомпилированной программы. Приложения, загружаемые в iTunes Connect, содержащие бит-код, будут скомпилированы и связаны в App Store. Включение битового кода позволит Apple повторно оптимизировать бинарное приложение в будущем без необходимости отправки новой версии вашего приложения в магазин.

Примечание: для приложений iOS биткод является стандартным, но необязательным. Если вы предоставляете биткод, все приложения и фреймворки в комплекте приложений должны включать бит-код. Для приложений watchOS требуется биткод

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

+0

«Re-оптимизации вашего приложения бинарного в будущем» - Вы можете объяснить немного больше? – genaks

+0

Здесь говорится, что: «Биткод - это новая функция iOS 9» и что «[...] Для приложений watchOS требуется биткод [...]». Итак, что делать, если я хотел бы создать приложение WatchOS под iOS 8? – superpuccio

3

От docs

  • можно использовать вышеупомянутый метод без какого-либо негативного воздействия и без ущерба для будущего представления AppStore?

Биткод позволит яблоку оптимизировать приложение без необходимости отправки другой сборки. Но вы можете включить эту функцию только в том случае, если все фреймворки и приложения в комплекте приложений включены. Это помогает, но не имеет никакого негативного воздействия.

  • Что на самом деле делает ENABLE_BITCODE, это будет необязательное требование в будущем?

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

  • Существуют ли какие-либо влияние на производительность, если включить/отключить его?

The App Store и операционная систему оптимизировать установку прошивки и watchOS приложения, адаптируя доставки приложений к возможностям конкретного устройства в пользователя, с минимальным расходом. Эта оптимизация, называется прореживанием приложений, позволяет создавать приложения, которые используют большинство устройств , занимают минимальное место на диске и могут вносить будущие обновления , которые могут применяться Apple. Более быстрые загрузки и больше места для других приложений и контента обеспечивают лучший пользовательский интерфейс.

Не должно быть никакого воздействия на производительность.

53

Убедитесь, чтобы выбрать «All», чтобы найти включить параметры сборки битового кода:

Build settings

26

делает крах битового кода отчетности сложнее. Вот цитата из HockeyApp (который также относится к любым другим решениям аварии отчетности):

При загрузке приложения в App Store и оставив «битовый код» флажок включен, Apple будет использовать что битовый код строить и перекомпилируйте его на своем конце, прежде чем распространять его на устройства. Это приведет к тому, что двоичный код получит новый UUID, и есть возможность загрузить соответствующий dSYM через Xcode.

Примечание: ответ был отредактирован на январь 2016 года, чтобы отразить самые последние изменения

+1

В период между Sep и Dec это удалось зафиксировать с помощью новой опции экспорта Xcode Organizer (см. Обновление в цитированном HA howto) и сломанной снова (см. Мой разрешенный [вопрос HA] (http://support.hockeyapp.net/discussions/ проблемы/50477-symbolicating-bitcode-enabled-appstore-app-have-the-dsyms-загружен)) –

7

@ vj9 ТНХ. Я обновляю xcode 7. Это показывает мне ту же ошибку. Построить хорошо после набора "НЕТ"

enter image description here

набор "NO" он работает хорошо.

enter image description here

+0

@Septronic Если вы хотите выбрать ДА. Вам нужно проверить свою поддержку всех сторонних разработчиков. – zszen

+0

Минимальная поддерживаемая вами версия iOS iOS 6 или выше. – shallowThought

1

Здесь Вы можете найти все решения относительно Bitcode

В соответствии с Apple, Doc

битового кода является промежуточным представлением скомпилированной программы. Приложения, загружаемые в iTunes Connect, содержащие бит-код, будут скомпилированы и связаны в хранилище. Включение битового кода позволит Apple повторно оптимизировать бинарное приложение в будущем без необходимости отправки новой версии вашего приложения в магазин.

Xcode по умолчанию скрывает символы, созданные во время сборки, поэтому Apple не читается Apple. Только если вы решите включить символы при загрузке приложения в iTunes Connect, символы будут отправлены в Apple. Вы должны включать символы, чтобы получать отчеты о сбоях от Apple.

Примечание: Для приложений iOS биткод является стандартным, но необязательным. Для приложений watchOS и tvOS требуется биткод. Если вы предоставляете биткод, все приложения и фреймворки в комплекте приложений (все цели в проекте) должны включать в себя биткод. После того, как вы распространяете свое приложение с помощью iTunes Connect, вы можете загрузить файл dSYMs для сборки, описанный в Viewing and Importing Crashes in the Devices Window.

Первоначальный запуск Apple из службы биткода и прошивки приложений был приостановлен, поскольку проблемы с обновлением одного типа аппаратного обеспечения для другого типа аппаратного обеспечения не восстанавливали правильные версии двоичных файлов. Впоследствии эта проблема была исправлена ​​с помощью iOS 9.0.2, а функция снова включена.

Биткод всегда был частью фаз компиляции и оптимизации LLVM, но, перемещая внутреннюю логику на серверы Apple, он перемещает фазу оптимизации и компоновки от времени компиляции разработчиков до развертывания App Store. Это открывает возможности будущей ре-оптимизации или повторного перевода для поддержки более новых и более быстрых процессоров в будущем. Для развертывания watchOS и tvOS требуется развертывание биткодов и может быть условно включено для существующих развертываний iOS с опцией «Включить биткод» в настройках проекта. Это добавит флаг embed-bitcode-marker для отладочных сборников и встроенный-биткод для сборки архива/устройства. Они могут быть переданы компилятору Swift с -embed-bitcode или с использованием clang с -fembed-bitcode.

Биткод также имеет некоторые недостатки. Разработчики могут отлаживать отчеты о сбоях из приложений, сохраняя копии символов отладки, соответствующих двоичному файлу, который был отправлен в Apple. Когда в заданном стеке происходит сбой, разработчик может восстановить исходную трассировку стека, символизируя отчет о сбое, используя эти символы отладки. Однако символы являются побочным продуктом перевода промежуточной формы в двоичную; но если этот шаг выполняется на сервере, эта информация теряется. Apple предоставляет службу отчетов о сбоях, которая может играть роль отладчика при условии, что разработчик загрузил символы отладки во время публикации приложения. Тот факт, что разработчик никогда не видит точного бинарного средства, означает, что они не смогут тестировать конкретные проблемы по мере развития нового оборудования. Также есть некоторые сомнения в том, что Apple может выполнить компиляцию, включая возможность ввода дополнительных подпрограмм или фрагментов кода, но поскольку Apple полностью контролирует процесс публикации, в настоящее время это возможно, независимо от того, использует ли разработчик биткод или скомпилированные двоичные файлы ,

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

Для получения дополнительной информации, пожалуйста, проверьте Here и Here

 Смежные вопросы

  • Нет связанных вопросов^_^