Xcode7引入了Bitcode,这是某种LLVM中间二进制文件,这意味着苹果的服务器可以在没有我参与的情况下为不同的架构重新编译我的应用程序.

回过头来看,我在我们的库中发布了一个静态归档框架.似乎当你使用"构建和归档"以外的任何东西进行构建时,比特码实际上不会被发送到我的库中,任何在应用程序中链接到我的库并try 进行构建和归档的人都不会被发送到我的库中;启用位码的存档将收到以下两个警告之一:

  • ld: 'Lookback(Lookback.o)' does not contain bitcode. You must rebuild it with bitcode enabled (Xcode setting ENABLE_BITCODE), obtain an updated library from the vendor, or disable bitcode for this target.(如果库是用Xcode 6构建的)
  • ld: warning: full bitcode bundle could not be generated because 'Lookback(Lookback.o)' was built only with bitcode marker. The library must be generated from Xcode archive build with bitcode enabled (Xcode setting ENABLE_BITCODE)(如果lib是用带有普通xcodebuild的Xcode7构建的)

我有一个构建脚本,它构建一个设备+模拟器通用二进制文件,所以我不能使用build&Archive,而是从我的脚本中的命令行运行xcodebuild.如何让xcodebuild生成一个正确的位码启用库?

推荐答案

Bitcode是一个编译时特性(而不是链接时特性),这意味着当使用Bitcode构建时,每个.o文件都应该包含一个称为__Bitcode的额外部分.您可以通过运行otool -l (my .o or .a file) | grep __LLVM来确认您的二进制文件是否与位码兼容.

当您正常构建时,Xcode会将构建标志-fembed-bitcode-marker添加到任何clang调用.这似乎是某种"如果启用了Bitcode,这就是Bitcode会go 的地方"之类的东西,实际上并没有启用Bitcode.

当您"构建&;存档"时,此标志将被-fembed-bitcode替换,这确实构建了启用位码的二进制文件.

似乎有两种方法可以让xcodebuild使用-fembed-bitcode:

  • 使用"archive"操作,如在xcodebuild -target LookbackSDK archive中而不是xcodebuild -target LookbackSDK build中.这样做的副作用是将二进制文件放入Xcode管理器中,而不是放在build/文件夹中,不过您可以使用-exportArchive -archivePath ./build来解决这个问题(感谢@JensAyton)
  • 通过将其他C标志添加为OTHER_CFLAGS="-fembed-bitcode"来强制使用该标志.您的xcodebuild调用应该类似于xcodebuild OTHER_CFLAGS="-fembed-bitcode" -target LookbackSDK build.

我 Select 的是后者,这样我就不必更改构建系统,但它会 for each 文件生成警告,因为现在-fembed-bitcode-marker-fembed-bitcode都被发送到clang.幸运的是,后者赢了,生成了一个支持Bitcode的库!

资源

Ios相关问答推荐

在SwiftUI中的2个圆之间画一条直线

在某些情况下,UIHostingController在自动调整时不能调整大小

如何解释在SwiftUI视图中观察到持续的数据更改

如何创建具有SPM依赖项的二进制XCFramework?

withTaskGroup不适用于CLGeocoder

NSHashTable要求任何MyCustomProtocolAnyObject都是类类型

mapView swift 导致警告有网格错误

如何为 Firebase Auth 实施 Firebase AppCheck?

SwiftUI Disclosure Group 文本对齐

如何将单个按钮传递到自定义 ConfirmationDialog

使用 RxDatasources 作为数据源时如何填充自定义页眉/页脚视图

SwiftUI NavigationLink 立即加载目标视图,无需单击

如何在导航栏右侧添加多个 UIBarButtonItem?

iOS 10 / Xcode 8 设备上的 NSLog 似乎被截断了?为什么?

如何使用 swift 添加速率按钮的链接?

IOS - 从 UITextView 中删除所有填充

是否可以将 Socket.io 与 AWS Lambda 一起使用?

如何进行键值观察并在 UIView 的框架上获取 KVO 回调?

在 iOS 上没有显示数字键盘

具有两种不同字体大小的 NSAttributedString 示例?