这是 bitcode_strip
的手册页。
从Mach-O文件中删除或保留位码段
bitcode_strip input [ -r | -m | -l ] -o output
什么是 Mach-O 文件?
Mach-O是可执行文件、目标代码、共享库、动态加载的代码和核心转储的文件格式
值得一提的是,iOS和OS X可执行文件以及位码都存储在Mach-O中。
这里是xcrun
的手册页。
运行或查找开发工具
xcrun [-sdk SDK] -find <tool_name>
根据您提供的链接,我了解到位码是编译过程的中间步骤。如果将源代码单独提交给Apple,则Apple会在每个应用程序中拥有不同版本的目标代码,对应于OSX和iOS可以运行的不同CPU类型(超过4种)。现在,Apple可以将您的源代码大部分编译为称为位码的最小形式,该形式与将在其上运行的CPU无关。
大部分的编译过程包括词法分析器、解析器、语义分析和代码生成器,这是针对您的源代码而特定的。
剩余的编译过程则是机器特定的部分,如优化、汇编和链接,例如在iPhone和MacBook上不同。
如果将位码提交给应用商店,则更容易将其编译成不同的最终形式以适应不同的CPU类型。看起来您的问题在于项目中的位码文件太大(这是由Twilio添加位码支持导致的)。 “剥离”位码基本上会从您的项目中删除位码(从Mach-O文件中删除位码段),使其符合大小约束。缺点是Apple没有位码,它们只有二进制文件(将无法重新编译)。
让我们分解您在github上引用的代码:
source 'https://github.com/twilio/cocoapod-specs'
target 'ObjCVideoQuickstart' do
pod 'TwilioVideo', '1.0.0-beta14'
end
post_install do |installer|
bitcode_strip_path = `xcrun -sdk iphoneos --find bitcode_strip`.chop!
path = Dir.pwd
framework_path = "#{path}/Pods/TwilioVideo/TwilioVideo.framework/TwilioVideo"
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的manpage了解更多信息)。
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 员工提供的解决方案(或类似解决方案)可能不具有未来可靠性,因为位码可能成为应用商店的强制要求。
有关更多信息,请查看“应用程序瘦身”。