Что делает bitcode_strip (xcrun)?
Добавив TwilioVideo
как зависимость от Pods в моем проекте iOS, я понял, что его размер значительно увеличился (+100 Mo).
После некоторых исследований я нашел этот поток и особенно это сообщение, которое советует удалять битовый код с помощью этой команды через Podfile.
Я мало что знал о биткоде, пока не нашел эту замечательную статью об этом: https://lowlevelbits.org/bitcode-demystified/
Теперь я понимаю, что такое битовый код и почему Apple запрашивает его, а также как они используют его для перекомпиляции приложений, если они этого хотят. Тем не менее, я до сих пор не понимаю, что это за операция "раздели битовый код", поэтому я ищу информацию об этом (на самом деле она работала хорошо, поскольку после добавления этих строк в мой Podfile мое приложение теперь "только" на 30 Мо больше).
Спасибо за вашу помощь.
1 ответ
Вот справочная страница для 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 (прочитайте man-страницу, связанную выше для 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 (или других подобных решений), может оказаться неоправданным, так как битовый код может стать обязательным в магазине приложений
Для получения дополнительной информации, посмотрите на "прореживание приложения"