这是手册页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>
根据我在阅读您所附链接后的理解,位码是编译过程中的一个中间步骤。如果您自己将源代码提交给苹果,苹果最终会在每个应用程序中拥有不同版本的目标代码,对应于 OS X 和 iOS 可以运行的不同 CPU 类型的数量(超过 4 种不同类型)。现在,Apple 可以将您的源代码大部分编译成称为 bitcode 的最小形式,它没有与它将在哪个 CPU 上运行相关的包袱。
大多数情况下:它执行编译器的词法分析器、解析器、语义分析和代码生成部分,这些部分特定于您的源代码。
剩下的部分:机器特定的事情,比如优化、组装和链接,这在 iPhone 上与 macbook 是不同的,例如
如果您将 bitcode 提交到应用商店,则更容易将其编译成针对不同 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 员工提供的解决方案(或其他类似的解决方案)可能不会面向未来,因为在应用商店中可能会强制使用位码
有关更多信息,请查看“应用瘦身”