无法导入桥接头

Ala*_*rpa 27 xcode objective-c chartboost swift ios8

我已经阅读了许多处理类似问题的问题和答案,但我还没有找到解决方案.如果有人可以发光,那将是美好的.

我创建了一个Swift项目,现在我想将它与一些Objective-C结合起来.当我尝试#import我的Chartboost.h文件时,我的"无法导入桥接头".所以,只要我的桥接头文件中没有任何内容,Xcode就会找到它,并且没有任何问题.但是一旦我加上这个:

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

我得到错误以及其他38个错误,说"Swift编译错误 - 这里不允许函数定义".

我已经正确导入了我的框架.我的框架搜索路径是正确的.而且只有在我导入Chartboost框架时才会这样.UIKit和基金会工作正常.

以下是我所做的导致问题....首先,我创建了一个新的Obj-C文件,然后点击"是的,当Xcode给我一个弹出窗口询问是否可以配置桥接头.这创建了"FunFacts -Bridging-Header.h"

然后我确保在Swift编译器 - 代码生成下Objective-C Bridging Header路径是正确的.

我甚至提出了一个非常具体的路径/Users/me/Desktop/FunFacts/FunFacts-Bridging-Header.h,它仍然说"导入失败".

我还将Defines Module设置为"Yes"(因为我听说这可能有帮助).我的产品模块名称是FunFacts.

当我尝试添加#import时,为什么FunFacts-Bridging-Header.h无法导入?

xem*_*bra 41

我在另一篇文章中回答了这个问题:与XCode 6.1的Chartboost集成问题

说明:

看起来有些pod和库并不打算导入基本框架,因为他们希望你的代码已经拥有它们.这不适用于Swift,因为导入框架的方式发生了变化.您需要做的就是添加桥接头文件中所需的框架.

回答:

这取决于编译器抛出的错误.如果抱怨NSObject,NSString等等......你需要添加 #import <Foundation/Foundation.h>在你的桥接报头文件的顶部.

如果抱怨UIView,UIButton等等......你需要添加#import <UIKit/UIKit.h>在你的桥接报头文件的顶部.


Ala*_*rpa 16

我想出了2个解决方案!

1)这不是最漂亮的方法,但我将我的Chartboost.h文件中的所有代码复制并粘贴到我的Bridging-Header.h文件中而不是导入.这很有效.但我知道有更好的方法,所以我一直在打猎......

2)我相信,正确的解决方案是我接下来要做的.我的项目(不是目标)框架搜索路径是空的.所以,我继续添加了Chartboost SDK的路径,如下所示:/ Users/me/Desktop/Apps/SDKs/Chartboost
现在它构建并运行没有问题,我没有必要将所有内容复制并粘贴到桥接中头.所需要的只是

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

如果有人遇到类似问题,请阅读我在问题中所做的事情,然后按照这个答案进行跟进.


Chr*_*ley 7

有一个几乎相同的问题,并找到了一个对我有用的解决方案。

我的问题是桥接头不在我的所有目标中。

项目桥接标题


它在我的项目中,但不在我的 UnitTest 目标中。所以我将它添加到我的 UITest 和 UnitTest 中,它开始正常工作。

测试对象



Hir*_*kio 6

像你这样的问题困惑了我.但我找到了解决方案.

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

您应该在代码之前放置此代码(↑).这只是我的解决方案(↓).

#import <Foundation/Foundation.h>
#import <Chartboost/Chartboost.h>
Run Code Online (Sandbox Code Playgroud)

祝好运!


小智 6

这就是我解决它的方式(并且有效!):

  1. 在项目的根目录下创建ProjectProjectName-Bridging-Header.h文件
  2. 在该文件中包含要公开并在swift项目中使用的类的.h
  3. 转到您的项目 - >构建设置 - >搜索路径,并将"始终搜索用户路径"键设置为是.
  4. 将"用户标题搜索路径"设置为项目根路径.

而已.

显然,Xcode会在复制到项目中时错过第三方文件夹

我在Xcode 6.3上,swift 1.2.


小智 5

答案非常简单.

确保在目标部分下的SWIFT_OBJC_BRIDGING_HEADER中添加桥接头路径而不是项目部分.

  • 请提供一个解释,说明为什么这个答案解决了提问者的问题. (3认同)