我有一个使用链接和嵌入式自定义框架的应用程序。在 Xcode 12.2 之前,该应用程序为 iOS 设备和模拟器正确构建。但是,从 Xcode 12.3 开始,我收到以下错误:
Building for iOS Simulator, but the linked and embedded framework 'My.framework' was built for iOS + iOS Simulator.
该框架是为设备和模拟器构建的(正如错误实际上所说)并使用 合并lipo,因此它应该能够在任何地方运行而不会出现问题。
lipo
我在这里错过了什么吗?Xcode 12.3 是否有任何相关变化?
恐怕这实际上是正确的错误,框架不应该同时包含 iOS 和 iOS 模拟器代码。苹果试图强迫我们XCFramework为此目的使用 s。他们从 XCode 11 开始,只是收紧了限制。
XCFramework
解决此问题的唯一正确方法是将框架重建为XCFramework。这很容易做到:
$ xcrun xcodebuild -create-xcframework \ -framework /path/to/ios.framework \ -framework /path/to/sim.framework \ -output combined.xcframework
您可以从组合.framework的框架的两个副本开始,并使用lipo从与不同 SDK 关联的二进制文件中删除切片。
.framework
基于 Apple here的原始答案。
我的特殊情况是我在使用生成这些框架的罗马时遇到了这个错误(一个可能的解决方案在这里)。此外,迦太基方面正在进行很多挣扎。
希望有帮助;)