Mac Catalyst构建失败,显示“正在为Mac Catalyst-x86_64构建,但尝试链接到已针对Mac Catalyst-arm64构建的文件”。

4
在更新到Xcode 12.2后,我的项目因为与Apple Silicon相关的链接错误而无法编译。我似乎已经解决了大部分问题,但是一个构建静态链接框架的子项目却让我遇到了问题。然而,一个具有明显相同构建设置的兄弟子项目却没有这个问题。
在链接期间,我会收到有关一个框架的警告: ld: 警告:忽略文件...Build/Products/Debug-maccatalyst/TCSiOSC.framework/TCSiOSC,构建Mac Catalyst-x86_64,但尝试链接构建为Mac Catalyst-arm64的文件
我正在Intel Mac上构建(因此“仅构建活动架构”不是因素)。我找不到任何可以解决这个问题的构建设置,并且网络搜索没有找到这个确切错误。非常感谢您的任何想法!
2个回答

3

我咨询了苹果公司的工程师,他建议采取以下措施:

  1. 将任何Swift子项目转换为Swift包,而不是嵌入式Xcode项目。因此,我从父项目中删除了一个库的Xcode项目,并将其顶级目录拖入父项目以将其作为Swift包包含在内。现在...这个特定的子项目(SQLite.swift)已经定义了一个Swift包。我之前没有生成过Swift包,所以无法提供帮助。另外,不要忘记将其添加到应用程序目标的“框架、库和嵌入式内容”列表中。

  2. 进入项目的构建设置并删除“支持的平台”设置。如果您单击构建设置列表上方的“级别”按钮,可以看到每个设置来自哪里。“Supported platforms”应该是非粗体字。如果该行是粗体字,请将其突出显示并按Delete键进行删除。然后进入目标并执行相同操作:删除“支持的平台”。

  3. 将项目(顶级)级别的基本SDK设置为iOS;这是必须的。从目标级别中删除它,以便从项目继承它;我不知道这是否适用于多种类型的目标或所有项目,但对我来说起作用。

  4. 从所有目标中删除VALID_ARCHS构建设置(如果有)。该设置已过时。

在我的情况下,这些更改后,“构建活动架构”设置不会有任何影响。现在该项目可以在Catalyst下构建和运行。


2
目前CocoaPods存在一个问题,即Pods项目的Base SDK默认设置为No SDK (MacOS)。按照这里的建议将其更改为iOS,可以解决我的链接问题。 - Max Klint
很高兴听到这个消息! - Oscar
@MaxKlint这是说Pods的基础SDK与项目不同吗?我应该在哪里查找这样的信息? - Felipe Centeno
1
#2 对我解决了这个问题。你能从Xcode配置中感知到的只是它曾经是粗体,现在不是了。太神奇了。谢谢! - Ryan Ashcraft

2

我遇到了相同的问题,并且找到了这个问题。在我的情况下,Debug版本编译成功,但是Release版本编译失败。原因正是“仅构建活动架构”选项。可以在您的项目中找到该选项 - “构建设置”选项卡,然后是“架构”部分。有一个“仅构建活动架构”的设置。默认情况下,Debug模式为Yes,而Release模式为no。这导致我的发布版本构建失败。


谢谢你提供的信息!虽然这不是我的问题,但你提醒我更新这篇文章,分享我找到的解决方案。 - Oscar
非常感谢Yi Hu!!我刚刚在苹果相关的“Ask Different”部分发布了一个关于此问题的问题。然后我在主要的stackoverflow上更加努力地搜索,找到了Yi HuOscar的回答。这正是我的问题,并且没有任何麻烦就解决了! - Craig Reynolds

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接