Swift Bridging Header导入问题

Nik*_*hik 119 ios swift xcode6 objective-c-swift-bridge

按照说明,我创建了一个桥接标题并添加到我的项目中.不幸的是,发生了以下错误:

:0:错误:无法导入Objective-C标题'--- path - to --- header/.... h'

截图1

在构建设置中,我将标题搜索路径字符串添加到桥接标题的位置,但没有任何帮助.

有没有人遇到过这个问题?

Ren*_*cki 150

小心将文件添加到错误抱怨的文件夹中!我犯了同样的错误,如果你从Xcode创建文件,它将转到文件夹:Project-> Project-> Header.h

Xcode正在寻找Project-> Header.h

这意味着您需要将文件放在项目文件夹(ProjectName-> ProjectNameFolder)中!

希望有所帮助;)

更新:我不确定我是否明白你的意思,但试试这个来解决你的问题:
1.删除你创建的所有桥接文件,直到现在.
2.选择项目的主文件夹,然后点击新文件 - > iOS-> Header文件.
3.在创建的头文件中写入导入.
4.在Xcode-> Build Settings中选择项目,输入搜索字段:bridging并输入密钥SWIFT_OBJC_BRIDGING_HEADER头文件的名称或其路径!

如果您按照此步骤操作,您的头文件将在正确的位置创建!

:D希望有所帮助!

  • 首先,答案是"需要将文件置于xcodeproj的同一级别",最后,它说"确保文件...不在xcodeproj的同一级别".为什么? (11认同)
  • 我尝试了一切,但nothnig对我有用.这非常恼人.我正在使用xcode 8和swift 3.你能帮助我吗? (5认同)
  • 我的意思是该文件必须位于项目的de子文件夹内,而不是与xcodeproj相同的级别.示例:在项目的文件夹中,您有project,project.xcodeproj和projecttests.该文件必须在项目文件夹中:) (3认同)
  • 我很困惑你说“这意味着你需要将文件放在 xcodeproj 的同一级别!” 但是在您说“确保该文件位于项目的主文件夹内,而不是在 xcodeproj 的同一级别之后!” 哪一个? (2认同)

Dan*_*sko 67

在我的情况下,这实际上是循环引用的错误.我在桥接头中导入了一个类,该类的头文件正在导入swift头(<MODULE_NAME>-Swift.h).我这样做是因为在Obj-C头文件中我需要使用在Swift中声明的类,解决方案是简单地使用@class声明.

所以基本上错误说"无法导入桥接头",上面的错误表示<MODULE_NAME>-Swift.h文件未找到,上面是指向特定Obj-C头文件(即视图控制器)的错误.

检查这个文件我注意到它在头文件中声明了-Swift.h.将此导入移动到实现解决了该问题.所以我需要使用一个对象,让我们调用它MyObject在Swift中定义,所以我只需更改标题即可

@class MyObject;
Run Code Online (Sandbox Code Playgroud)


小智 30

找到路径:

构建设置/ Swift编译器代码生成/ Objective-C桥接头

并删除该文件.那你应该没问题.

  • 在Xcode 8中 - 而不是"代码生成",它在Swift Compiler-General中. (7认同)
  • 你赢了.我浪费了这么多时间.简单有效.Xcode正在用这条路径做一些事情,比如在幕后将它附加到$(SRCROOT).我认为在我的道路上有一个空间可能是问题的一部分,但这是银弹. (2认同)

Kyl*_*egg 17

这可能只会影响一小部分人,但在我的情况下,我的项目使用CocoaPods,其中一个pod有一个带有自己的CocoaPods的子规范.解决方案是使用全角度导入来引用子窗格中的任何文件.

#import <HexColors/HexColor.h>
Run Code Online (Sandbox Code Playgroud)

而不是

#import "HexColor.h"
Run Code Online (Sandbox Code Playgroud)

  • 有什么不同? (2认同)

M.O*_*man 16

对于我删除派生数据修复它,我注意到即使我从旧提交检出,同样的问题发生.

您可以从窗口 - >项目中找到该选项.


G S*_*G S 9

"我们需要告诉Xcode在哪里查找我们在桥接头中列出的头文件.找到搜索路径部分,并更改用户头搜索路径的项目级设置,为'Pods'添加一个递归条目目录:Pods /**" http://swiftalicio.us/2014/11/using-cocoapods-from-swift/


Rol*_*som 8

对我而言,这是因为我忘了将它添加到Target的Build Settings中.

在此输入图像描述


dou*_*mby 6

我也遇到过这个问题,遗憾的是它只是SDK + Xcode中的一个错误.我和WWDC的一位工程师谈过这个以及我在使用CloudKit时遇到的其他一些问题.这些错误将在Xcode的下一个种子中得到解决.

这是使用测试版软件的有趣部分.

  • 实际上可以通过将标头放在正确的位置来解决该问题.对我有用的是调用标题Project-Bridging-Header.h并将其放在我的项目文件夹树的根目录中(作为我的主要Xcode项目文件的兄弟).见@ renan-kosicki答案 (5认同)