在将Objective-C框架导入到Swift项目中时,在Bridging Header中find“找不到文件”

我有一个Swift项目,我试图导入基于ObjC的框架。 该框架位于项目path下的目录中,并由Xcode中的项目引用。 它也被添加到项目“Build Phases”页面中的“Link Binary with Libraries”中。

但是,出于某种原因,我似乎无法将框架包含在Bridging-Header文件中。 我得到以下错误:

BridgingHeader.h:5:9: error: 'Parse/Parse.h' file not found #import <Parse/Parse.h> ^ <unknown>:0: error: failed to import bridging header 'BridgingHeader.h' 

我检查过的东西:

  1. “安装Objective-C兼容性标题”设置为“是”。
  2. 标题searchpath包含框架的path。

我确定我错过了一些东西,所以如果有人有任何线索的话,那就太棒了。

find了解决办法:

  • “Objective-C桥接头”设置(又名SWIFT_OBJC_BRIDGING_HEADER )必须设置在目标级别,而不是项目级别。 一定要删除项目级别的设置值。

(对我来说,这看起来像一个Xcode错误,因为我不知道为什么修复它)。

我有同样的问题。 例如,我将所有从#import "HMSegmentedControl.h"导入改为#import <HMSegmentedControl/HMSegmentedControl.h>

我们遇到了同样的错误信息,原因完全不同。

build立:

  • 应用程序目标,所有Obj-C代码
  • unit testing目标与一个单一的快速testing用例和一个桥头指代应用程序代码

当我们添加第二个快速testing用例时,在一个干净的(或者队友的机器上)之后,我们在构buildunit testing目标时看到了这个错误。

这是通过添加一个虚拟的Obj-C类到unit testing目标。

我不得不添加我的lib目录在用户头searchpath:

测试目标设置 - 用户头部搜索路径

在我的情况下, lib目录包含.a -library文件和一些头文件。 这些包含在桥接头文件中。 但是,swift编译器不会find它们。 只有当我将${PROJECT_DIR}/lib到用户头部searchpath时,它才构buildtesting目标。

(我在Mavericks 10.9.5上使用Xcode 6.2)

这不知何故做了我的伎俩:

  • 清洁项目
  • 清理生成文件夹
  • 重新启动Xcode

那么它的小奇怪,但我想你必须添加一个资源到您的testing目标的“复制捆绑资源”阶段,使其加载您的主要应用程序目标的所有标题。 在我的情况下,我添加了main.storyboard ,并照顾了错误。

在这里输入图像说明

我有一个问题,并花了2个小时find后修复它。 我的环境如下:

椰子树0.39.0

swift 2.x

XCode 7.3.1

脚步:

  1. 项目path: project_name / project_name / your_bridging_header.h
  2. 在构build设置的Swift部分,Objective-C桥接头应该是: project_name / your_bridging_header.h
  3. your_bridging_header.h中 ,将所有声明从.h更改为#import
  4. 在正在使用your_3rd_party的课堂上 。 声明导入your_3rd_party

我有同样的问题。 对我来说,原因是我的应用程序和我的今天扩展使用相同的桥接头。 我今天的扩展不包括parsing,但是因为它是在桥接头中定义的,所以它试图寻找它。 我为我的“今日扩展”创build了一个新的桥接头,错误消失了。

我的框架工作之前,突然停止工作,这些答案都没有为我工作。 我在“构build阶段”>“链接二进制库”中删除了该框架,然后重新添加它。 再次开始工作。

如果帮助任何人。

在我的情况下,我的obj-c文件被添加了一个参考文件夹(xcode中的蓝色文件夹),并且头文件找不到它们。 刚刚添加的文件,而不是文件夹,从发现者到Xcode和解决。

我刚刚复制了一个现有的scheme,并添加了另一个configuration项目。 我不得不在框架的项目中添加一个具有相同名称的configuration,以便它也构build在同一个DerivedData/($AppName)/Build/Products/($CONFIGURATION_NAME)文件夹中。 否则.framework文件不会被创build,因此不能被导入。

当我试图在我的Swift项目中使用Objective-C中编写的pod时,我遇到了同样的问题,上面的解决scheme似乎都不起作用。

在podfile中我有use_frameworks! 书面。 评论这条线,然后再次运行pod install解决了这个问题,我的错误消失了。

在使用CocoaImageHashing库时出现此错误。 问题是searchpath错了。 因此,在目标级别,在生成设置 – >searchpath – >标题searchpath中,path对应于非现有文件夹,例如“$ {PODS_ROOT} / Headers / Public / CocoaImageHashing”,当文件夹结构Headers / Public /不存在。 我添加了path$ {PODS_ROOT} / CocoaImageHashing,错误消失了。

如果使用cocoapods,请尝试通过运行以下命令重新安装pod。

 pod install 

(截至2017年5月27日更新)

Xcode 8. Swift项目 – 导入Objective C

事情要知道:

  1. 桥接头文件必须保存在项目的文件夹中。 (即不保存在.xcodeproj保存的同一级别,而是保存在所有快速和客观的c文件保存的文件夹下一级)。 它仍然可以在顶层find该文件,但是它不能正确链接,并且能够将Objective C文件导入桥接头文件
  2. 桥接头文件可以命名为任何东西,只要它是一个.h头文件
  3. 确保Build Settings> Swift Compiler – General> Objective C Bridging Header中的path正确指向你桥接的头文件
  4. 重要提示:如果仍然没有find,请尝试先清空桥接头文件,并清除当前写入的所有导入。 确保可以首先find桥接头文件,然后开始将目标c导入添加到该文件。 出于某种原因,即使find它也会反弹相同的“找不到”的错误,但它不喜欢你因为某种原因而尝试导入
  5. 您不应该在您的任何目标C文件中#import“MyBridgingHeaderFile.h”。 这也会导致“找不到文件”错误