iOS框架文件是为x86_64(不是要链接的体系结构(arm64))构建的,链接器命令失败,退出代码为1

在处理框架时,这是一个常见错误。 大多数人只是遵循stackoverflow上的解决方案(将Build Active Architecture Only仅设置为NO ,并将i386,x86_64添加到有效架构中),但实际上并不需要花费很多时间来了解其背后的原理。

armv64:iPhoneX,iPhone 5s-8,iPad Air-iPad Pro

armv7:iPhone3Gs-5c,iPad WIFI(第四代)

armv6:iPhone — iPhone3G

上面的如果用于真实设备

i386:32位模拟器

x86_64:64位模拟器

上面的列表是向下兼容的,这意味着iPhoneX也可以与armv6一起运行,而不能完全利用armv64的功能

有关iOS体系结构的更多信息,请参见:

设备兼容性

描述有关现有iOS设备功能的详细信息。

developer.apple.com


如果选择“是”,它将仅将框架构建到“所选设备”,即实际设备(armv)或模拟器(x86_64或i386)。 对于“否”,它将把您的框架构建到“有效架构”列表中

默认情况下,在调试模式下为“是”。 在更多版本中,它表示“否”,可以节省调试模式下的编译时间,并确保您的发布项目框架可以在您指定的所有体系结构上运行。

这就是为什么接受的答案通过强制框架针对所有体系结构进行构建而起作用的原因,但是通过阅读更多内容,您会知道背后的内容,并且可以肯定地节省编译框架的时间。 当然,您也可以更好地控制自己。

因此,如果您使用的是框架,并且要导入到另一个项目,则可以使用模拟器(i386或x86_64)通过仅构建Active Architecture ”编译该框架,然后使用仅构建Active Architecture ”将其导入项目。如果是真实设备(armv)的 “是”,您将遇到此错误。

寻找错误说明:

该文件是为x86_64构建的,不是链接的体系结构( i386 )意味着您在64位模拟器中构建框架,并使用32位模拟器构建合并的项目。

而更常见的是:

框架文件是为 x86_64 构建的, 它不是要链接的体系结构( arm64 ):这意味着您的框架是在模拟器中构建的,而合并的项目是使用实际设备构建的。


一种常见的做法是右键单击框架,然后选择“在Finder中显示” ,而大多数开发人员将Finder保持打开状态,而新编译的框架将替换旧框架,而无需关闭Finder并再次重新打开。 是的,这是正确的,但是如果您在两者之间切换构建目标设备,则框架将导致存在不同的文件夹 。 有时您认为自己已经编译了框架,但实际上它在另一个文件夹中。 我的建议是始终选择在Finder中显示,以防止您导入的框架不是最新的。

两个不同的文件夹: Debug-iphoneosDebug-iphonesimulator

从现在开始,当遇到框架链接错误问题时,您应该充满信心,为之欢呼。