在我的iOS项目中添加了TwilioVideo
作为Pods依赖项之后,我意识到它的大小显着增加了(+100 Mo)。
经过研究,我找到了这个线程和especially this message that advises stripping bitcode using this command via Podfile。
我对比特码了解不多,直到找到有关它的出色文章:https://lowlevelbits.org/bitcode-demystified/
现在,我了解了什么是位码,以及Apple为什么要求它,以及他们如何根据需要重新编译应用程序。但是,我仍然不知道这是“条带位码”操作是什么,因此我正在寻找有关此信息(它确实运行良好,因为在将这些行添加到Podfile之后,我的应用现在“仅”大了30莫)。
感谢您的帮助。
答案 0 :(得分:3)
这是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可以运行的不同CPU类型的数量(超过4种不同类型)。现在,Apple可以将您的源代码大部分方式编译为一种称为bitcode的最小形式,它与要在哪个CPU上运行无关。
大多数方式:它完成了编译器的词法分析器,解析器,语义分析和代码生成部分,
其余方式:优化,组装和链接之类的特定于机器的事物,例如,iPhone和Macbook相比在iPhone上有所不同
如果将位代码提交到应用商店,则完成将其编译为不同CPU类型的不同最终形式要容易得多。看来您的问题是项目中的位代码最终变成了一个很大的文件(这来自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!
在Xcode安装中找到bitcode_strip
工具(请阅读上面链接的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
已指定要删除(请参见链接的手册页中的bitcode_strip)
请注意:,使用此twilio员工提供的解决方案(或类似的其他解决方案)可能无法适应未来,因为在应用程序商店中位代码可能成为强制要求
有关更多信息,请查看“应用程序精简”