Mac Catalyst 构建失败 "building for Mac Catalyst-x86_64 but attempting to link with file built for Mac Catalyst-arm64"
Mac Catalyst build fails with "building for Mac Catalyst-x86_64 but attempting to link with file built for Mac Catalyst-arm64"
更新到 Xcode 12.2 后,由于与 Apple Silicon 相关的链接错误,我的项目开始无法编译。我似乎已经修复了其中的大部分,但是一个构建静态链接框架的子项目给我带来了问题。然而,具有明显相同构建设置的同级子项目却没有。
在链接过程中,我收到关于一个框架的警告:
ld: warning: ignoring file ...Build/Products/Debug-maccatalyst/TCSiOSC.framework/TCSiOSC, building for Mac Catalyst-x86_64 but attempting to link with file built for Mac Catalyst-arm64
我在 Intel Mac 上构建以启动(因此“仅构建活动架构”不是一个因素)。我找不到任何可以解决这个问题的构建设置,而且网络搜索也没有找到这个确切错误的结果。任何想法表示赞赏!
我遇到了同样的问题并找到了这个问题。就我而言,在 Debug 上构建成功但在 Release 上构建失败。原因正是“仅构建活动架构”选项。它是一个选项,可以在您的项目中找到 - “构建设置”选项卡,然后是“架构”部分。有一个“仅构建活动架构”的设置。默认情况下,Debug 模式为 Yes,Release 模式为 no。这导致我的构建在发布时失败。
这个我咨询了苹果,他们的工程师推荐了一些东西:
将任何 Swift 子项目转换为 Swift 包,而不是嵌入式 Xcode 项目。因此,我从父项目中删除了一个库的 Xcode 项目,并将其顶级目录拖到父项目中以将其包含为 Swift 包。现在...这个特定的子项目 (SQLite.swift) 已经定义了一个 Swift 包。我以前没有自己生成过 Swift 包,所以我帮不上忙。另外,不要忘记将它添加到应用程序目标上的框架、库和嵌入式内容列表中。
进入项目的构建设置并删除“支持的平台”设置。如果您单击构建设置列表上方的“级别”按钮,您可以看到每个设置的来源。 “支持的平台”应该是非粗体。突出显示该行并按 Delete(如果它是粗体)。然后进入你的目标并做同样的事情:删除“支持的平台”。
将项目(顶层)的 Base SDK 设置为 iOS;这是必须的。从目标级别删除它,因此它继承自项目;我不知道这是否适用于多种目标或所有项目,但它对我有用。
从所有目标中删除 VALID_ARCHS 构建设置(如果存在)。该设置已弃用。
在我的案例中进行这些更改后,“构建活动架构”设置没有任何区别。该项目现在可以在 Catalyst 下正常构建和运行。
更新到 Xcode 12.2 后,由于与 Apple Silicon 相关的链接错误,我的项目开始无法编译。我似乎已经修复了其中的大部分,但是一个构建静态链接框架的子项目给我带来了问题。然而,具有明显相同构建设置的同级子项目却没有。
在链接过程中,我收到关于一个框架的警告:
ld: warning: ignoring file ...Build/Products/Debug-maccatalyst/TCSiOSC.framework/TCSiOSC, building for Mac Catalyst-x86_64 but attempting to link with file built for Mac Catalyst-arm64
我在 Intel Mac 上构建以启动(因此“仅构建活动架构”不是一个因素)。我找不到任何可以解决这个问题的构建设置,而且网络搜索也没有找到这个确切错误的结果。任何想法表示赞赏!
我遇到了同样的问题并找到了这个问题。就我而言,在 Debug 上构建成功但在 Release 上构建失败。原因正是“仅构建活动架构”选项。它是一个选项,可以在您的项目中找到 - “构建设置”选项卡,然后是“架构”部分。有一个“仅构建活动架构”的设置。默认情况下,Debug 模式为 Yes,Release 模式为 no。这导致我的构建在发布时失败。
这个我咨询了苹果,他们的工程师推荐了一些东西:
将任何 Swift 子项目转换为 Swift 包,而不是嵌入式 Xcode 项目。因此,我从父项目中删除了一个库的 Xcode 项目,并将其顶级目录拖到父项目中以将其包含为 Swift 包。现在...这个特定的子项目 (SQLite.swift) 已经定义了一个 Swift 包。我以前没有自己生成过 Swift 包,所以我帮不上忙。另外,不要忘记将它添加到应用程序目标上的框架、库和嵌入式内容列表中。
进入项目的构建设置并删除“支持的平台”设置。如果您单击构建设置列表上方的“级别”按钮,您可以看到每个设置的来源。 “支持的平台”应该是非粗体。突出显示该行并按 Delete(如果它是粗体)。然后进入你的目标并做同样的事情:删除“支持的平台”。
将项目(顶层)的 Base SDK 设置为 iOS;这是必须的。从目标级别删除它,因此它继承自项目;我不知道这是否适用于多种目标或所有项目,但它对我有用。
从所有目标中删除 VALID_ARCHS 构建设置(如果存在)。该设置已弃用。
在我的案例中进行这些更改后,“构建活动架构”设置没有任何区别。该项目现在可以在 Catalyst 下正常构建和运行。