битового кода является промежуточным представлением скомпилированной программы. Приложения, загружаемые в 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 полностью контролирует процесс публикации, в настоящее время это возможно, независимо от того, использует ли разработчик биткод или скомпилированные двоичные файлы ,
Наконец, биткод на сервере может быть переведен для поддержки новых архитектур и наборов инструкций по мере их развития.При условии, что они поддерживают соглашение о вызове и размер выравнивания и слова, приложение для битового кодирования может быть переведено в разные типы архитектуры и оптимизировано специально для нового процессора. Если используются стандартные библиотеки для математических и векторных подпрограмм, их можно оптимизировать в соответствии с конкретными векторными инструкциями для получения максимальной производительности для данного приложения. Оптимизаторы могут даже генерировать несколько разных кодировок и судить по размеру или скорости выполнения.
«Apple создаст отдельные версии вашего приложения для каждой машинной архитектуры (arm6/arm7/arm7s/arm64) вместо одного приложения с жирным двоичным кодом. Это означает, что приложение, установленное на устройствах iOS, будет меньше». Это то, что делает Slicing. Это не связано с Bitcode. – user102008
«Опция ENABLE_BITCODE отключает этот последний шаг». Он не вырезает никакого шага. Все бинарные файлы архитектуры все еще производятся. Затем для архитектуры EACH добавляется информация о битовом PLUS. См. Http://stackoverflow.com/a/31030741/102008 – user102008
@ user102008 hmm ... если это так, возможно, некоторые из моих данных устарели. Из моего чтения нарезка предназначена для пакетов, а биткод - для двоичных файлов. Встраиваемые бинарные файлы FAT будут необходимы для отладочных, специальных и корпоративных приложений. Бинарные файлы FAT могут быть отброшены Apple для приложений приложений приложений во время процесса подачи. –