【问题标题】:Command MergeSwiftModule failed with a nonzero exit code命令 MergeSwiftModule 失败,退出代码为非零
【发布时间】:2019-12-07 12:30:22
【问题描述】:

当我尝试在 Xcode 中构建我的 MacOS 应用程序时遇到错误。

Command MergeSwiftModule failed with a nonzero exit code.

error: umbrella for module 'PDFKit' already covers this directory
        umbrella header "PDFKit.h"
                        ^
error: inferred submodules require a module with an umbrella
        module * { export * }

我的大多数 Swift 文件都有:

import Cocoa
import Quartz

我经常使用 PDFKit,所以我猜这与导入和引用标题有关。该错误发生在 Xcode 11.1 和 11.2 上。

我尝试了一个干净的构建,但没有成功。还有其他关于此的线程,such as this one,这似乎表明这是一个非特定的间歇性问题。

【问题讨论】:

  • 你在代码中#import 吗?您收到此错误是因为 Quartz 框架伞头文件已经导入了 PDFKIt。
  • 我使用的是 Swift,所以我只是使用了上面的 import Quartz 语句。请注意,在删除导入命令然后完全恢复它们之前,问题就自行解决了。
  • 我可以通过 Quartz 替换 PDFKit 导入并从构建阶段删除 PDFKit.framework 来解决此问题。

标签: swift xcode


【解决方案1】:

在我的例子中,编译错误是由于导入了一个自定义框架,而该框架又导入了 PDFKit。我将框架代码中的import PDFKit 更改为import Quartz,该解决方法解决了Xcode 11.6 中的问题。

Xcode 12 beta 3 似乎工作得更好,并且不需要任何变通方法来构建现有代码。

【讨论】:

    【解决方案2】:

    由于错误消息的性质,我从所有文件中删除了所有import Quartz 语句,然后尝试构建。显然,它随后因为未知对象而失败。

    然后,我恢复了import Quartz 行,问题就解决了。

    这似乎是 Xcode 中的一个错误。

    【讨论】:

    • 如果您在 swift 项目中使用互操作性,请确保将任何 #import <PDFKit/PDFKit.h> 替换为适当的替换 #import <Quartz/Quartz.h>
    • 我认为我们都已经在 PDFKit 之上使用 Quartz 了,不是吗?但我不确定我是否知道“使用互操作性”是什么。
    猜你喜欢
    • 2020-10-28
    • 2019-02-28
    • 2021-08-23
    • 2019-12-03
    • 2021-05-16
    • 1970-01-01
    • 1970-01-01
    • 2019-07-23
    • 1970-01-01
    相关资源
    最近更新 更多