Xcode无法发出预编译的头文件?

时间:2018-04-08 09:53:40

标签: objective-c swift xcode header fmdb

提前感谢您给我的帮助。

我昨天在互联网上搜索了半天,现在已经有两个小时了,我还没找到任何东西(超过那两个没有帮助的链接FMDatabase.h not found when using route-me library&amp; Failed to emit precompiled header for bridging header)< / p>

所以这就是我的问题:我手边有一个以前开发人员正在研究的项目,当我尝试启动它时,我有两个错误:

  

无法发出预编译的标头   '/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'

     

/Users/me/Downloads/Alavoc-ios-master/Alavoc/externalLib/customClass/customClassViewController.h:13:9:   错误:找不到'FMDB / FMDB.h'文件

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

  

致命错误:模块文件   '/Users/me/Library/Developer/Xcode/DerivedData/ModuleCache/30E4RG2TSVLXF/Foundation-3DFYNEBRQSXST.pcm'   已过期,需要重建:签名不匹配说明:   进口   '/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:   注意:包含在的文件中   /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))并且无法发出预编译的标头:

  

致命错误:文件   '/Users/me/Downloads/Alavoc-ios-master/Alavoc/bridge/Alavoc-Bridging-Header.h'   自预编译头文件以来已被修改   '/Users/me/Library/Developer/Xcode/DerivedData/Alavoc-arfzuirebtfstncdztyvgvtpcbgw/Build/Intermediates.noindex/PrecompiledHeaders/Alavoc-Bridging-Header-swift_1I75NH5N40QPS-clang_30E4RG2TSVLXF.pch'   建成注释:请重建预编译头   '/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:   错误:找不到'FMDB / FMDB.h'文件

     

import

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

'/用户/我/库/开发商/ Xcode中/ DerivedData / Alavoc-arfzuirebtfstncdztyvgvtpcbgw /建造/ Intermediates.noindex / PrecompiledHeaders / Alavoc-桥接报头 - swift_1I75NH5N40QPS-clang_30E4RG2TSVLXF.pch'   用于桥接标题   '/Users/me/Downloads/Alavoc-ios-master/Alavoc/bridge/Alavoc-Bridging-Header.h'

2 个答案:

答案 0 :(得分:4)

此错误与错误的桥接标头有关。桥接头是一个特殊的头文件,它列出了所有具有必须可从Swift代码访问的类的Objective-C头文件。所有桥接头定义都以一种可以从Swift中使用的方式进行预编译。在你的情况下,桥接头是“Alavoc / bridge / Alavoc-Bridging-Header.h”,它包含customClassViewController.h的头文件(来自Alavoc / externalLib / customClass),它表明你的开发人员希望customClassViewController可以访问在Swift代码中。

现在关于桥接标题的令人困惑的事情是,它不是递归地包含所有内容,即它只是在第一级定义上查找,如果你在导入中导入了你想要在Swift中的东西,你必须添加它明确地对桥接标题,否则你可能会收到警告(或有时会出错)。假设您在桥接标题中有#import "A.h",并且您在“A.h”中有#import "B.h",那么您可能还需要在桥接标题中添加“B.h”。

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

解决方案是从“customClassViewController.h”中删除第13行。这可能会修复桥接头编译,但可能会破坏customClassViewController,因此您需要在“customClassViewController.m”中包含FMDB,并且很可能使“customClassViewController.h”不具有与FMDB相关的任何内容(或者向前声明那些使用@class X;)。

如果您将#import <FMDB/FMDB.h>移至实施(.m)文件并仍然获得error: 'FMDB/FMDB.h' file not found,则可能是您的标题搜索路径中未列出FMDB路径。

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

答案 1 :(得分:0)

如果您正在使用cocoapod并且它是一个框架,建议您不要将其包含在预编译的标题中。

相反,objc文件,使用:

@import framework_name;