在将Objective-C框架导入Swift项目时,在Bridging Header中获取"找不到文件"

Dia*_*rat 90 xcode swift

我有一个Swift项目,我正在尝试导入基于ObjC的框架.该框架位于项目路径下的目录中,并由Xcode中的项目引用.它还在项目的"构建阶段"页面中添加到"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'
Run Code Online (Sandbox Code Playgroud)

我检查过的事情:

  1. "安装Objective-C Compatibility Header"设置为"YES".
  2. 标题搜索路径包括框架的路径.

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

Dia*_*rat 73

找到了解决方案:

  • "Objective-C Bridging Header"设置(aka SWIFT_OBJC_BRIDGING_HEADER)必须设置为Target级别,而不是Project级别.务必删除项目级别的设置值.

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

  • 我做到了,但这里没有用.使用xcode 6.2. (11认同)
  • 难以置信的.谢谢. (3认同)
  • @MarcoAlmeida,如果您有测试目标,请尝试从中删除“Objective-C Bridging Header”设置。它应该有帮助。 (2认同)
  • 嘿!这里有同样的问题:(虽然上面描述的方法没有解决... (2认同)

jam*_*kid 56

我有同样的问题.我改变了我的所有进口 #import "HMSegmentedControl.h"#import <HMSegmentedControl/HMSegmentedControl.h>的例子.

  • 要与cocoapods合作,这是必要的.在Bridging标题中,永远不要将pod导入为#import"abc.h"用户#import <abc/abc.h>竖起大拇指. (7认同)

Rai*_*rze 24

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

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

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

(我在Mavericks 10.9.5上使用Xcode 6.2)


Dan*_*son 17

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

建立:

  • 应用目标,所有Obj-C代码
  • 单元测试目标,带有一个快速测试用例和一个引用应用程序代码的桥接头

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

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

  • 谢谢.尽管绝对毫无意义,但绝对有效. (5认同)

Ank*_*oel 5

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

pod install
Run Code Online (Sandbox Code Playgroud)


Hlu*_*ung 5

这对我来说不知怎的做法:

  • 清洁项目
  • 清理构建文件夹
  • 重启Xcode

  • 可悲的是,这种特殊的命中和尝试技巧往往是正确的答案。 (3认同)

Nic*_*pes 5

与Cocoapods一起安装库CocoaImageHashing时出现此错误。问题是搜索路径错误。因此,在目标级别上,当文件夹结构为Headers / Public时,在“构建设置”->“搜索路径”->“标题搜索路径”中,这些路径对应于不存在的文件夹,例如“ $ {PODS_ROOT} / Headers / Public / CocoaImageHashing” /不存在。我添加了路径$ {PODS_ROOT} / CocoaImageHashing,错误消失了。


rgk*_*shi 5

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

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

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