在 xcode 12 中创建通用框架时出现 Lipo 错误
Lipo Error while creating Universal frameworks in xcode 12
我在 xcode12 中制作通用框架时遇到问题。以下是我 运行:-
的命令
lipo -create build/simulator/FrameworkName.framework/FrameworkName build/devices/FrameworkName.framework/FrameworkName -output build/universal/FrameworkName.framework/FrameworkName
以下是我面临的错误:-
致命错误:/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/lipo:build/simulator/FrameworkName.framework/FrameworkName 和 build/devices/FrameworkName.framework/FrameworkName 有相同的体系结构 (arm64) 并且不能在同一个胖输出文件中
当我用谷歌搜索这个错误时,我找到了将 'Build Settings' 中的 'Architectures' 设置为标准的解决方案,但是它已经设置为标准找到附加的屏幕截图
注意:我正在学习本教程:- https://medium.com/@anuragajwani/how-to-build-universal-ios-frameworks-74b6b07bf31d
错误告诉您 build/simulator
和 build/device
文件夹中的框架都是为相同的体系结构构建的(arm64,这是一种设备体系结构)。您可以通过查看 .framework 文件内部来自行验证:FrameworkName.framework/Modules/FrameworkName.swiftmodule
。
有可能其中一个文件夹(或两者)包含多个架构,如下所示:
就我个人而言,我喜欢在 Xcode.app 文件夹之外构建我的 'fat' 框架(只是为了确保我可以完全控制在哪里)。首先,运行 您的模拟器框架(select 任何模拟器作为构建目标)。该过程完成后,转到 Xcode 导航器中的 Products
文件夹,单击 FrameworkName.framework
文件上的 Show in Finder
。将显示的 .framework 复制到更方便的地方(例如 Desktop/simulator
文件夹)
然后,再次构建框架,只是这次针对设备(select Any iOS device
作为构建目标)。将第二个 .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
前缀开头的文件,并将它们粘贴到 Desktop/universal/FrameworkName.framework/Modules/FrameworkName.swiftmodule
。现在您的 Desktop/universal/FrameworkName.framework
包含设备和模拟器架构。恭喜,您已经拥有 'fat' 图书馆!
免责声明: 是的,我知道有更简单的方法可以使用各种脚本和终端命令来执行此操作,但它们都做几乎相同的事情。一旦您尝试逐步手动执行此操作,它将帮助您了解什么地方发生了什么,什么是架构以及如何组合它们。
免责声明 2: 从 Xcode 12 开始,Apple 坚持要您构建 .xcframeworks 而不是 'fat' 库。参见
我在 xcode12 中制作通用框架时遇到问题。以下是我 运行:-
的命令lipo -create build/simulator/FrameworkName.framework/FrameworkName build/devices/FrameworkName.framework/FrameworkName -output build/universal/FrameworkName.framework/FrameworkName
以下是我面临的错误:-
致命错误:/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/lipo:build/simulator/FrameworkName.framework/FrameworkName 和 build/devices/FrameworkName.framework/FrameworkName 有相同的体系结构 (arm64) 并且不能在同一个胖输出文件中
当我用谷歌搜索这个错误时,我找到了将 'Build Settings' 中的 'Architectures' 设置为标准的解决方案,但是它已经设置为标准找到附加的屏幕截图
注意:我正在学习本教程:- https://medium.com/@anuragajwani/how-to-build-universal-ios-frameworks-74b6b07bf31d
错误告诉您 build/simulator
和 build/device
文件夹中的框架都是为相同的体系结构构建的(arm64,这是一种设备体系结构)。您可以通过查看 .framework 文件内部来自行验证:FrameworkName.framework/Modules/FrameworkName.swiftmodule
。
有可能其中一个文件夹(或两者)包含多个架构,如下所示:
就我个人而言,我喜欢在 Xcode.app 文件夹之外构建我的 'fat' 框架(只是为了确保我可以完全控制在哪里)。首先,运行 您的模拟器框架(select 任何模拟器作为构建目标)。该过程完成后,转到 Xcode 导航器中的 Products
文件夹,单击 FrameworkName.framework
文件上的 Show in Finder
。将显示的 .framework 复制到更方便的地方(例如 Desktop/simulator
文件夹)
然后,再次构建框架,只是这次针对设备(select Any iOS device
作为构建目标)。将第二个 .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
前缀开头的文件,并将它们粘贴到 Desktop/universal/FrameworkName.framework/Modules/FrameworkName.swiftmodule
。现在您的 Desktop/universal/FrameworkName.framework
包含设备和模拟器架构。恭喜,您已经拥有 'fat' 图书馆!
免责声明: 是的,我知道有更简单的方法可以使用各种脚本和终端命令来执行此操作,但它们都做几乎相同的事情。一旦您尝试逐步手动执行此操作,它将帮助您了解什么地方发生了什么,什么是架构以及如何组合它们。
免责声明 2: 从 Xcode 12 开始,Apple 坚持要您构建 .xcframeworks 而不是 'fat' 库。参见