Что делает bitcode_strip (xcrun)? - PullRequest
       14

Что делает bitcode_strip (xcrun)?

0 голосов
/ 29 сентября 2018

Добавив TwilioVideo в качестве зависимости Pods в моем проекте iOS, я понял, что его размер значительно увеличился (+100 Mo).

После некоторых исследований я нашел эту тему и особенно этусообщение, которое советует удалить битовый код с помощью этой команды через Podfile .

. Я не очень много знал о битовом коде, пока не нашел эту замечательную статью об этом: https://lowlevelbits.org/bitcode-demystified/

Теперь я понимаючто такое битовый код и почему Apple запрашивает его, а также как они используют его для перекомпиляции приложений, если они этого хотят.Тем не менее, я до сих пор не понимаю, что это за операция «раздели битовый код», поэтому я ищу информацию об этом (на самом деле она работала хорошо, так как после добавления этих строк в мой Podfile мое приложение теперь «только» на 30 Мо больше).

Спасибо за помощь.

1 Ответ

0 голосов
/ 01 октября 2018

Вот справочная страница для bitcode_strip

, чтобы удалить или оставить сегмент битового кода в файле Mach-O

bitcode_strip input [ -r | -m | -l ] -o output

Что такое файл Mach-O ?

Mach-O - это формат файла для исполняемых файлов, объектного кода, общих библиотек, динамически загружаемого кода,и дампы ядра

Mach-O также находится там, где хранятся исполняемые файлы iOS и OS X, а также битовый код.

Вот справочная страница для xcrun

запускать или находить инструменты разработки

xcrun [-sdk SDK] -find <tool_name>

Насколько я понимаю после прочтения ссылок, которые вы прикрепили, битовый код является посредникомшаг в процессе компиляции.Если вы отправите свой исходный код в Apple самостоятельно, в конечном итоге Apple будет иметь разные версии объектного кода в каждом приложении, соответствующие количеству разных типов процессоров, на которых могут работать OS X и iOS (более 4 разных типов).Теперь Apple может скомпилировать ваш исходный код в большинстве случаев в минимальную форму, называемую bitcode, в которой нет багажа, связанного с тем, на каком процессоре он будет работать.

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

Остальная часть пути: специфичные для машины вещи, такие как оптимизация, сборка и компоновка, которые отличаются на iPhone по сравнению св macbook, например

Если вы отправите битовый код в магазин приложений, гораздо проще завершить его компиляцию в разные окончательные формы для разных типов ЦП.Похоже, ваша проблема заключалась в том, что битовый код в вашем проекте оказался довольно большим файлом (это произошло из-за того, что Twilio добавил поддержку битового кода).«Удаление» битового кода в основном удаляло битовый код из вашего проекта (удаляет сегмент битового кода из вашего файла Mach-O), позволяя ему соответствовать вашим ограничениям по размеру.Недостатком является то, что у яблока не будет битового кода, у него будет только двоичный файл (и он не сможет перекомпилировать).

Позволяет разбить код, который вы связали на github:

source 'https://github.com/twilio/cocoapod-specs'

target 'ObjCVideoQuickstart' do
  pod 'TwilioVideo', '1.0.0-beta14'
end

post_install do |installer|
  # Find bitcode_strip
  bitcode_strip_path = `xcrun -sdk iphoneos --find bitcode_strip`.chop!

  # Find path to TwilioVideo dependency
  path = Dir.pwd
  framework_path = "#{path}/Pods/TwilioVideo/TwilioVideo.framework/TwilioVideo"

  # Strip Bitcode sections from the framework
  strip_command = "#{bitcode_strip_path} #{framework_path} -m -o #{framework_path}" 
  puts "About to strip: #{strip_command}"
  system(strip_command)
end

1.

bitcode_strip_path = `xcrun -sdk iphoneos --find bitcode_strip`.chop!

Находит инструмент bitcode_strip в вашей установке XCode (см. Ссылку на xcrun на странице выше)

2.

framework_path = "#{path}/Pods/TwilioVideo/TwilioVideo.framework/TwilioVideo"

Находит каркас, из которого вы хотите удалить битовый код

3.

strip_command = "#{bitcode_strip_path} #{framework_path} -m -o #{framework_path}" 
puts "About to strip: #{strip_command}"
system(strip_command)

Создает и выполняет команду для фактического удаления секции битового кода из исполняемого файла Mach-O.-m указано для удаления (см. Связанную страницу man для bitcode_strip)

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

Для получения дополнительной информации обратитесь к разделу "Утончение приложений"

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