Xcode 未能发出预编译 header?

Xcode failed to emit precompiled header?

提前感谢您给我的帮助。

我昨天在互联网上搜索了半天,现在搜索了两个小时,但我没有找到任何东西(除了那两个没有帮助的链接 FMDatabase.h not found when using route-me library &

所以这是我的问题:我手头有一个以前的开发人员一直在做的项目,当我尝试启动它时,这里有两个错误:

failed to emit precompiled header '/Users/me/Library/Developer/Xcode/DerivedData/Alavoc-arfzuirebtfstncdztyvgvtpcbgw/Build/Intermediates.noindex/PrecompiledHeaders/Alavoc-Bridging-Header-swift_1I75NH5N40QPS-clang_30E4RG2TSVLXF.pch' for bridging header '/Users/me/Downloads/Alavoc-ios-master/Alavoc/bridge/Alavoc-Bridging-Header.h'

/Users/me/Downloads/Alavoc-ios-master/Alavoc/externalLib/customClass/customClassViewController.h:13:9: error: 'FMDB/FMDB.h' file not found

还有一个这样写的致命错误(即使我只计算了两个错误,这个错误出现在日志中前面描述的其他两个错误之上)

fatal error: module file '/Users/me/Library/Developer/Xcode/DerivedData/ModuleCache/30E4RG2TSVLXF/Foundation-3DFYNEBRQSXST.pcm' is out of date and needs to be rebuilt: signature mismatch note: imported by '/Users/me/Library/Developer/Xcode/DerivedData/Alavoc-arfzuirebtfstncdztyvgvtpcbgw/Build/Intermediates.noindex/PrecompiledHeaders/Alavoc-Bridging-Header-swift_1I75NH5N40QPS-clang_30E4RG2TSVLXF.pch' /Users/me/Downloads/Alavoc-ios-master/Alavoc/bridge/Alavoc-Bridging-Header.h:13:9: note: in file included from /Users/me/Downloads/Alavoc-ios-master/Alavoc/bridge/Alavoc-Bridging-Header.h:13: #import "customClassViewController.h"

customClassViewController.h 第 13 行:

#import <FMDB/FMDB.h>

我想这些错误是相互关联的。你知道它可能来自哪里吗?

在此先感谢你们的帮助,我真的很感激!

为 battlmonster 编辑(新错误):

这是两个错误(未找到文件(在 Alavoc-Bridging-Header.h FMDB.h 中未找到))并且未能发出预编译 header:

fatal error: file '/Users/me/Downloads/Alavoc-ios-master/Alavoc/bridge/Alavoc-Bridging-Header.h' has been modified since the precompiled header '/Users/me/Library/Developer/Xcode/DerivedData/Alavoc-arfzuirebtfstncdztyvgvtpcbgw/Build/Intermediates.noindex/PrecompiledHeaders/Alavoc-Bridging-Header-swift_1I75NH5N40QPS-clang_30E4RG2TSVLXF.pch' was built note: please rebuild precompiled header '/Users/me/Library/Developer/Xcode/DerivedData/Alavoc-arfzuirebtfstncdztyvgvtpcbgw/Build/Intermediates.noindex/PrecompiledHeaders/Alavoc-Bridging-Header-swift_1I75NH5N40QPS-clang_30E4RG2TSVLXF.pch' /Users/me/Downloads/Alavoc-ios-master/Alavoc/bridge/Alavoc-Bridging-Header.h:29:9: error: 'FMDB/FMDB.h' file not found

import

    ^ 1 error generated. <unknown>:0: error: failed to emit precompiled header

'/Users/me/Library/Developer/Xcode/DerivedData/Alavoc-arfzuirebtfstncdztyvgvtpcbgw/Build/Intermediates.noindex/PrecompiledHeaders/Alavoc-Bridging-Header-swift_1I75NH5N40QPS-clang_30E4RG2TSVLXF.pch' for bridging header '/Users/me/Downloads/Alavoc-ios-master/Alavoc/bridge/Alavoc-Bridging-Header.h'

如果您正在使用 cocoapod 并且它是一个框架,建议您不要将其包含在 pre-compiled header.

相反,objc 文件,使用:

@import framework_name;

此错误与格式错误的桥接有关 header。桥接 header 是一个特殊的 header 文件,它列出了所有具有 类 的 Objective-C header 文件,这些文件必须可以从 Swift 代码访问。所有桥接 header 定义都以一种可以从 Swift 开始使用的方式预编译。在你的例子中,桥接 header 是 "Alavoc/bridge/Alavoc-Bridging-Header.h",它包括 header for customClassViewController.h(来自 Alavoc/externalLib/customClass),这表明你的开发伙伴想要那个 customClassViewController可在 Swift 代码中访问。

现在关于桥接 header 的令人困惑的事情是它没有递归地包含所有内容,即它只查看第一级定义,如果你在你的导入中导入你想要的东西 Swift,你必须将它显式地添加到桥接 header 中,否则你可能会收到警告(有时是错误)。假设桥接 header 中有 #import "A.h","A.h" 中有 #import "B.h",那么您可能必须将 "B.h" 添加到桥接 [=46] =] 还有。

现在在您的示例中 A = customClassViewController,B = FMDB,通常您需要将 FMDB 添加到桥接 header,但问题是您很可能不希望将 FMDB 导出到Swift 通过你的桥接 header,因为它不是为了这个(它是为了你自己的 objc 代码而不是第三方库)。

解决方案是从 "customClassViewController.h" 中删除第 13 行。这可能会修复桥接 header 编译,但可能会破坏 customClassViewController,因此您需要在 "customClassViewController.m" 中包含 FMDB 并且很可能调整 "customClassViewController.h" 使其与 FMDB 没有任何相关(或forward-declare @class X;).

的用法

如果您将 #import <FMDB/FMDB.h> 移动到您的实施 (.m) 文件并且仍然得到 error: 'FMDB/FMDB.h' file not found,这可能是因为您的 header 搜索路径中没有列出 FMDB 路径。

要解决最后一个问题,只需在 Xcode 构建设置中的 "Header Search Paths" 中包含正确的路径。假设 FMDB 位于 /Users/me/Downloads/Alavoc-ios-master/Alavoc/ASDASD/FMDB(你里面有 /Users/me/Downloads/Alavoc-ios-master/Alavoc/ASDASD/FMDB/FMDB.h),那么你需要打开 Xcode 项目设置 - select 你的目标左侧 - select "Build Settings" 在顶部 - 找到 "Header Search Paths" 设置并添加 /Users/me/Downloads/Alavoc-ios-master/Alavoc/ASDASD 路径