Влияние вариантов сборки Xcode "Включить биткод" Да/Нет

Вчера я узнал массу предупреждений относительно библиотеки parse.com:

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

Мне известно о том, что я могу удалить это предупреждение с помощью этого ответа, но теперь я задаюсь вопросом, будет ли оно иметь какое-либо негативное влияние на представление AppStore и/или фактическая производительность моего приложения.

Xcode сообщает вам о биткоде

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

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

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

Ответ 1

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

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

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

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

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

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

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

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

  • Возможен ли какой-либо эффект, если я его включил или отключил?

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

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

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

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

Ответ 2

Убедитесь, что вы выбрали "Все", чтобы найти настройки создания битового кода включения:

Настройки сборки

Ответ 3

Биткод - это новая функция iOS 9

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

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

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

Ответ 4

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

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

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

Ответ 5

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

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

установите "НЕТ", он работает хорошо.

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

Ответ 6

Из docs

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

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

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

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

  • Возможен ли какой-либо эффект, если я его включил или отключил?

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

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

Ответ 7

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

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

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

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

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

Первоначальное развертывание 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 полностью контролирует процесс публикации, в настоящее время это возможно, независимо от того, использует ли разработчик биткод или скомпилированные двоичные файлы.

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

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