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


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

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

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

Xcode информирует Вас о bitcode

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

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

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

7 ответов:

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

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

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

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

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

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

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

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

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

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

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

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

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

обязательно выберите "все", чтобы найти настройки сборки enable bitcode:

Build settings

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

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

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

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

Bitcode делает отчет о сбоях сложнее. Вот цитата из HockeyApp (что также относится к другие crash reporting solutions):

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

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

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

enter image description here

установите " нет " он работает хорошо.

enter image description here

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

согласно Apple Doc

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

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

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

первоначальное развертывание Apple службы bitcode и App thinning было приостановлено, поскольку проблемы при обновлении с одного типа оборудования на другой тип оборудования не восстановили правильные версии двоичных файлов. Эта проблема была впоследствии исправлена с iOS 9.0.2 и функция снова включена.

Bitcode всегда был частью этапов компиляции и оптимизации LLVM, но, перемещая внутреннюю логику на серверы Apple, он перемещает этапы оптимизации и сборки от времени компиляции разработчика до развертывания магазина приложений. Это открывает потенциал будущей повторной оптимизации или повторного перевода для поддержки новых и более быстрых процессоров в будущем. Развертывание битового кода требуется для депломентов watchOS и tvOS и может быть условно включено для существующие развертывания iOS с опцией "включить Bitcode" в настройках проекта. Это добавит размещения-биткода-маркер флаг для отладки, а добавьте-биткода в архиве/устройство строит. Они могут быть переданы компилятору Swift с-embed-bitcode или с помощью clang с-fembed-bitcode.

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

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

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

с docs

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

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

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

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

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

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

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