无法导入桥接头

时间:2014-09-30 08:35:50

标签: objective-c xcode swift ios8 chartboost

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

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

#import <Chartboost/Chartboost.h>

我得到错误以及38个其他错误,说&#34; Swift编译器错误 - 此处不允许函数定义&#34;。

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

这就是我在这个问题上所做的工作....首先,我创建了一个新的Obj-C文件然后点击了#34;是的,当Xcode给我一个弹出窗口,询问它是否可以配置桥接头。这创建了&#34; FunFacts-Bridging-Header.h&#34;

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

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

我还将“定义模块”设置为&#34;是&#34; (因为我听说这可能有帮助)。我的产品模块名称是FunFacts。

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

9 个答案:

答案 0 :(得分:41)

我在另一篇文章中回答了这个问题:Chartboost integration issues with XCode 6.1

说明:

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

解答:

这取决于编译器抛出的错误。 如果它抱怨NSObjectNSString等等,您需要添加 位于桥接头文件顶部的#import <Foundation/Foundation.h>

如果它抱怨UIViewUIButton等等,您需要在桥接头文件的顶部添加#import <UIKit/UIKit.h>

答案 1 :(得分:15)

我想出了2个解决方案!

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

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

#import <Chartboost/Chartboost.h>

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

答案 2 :(得分:6)

像你这样的问题困扰着我。 但我找到了解决方案。

#import <Foundation/Foundation.h>

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

#import <Foundation/Foundation.h>
#import <Chartboost/Chartboost.h>
祝你好运!

答案 3 :(得分:6)

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

  1. 在项目的根目录下创建ProjectProjectName-Bridging-Header.h文件
  2. 在该文件中包含要公开并用于swift项目的类的.h
  3. 转到您的项目 - &gt;构建设置 - &gt;搜索路径,并设置为是&#34;始终搜索用户路径&#34;键。
  4. 设置&#34;用户标头搜索路径&#34;到您的项目根路径。
  5. 那就是它。

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

    我在Xcode 6.3上,swift 1.2。

答案 4 :(得分:5)

答案非常简单。

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

答案 5 :(得分:4)

如果您使用CocoaPods,这可以节省您的时间。 1)您需要做的第一件事就是检查您的Podfile:

True

2)打开baseproj配置并为测试目标设置正确的Pods-Proj.debug,参见附图:enter image description here

答案 6 :(得分:3)

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

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

Project Bridging Header

这是我的项目,但不是我的UnitTest目标。所以我通过我的UITest和UnitTest添加它,它开始没有问题。

Testing Target

答案 7 :(得分:2)

如果您在桥接标题中有这些行:

#ifndef Bridging_Header_h
#define Bridging_Header_h

#endif /* Bridging_Header_h */

只需删除它们,就可以解决Foundation和UIKit的问题。

答案 8 :(得分:0)

一个案例是import <Chartboost+Extention/Chartboost+Extention.h>

正确的方法是import <Chartboost**_**Extention/Chartboost+Extention.h>

仅仅因为Pod构建会将Chartboost+Extention的框架名称更改为Chartboost_Extention