100

我有一个 Swift 项目,我正在尝试导入基于 ObjC 的框架。该框架位于项目路径下的目录中,并被 Xcode 中的项目引用。它也被添加到项目“构建阶段”页面的“链接二进制文件”中。

但是,由于某种原因,我似乎无法在 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. “Install Objective-C Compatibility Header”设置为“YES”。
  2. 标头搜索路径包括框架的路径。

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

4

22 回答 22

87

找到了解决方案:

  • “Objective-C Bridging Header”设置(又名SWIFT_OBJC_BRIDGING_HEADER)必须设置在目标级别,而不是项目级别。请务必删除项目级别的设置值。

(对我来说,这似乎是一个 Xcode 错误,因为我不知道它为什么要修复它)。

于 2015-01-18T06:26:49.683 回答
59

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

于 2016-02-12T11:13:47.933 回答
27

lib我必须在用户标题搜索路径中添加我的目录:

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

在我的情况下,该lib目录包含.a-library 文件和一些头文件。这些包含在桥接头文件中。但是,快速编译器找不到它们。只有当我添加${PROJECT_DIR}/lib到用户标题搜索路径时,它才会构建测试目标。

(我在 Mavericks 10.9.5 上使用 Xcode 6.2)

于 2015-04-27T18:02:31.910 回答
17

我们遇到了相同的错误消息,但原因完全不同。

设置:

  • App 目标,所有 Obj-C 代码
  • 具有单个 swift 测试用例和引用应用程序代码的桥接头的单元测试目标

当我们添加第二个 swift 测试用例时,在清理之后(或在队友的机器上),我们在构建单元测试目标时看到了这个错误。

通过向单元测试目标添加一个虚拟 Obj-C 类来修复它。

于 2015-03-06T23:30:04.653 回答
5

使用 Cocoapods 安装库 CocoaImageHashing 时出现此错误。问题是搜索路径错误。所以在目标级别,在 Build Settings -> Search Paths -> Header Search Paths 中,路径对应于不存在的文件夹,例如“${PODS_ROOT}/Headers/Public/CocoaImageHashing”,当文件夹结构 Headers/Public / 不存在。我添加了路径 ${PODS_ROOT}/CocoaImageHashing 并且错误消失了。

于 2017-02-23T11:09:43.783 回答
5

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

pod install
于 2015-09-02T11:20:35.433 回答
5

这在添加/重命名当前配置后发生在我身上,这是有道理的。

每个配置都使用 cocoapods 生成的配置集,所以这些东西需要匹配。

因此,如果您添加/重命名配置,这些将需要使用正确的配置集,并为此运行pod install

于 2019-02-08T06:43:41.807 回答
4

好吧,这有点奇怪,但我想您必须在测试目标的“复制捆绑资源”阶段添加一个资源,以使其从您的主应用程序目标加载所有标头。就我而言,我添加main.storyboard并解决了错误。

在此处输入图像描述

于 2015-04-28T16:20:21.557 回答
4

这以某种方式对我有用:

  • 清洁项目
  • 清理构建文件夹
  • 重启 Xcode
于 2016-08-04T15:11:31.463 回答
4

(2017 年 5 月 27 日更新)

Xcode 8. Swift 项目 - 导入 Objective C。

要知道的事情:

  1. 桥接头文件必须保存在项目的文件夹中。(即不保存在与 .xcodeproj 相同的级别,而是在保存所有 swift 和 Objective c 文件的文件夹中更深一层)。它仍然可以在顶层找到该文件,但它不会正确链接并且无法将 Objective C 文件导入到桥接头文件中
  2. 桥接头文件可以命名为任何名称,只要它是 .h 头文件即可
  3. 确保 Build Settings > Swift Compiler - General > Objective C Bridging Header 中的路径正确指向您制作的桥接头文件
  4. 重要提示:如果您仍然“找不到”,请先尝试清空您的桥接头文件并删除您当前在那里写入的所有导入。确保首先可以找到桥接头文件,然后开始向该文件添加目标 c 导入。出于某种原因,即使找到它,它也会返回相同的“未找到”错误,但由于某种原因它不喜欢您尝试的导入
  5. 您不应该在任何目标 C 文件中 #import "MyBridgingHeaderFile.h"。这也会导致“找不到文件”错误
于 2017-05-29T16:19:21.273 回答
3

如果帮助任何人。

在我的情况下,我添加的 obj-c 文件有一个参考文件夹(xcode 中的蓝色文件夹),并且标题找不到它们。只需将文件而不是文件夹从finder添加到xcode并解决。

于 2016-07-13T22:44:22.927 回答
2

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

于 2014-12-30T16:14:25.380 回答
2

如果您使用的是 Cocoapods,请尝试:

  1. 退出 Xcode
  2. pod deintegrate
  3. pod install

对我来说,这解决了这个奇怪的问题。

于 2021-07-27T07:06:50.807 回答
2

我的框架以前工作过,但突然停止工作,这些答案都不适合我。我在 Build Phases > Link Binary With Libraries 中删除了框架,然后重新添加了它。又开始工作了。

于 2016-02-19T15:34:10.357 回答
2

我遇到了一个问题,花了 2 个小时才找到并修复了它。我的环境如下:

可可足类 0.39.0

迅捷2.x

XCode 7.3.1

脚步:

  1. 项目路径:project_name/project_name/your_bridging_header.h
  2. 在 Build Setting 的 Swift 部分中,Objective-C Bridging Header 应该是:project_name/your_bridging_header.h
  3. your_bridging_header.h中,将所有声明从.h更改为#import
  4. 在使用your_3rd_party的课堂上。声明导入 your_3rd_party
于 2016-05-16T10:31:49.923 回答
1

我刚刚复制了一个现有方案并向项目添加了另一个配置。我必须在框架的项目中添加一个同名的配置,以便它也可以在同一个DerivedData/($AppName)/Build/Products/($CONFIGURATION_NAME)文件夹中构建。否则,不会创建 .framework 文件,因此无法导入。

于 2016-09-16T19:35:50.640 回答
1

我今天在我的 Swift 项目中尝试使用用 Objective-C 编写的 pod 时遇到了同样的问题,上述解决方案似乎都不起作用。

在我use_frameworks!写的 podfile 中。评论这一行然后pod install再次运行为我解决了这个问题,错误就消失了。

于 2017-01-18T08:18:11.133 回答
0

清理项目,清理构建文件夹,重新启动 Xcode。我只是在项目 goto > 构建设置 > 搜索关键字中删除路径。Swift Compiler - General -> Objective-C Bridging header 对我有用。

于 2019-02-05T14:12:54.163 回答
0

就我而言,我只需要退出模拟器......

于 2018-06-14T11:22:17.057 回答
0

我对 pod 也有类似的问题。基本上试图运行我的 UI 测试,Xcode 抱怨缺少 pod。解决这个问题比上面描述的要简单得多:

  1. 转到项目文件(主要不是目标)
  2. 单击“信息”选项卡(最左侧)
  3. 为 UI 测试目标设置正确的 pod 配置(“部署目标”下的“配置”部分)

在职的!

我在一个线程中找到了它:https ://github.com/CocoaPods/CocoaPods/issues/2695

听起来有点像可可豆荚的错误,但我可以看到为什么它可能是棘手的情况。

于 2018-03-22T14:28:44.233 回答
0

2019 年 8 月

在我的例子中,我想在来自同一目标的 Objective-C 头文件中使用 Swift 协议,为此我需要使用 Swift 协议的前向声明来在 Objective-C 接口中引用它。这对于在 Objective-C 头文件中使用 Swift 类应该是有效的。要使用前向声明,请参见使用前向声明在 Objective-C 标头中包含 Swift 类的文档中的以下示例:

// MyObjcClass.h
@class MySwiftClass; // class forward declaration
@protocol MySwiftProtocol; // protocol forward declaration

@interface MyObjcClass : NSObject
- (MySwiftClass *)returnSwiftClassInstance;
- (id <MySwiftProtocol>)returnInstanceAdoptingSwiftProtocol;
// ...
@end
于 2019-08-06T07:32:54.020 回答
0

我有类似的问题,只有一种解决方案适合我。我尝试了所有建议,并且我知道我将桥接头设置得很好,因为我还有其他一些库在工作。

当我在没有 Cocoapods 的情况下将库(拖放)复制到项目中时,只有在那之后我才能导入标题而不会出错。

我使用了 facebook/Shimmer 库。

于 2018-02-09T13:15:42.410 回答