【发布时间】:2020-12-06 23:46:37
【问题描述】:
编辑 (2020/09/14):这似乎是一个 Xcode 错误,现已在 Xcode 12 beta 6 中修复。
我正在使用 Xcode 12 构建一个静态库,对于 tvOS,Xcode 12 在单个 fat 库中包含 arm64 和 arm64e。
同样,在为模拟器构建时,Xcode 12 在单个 fat 库中包含 x86_64 和 arm64 (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 + arm64e 和 arm64 + x86_64,分别),所以我不明白为什么 xcodebuild 无法识别和处理它。
我还尝试将各个架构分别提取到两个瘦文件中(例如A-arm64.a 和A-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.
我错过了什么吗?如何从一个胖库(或两个等效的瘦库)创建 XCFramework?
【问题讨论】:
-
AFAICT
xcodebuild -create-xcframework具有每个平台支持的架构的硬编码列表,该列表未在 Xcode 12 中更新。当仅使用 Xcode 11 支持的架构时,它对我来说很好,但将 arm64 添加到模拟器库破坏它并给出此错误。 -
看看这可能对你有帮助github.com/bielikb/xcframeworks
-
这似乎是一个 Xcode 错误,现在已在 Xcode 12 beta 6 中修复。
-
目前有更新吗?尝试为 sim64/simx86/device64 创建 xcframework 时遇到同样的问题 结果 ios-x86_64-simulator 和 ios-arm64-simulator 代表两个等效的库定义。
-
@SergeyBrazhnik 创建两个独立的库:一个组合(胖)sim64/simx86,以及一个单独的 device64 库。然后将它们添加到 XCFramework。
标签: xcode xcode12 xcframework apple-silicon