ios - 在 xcode 12 中创建通用框架时出现 Lipo 错误

标签 ios swift ios-frameworks xcode12

我在 xcode 12 中制作通用框架时遇到问题。以下是我运行的命令:-

lipo -create build/simulator/FrameworkName.framework/FrameworkName build/devices/FrameworkName.framework/FrameworkName -output build/universal/FrameworkName.framework/FrameworkName

以下是我面临的错误:-

fatal error :/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/lipo:build/simulator/FrameworkName.framework/FrameworkName 和 build/devices/FrameworkName.framework/FrameworkName 有相同的架构(arm64)并且不能位于同一个胖输出文件中

当我用谷歌搜索此错误时,我找到了将“build设置”中的“架构”设置为标准的解决方案,但它已经设置为标准,请找到所附的屏幕截图

Architectures Screenshot

注意:我正在关注本教程:- https://medium.com/@anuragajwani/how-to-build-universal-ios-frameworks-74b6b07bf31d

最佳答案

该错误告诉您,build/simulatorbuild/device 文件夹中的两个框架都是针对同一架构(arm64,这是一种设备架构)构建的。您可以通过查看 .framework 文件内部来自行验证这一点:FrameworkName.framework/Modules/FrameworkName.swiftmodule。 其中一个文件夹(或两个文件夹)可能包含多个架构,如下所示: enter image description here

就个人而言,我喜欢在 Xcode.app 文件夹之外构建我的“胖”框架(只是为了确保我可以完全控制什么在哪里)。首先,运行模拟器框架(选择任何模拟器作为构建目标)。该过程完成后,转到 Xcode Navigator 中的 Products 文件夹,单击 FrameworkName.framework 文件上的 Show in Finder。将显示的 .framework 复制到更方便的地方(例如 Desktop/simulator 文件夹) enter image description here

然后,再次构建框架,这次仅针对设备(选择任何 iOS 设备作为构建目标)。将第二个 .framework 复制到 Desktop/iphone 文件夹等位置。 为输出框架创建空的 Desktop/universal 文件夹。从 Desktop/iphone 文件夹复制 .framework 文件并删除 Desktop/universal/FrameworkName.framework/Framework 可执行文件。该文件稍后将被 lipo 取代。

接下来,施展吸脂魔法:

lipo -create ~/Desktop/iphone/FrameworkName.framework/FrameworkName ~/Desktop/simulator/FrameworkName.framework/FrameworkName -output ~/Desktop/universal/FrameworkName.framework/FrameworkName

最后一步,前往 Desktop/simulator/FrameworkName.framework/Modules/FrameworkName.swiftmodule 复制所有以 x86_64 前缀开头的文件,并将其粘贴到 桌面/通用/FrameworkName.framework/Modules/FrameworkName.swiftmodule。现在,您的 Desktop/universal/FrameworkName.framework 包含设备和模拟器架构。恭喜,您已经拥有了“胖”库!

免责声明:是的,我意识到有更简单的方法可以使用各种脚本和终端命令来执行此操作,但它们都执行几乎相同的操作。一旦您尝试逐步手动执行此操作,它将帮助您了解什么在哪里、什么是架构以及如何组合它们。

免责声明 2:从 Xcode 12 开始,Apple 坚持要求您构建 .xcframeworks 而不是“胖”库。请参阅here

关于ios - 在 xcode 12 中创建通用框架时出现 Lipo 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64568241/

相关文章:

ios - MapKit中缩放相关的MKPolyline奇怪渲染

ios - 使用 swift 进行 Collection View Cell 选择

ios - 在iOS中添加外部框架时出现的问题

ios - XCFramework生成时如何处理swift动态框架中的可选依赖

ios - 编译框架在归档时提供位码错误

ios - 在具有特定事件 ID 的日历应用程序中打开 "Event Details"

ios sqlite 返回数据无法显示

ios - pushViewController 需要一些时间

swift 3 : Determining if an email domain is valid with Firebase

ios - 快速从 FIREBASE_REF block 内关闭 vc Controller