在我的TwilioVideo项目中添加了作为Pods依赖项的iOS之后,我意识到它的大小显著增加(+100 Mo)。
经过一些研究,我发现了这个线程和特别是这条通过Podfile命令建议删除bitcode的消息。
我对bitcode不太了解,直到我找到了一篇关于它的伟大文章:https://lowlevelbits.org/bitcode-demystified/
现在我明白了什么是bitcode,为什么苹果会请求它,以及如果他们愿意的话,他们如何使用它来重新编译应用程序。然而,我仍然不明白这个“剥比特码”操作是什么,所以我正在寻找有关这个操作的信息(因为在我的Podfile中添加了这些行之后,我的应用程序现在“只”大了30 Mo ),它实际上运行得很好。
谢谢你的帮助。
发布于 2018-10-01 03:35:27
下面是bitcode_strip的手册
删除或保留Mach-O文件中的bitcode段。
bitcode_strip input [ -r | -m | -l ] -o output
什么是马赫-O文件?
Mach-O是一种文件格式,用于可执行文件、对象代码、共享库、动态加载的代码和核心转储。
Mach-O也恰好是存储iOS和OS可执行文件以及bitcode的地方。
下面是xcrun的手册
运行或定位开发工具
xcrun [-sdk SDK] -find <tool_name>
根据我的理解,在阅读了您所附加的链接之后,bitcode是编译过程中的一个中间步骤。如果你自己把你的源代码提交给苹果,苹果最终会在每个应用程序中有不同版本的目标代码,对应于OS X和iOS可以运行的不同类型的CPU类型的数量(超过4种不同类型)。现在,苹果可以将你的源代码编译成一种叫做bitcode的最小形式,它与运行CPU没有任何关系。
大多数方法:它完成编译器的词法、解析器、语义分析和代码生成部分,这是特定于您的源代码的。
剩下的部分:机器特有的东西,比如优化、组装和链接,这在iPhone上与macbook不同,例如
如果您将bitcode提交到应用程序存储区,那么完成将其编译成不同CPU类型的不同最终形式要容易得多。看起来您的问题是,您的项目中的bitcode最终是一个相当大的文件(这个文件来自Twilio,添加了对bitcode的支持)。“剥离”比特代码基本上从您的项目中删除了bitcode (从Mach-O文件中移除bitcode段),允许它适应您的大小约束。缺点是苹果不会有比特码,它们只会有二进制代码(并且无法重新编译)。
让我们分解一下在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)
end1.
bitcode_strip_path = `xcrun -sdk iphoneos --find bitcode_strip`.chop!在Xcode安装中定位bitcode_strip工具(请阅读上面链接的手册中的xcrun)
2.
framework_path = "#{path}/Pods/TwilioVideo/TwilioVideo.framework/TwilioVideo"查找要删除bitcode的框架。
3.
strip_command = "#{bitcode_strip_path} #{framework_path} -m -o #{framework_path}"
puts "About to strip: #{strip_command}"
system(strip_command)创建并执行命令,以便实际从Mach-O可执行文件中删除bitcode部分。为删除指定了-m (参见bitcode_strip的链接手册)
请注意:使用这个twilio雇员提供的解决方案(或其他类似的解决方案)的可能不会成为未来的证据,因为bitcode可能成为应用程序商店中的强制命令。
有关更多信息,请查看“应用程序细化”。
https://stackoverflow.com/questions/52563689
复制相似问题