Rob*_*Rob 8 xcode xcrun bitcode
TwilioVideo
在我的 iOS 项目中作为 Pods 依赖项添加后,我意识到它的大小显着增加(+100 Mo)。
经过一些研究,我发现了这个线程,尤其是这个消息,它建议通过 Podfile 使用此命令剥离位代码。
我对 bitcode 了解不多,直到我发现了这篇关于它的好文章:https ://lowlevelbits.org/bitcode-demystified/
现在我明白什么是位码,为什么 Apple 要求它,以及他们如何使用它来重新编译应用程序(如果他们想要的话)。但是,我仍然不明白这个“strip bitcode”操作是什么,所以我正在寻找有关此的信息(它实际上运行良好,因为在将这些行添加到我的 Podfile 后,我的应用程序现在“仅”大了 30 Mo )。
谢谢你的帮助。
这是联机帮助页 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>
根据我阅读您所附链接后的理解,bitcode 是编译过程中的一个中间步骤。如果你自己将源代码提交给苹果,苹果最终会在每个应用程序中拥有不同版本的目标代码,对应于 OS X 和 iOS 可以运行的不同 CPU 类型的数量(超过 4 种不同类型)。现在,Apple 可以大部分方式将您的源代码编译成一种称为 bitcode 的最小形式,它与将在哪个 CPU 上运行无关。
大多数方式:它执行编译器的词法分析器、解析器、语义分析和代码生成部分,这些部分特定于您的源代码。
剩下的部分:特定于机器的事情,例如优化、组装和链接,例如,iPhone 与 macbook 的不同之处
如果您将位码提交到应用程序商店,则可以更轻松地将其编译为不同 CPU 类型的不同最终形式。看起来您的问题是项目中的 bitcode 最终变成了一个相当大的文件(这来自 Twilio 添加了对 bitcode 的支持)。“剥离”位代码基本上从您的项目中删除了位代码(从您的 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
Run Code Online (Sandbox Code Playgroud)
1.
bitcode_strip_path = `xcrun -sdk iphoneos --find bitcode_strip`.chop!
Run Code Online (Sandbox Code Playgroud)
bitcode_strip
在您的 Xcode 安装中找到该工具(阅读上面链接的 xcrun 联机帮助页)
2.
framework_path = "#{path}/Pods/TwilioVideo/TwilioVideo.framework/TwilioVideo"
Run Code Online (Sandbox Code Playgroud)
查找要从中删除位码的框架
3.
strip_command = "#{bitcode_strip_path} #{framework_path} -m -o #{framework_path}"
puts "About to strip: #{strip_command}"
system(strip_command)
Run Code Online (Sandbox Code Playgroud)
创建并执行命令以从 Mach-O 可执行文件中实际删除位代码部分。-m
指定删除(请参阅 bitcode_strip 的链接联机帮助页)
请注意:使用此 twilio 员工提供的解决方案(或其他类似的解决方案)可能无法满足未来需求,因为在应用商店中,bitcode 可能成为强制性要求
有关更多信息,请查看“应用瘦身”