在Xcode 12中添加fat库到XCFramework不起作用

6

编辑 (2020/09/14): 这似乎是 Xcode 的一个 bug,已在 Xcode 12 beta 6 中得到修复。

我正在使用 Xcode 12 构建静态库,并且对于 tvOS,Xcode 12 在单个 fat 库中包括了 arm64arm64e

类似地,在构建模拟器时,Xcode 12 在单个 fat 库中包括了 x86_64arm64(Mac Apple Silicon)。

在这两种情况下,我都无法使用以下命令创建包含这些库的 XCFramework:

xcodebuild -create-xcframework -output A.xcframework" -library A.a

尝试这样做会导致如下错误:

error: unable to find any architecture information in the binary at 'A.a'

lipo -info A.a 的输出清楚地表明存在两个架构(分别为 arm64 + arm64earm64 + x86_64),因此我不理解为什么 xcodebuild 不能识别和处理它。

我还尝试将各个架构提取为两个薄文件(例如 A-arm64.aA-arm64e.a),然后使用它们创建 XCFramework,但会导致不同的错误:

Both tvos-arm64e and tvos-arm64 represent two equivalent library definitions.

Both tvos-arm64-simulator and tvos-x86_64-simulator represent two equivalent library definitions.

我错过了什么吗?如何从 fat 库(或两个等效的薄库)创建 XCFramework?


据我所知,xcodebuild -create-xcframework 对于每个平台都有一个硬编码的支持架构列表,在 Xcode 12 中没有更新。当仅使用 Xcode 11 支持的架构时,它对我而言运行良好,但是将 arm64 添加到模拟器库中会导致它崩溃并出现此错误。 - Thomas Goyne
目前有更新吗? 我尝试创建sim64/simx86/device64的xcframework时遇到了相同的问题。 结果: ios-x86_64-simulator和ios-arm64-simulator都代表两个等效的库定义。 - Sergey Brazhnik
2
@SergeyBrazhnik 创建两个独立的库:一个合并的(fat)sim64/simx86库和一个单独的device64库。然后将它们添加到XCFramework中。 - Bill Hollings
@BillHollings 请您添加您的答案。 - Ravi
@Ravi 现在完成了。在这样做的过程中,SO建议编辑问题,这就是我最初在上面所做的。 - Bill Hollings
显示剩余3条评论
1个回答

0

这似乎是一个 Xcode 的错误,现在已经在 Xcode 12 beta 6 中修复了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接