我已经阅读了许多处理类似问题的问题和答案,但我还没有找到解决方案。如果有人可以发光,那就太好了。
我创建了一个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无法导入?
答案 0 :(得分:41)
我在另一篇文章中回答了这个问题:Chartboost integration issues with XCode 6.1
似乎有些pod和库不需要导入基本框架,因为他们希望你的代码已经拥有它们。这不适用于Swift,因为导入框架的方式发生了变化。 您需要做的就是添加桥接头文件中所需的框架。
这取决于编译器抛出的错误。
如果它抱怨NSObject
,NSString
等等,您需要添加
位于桥接头文件顶部的#import <Foundation/Foundation.h>
。
如果它抱怨UIView
,UIButton
等等,您需要在桥接头文件的顶部添加#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)
那就是它。
显然,当Xcode复制到您的项目中时,Xcode会错过第三方文件夹
我在Xcode 6.3上,swift 1.2。
答案 4 :(得分:5)
答案非常简单。
确保在目标部分下的SWIFT_OBJC_BRIDGING_HEADER中添加桥接标题路径而不是项目部分。
答案 5 :(得分:4)
如果您使用CocoaPods,这可以节省您的时间。 1)您需要做的第一件事就是检查您的Podfile:
True
答案 6 :(得分:3)
有一个几乎相同的问题,并找到了适合我的解决方案。
我的问题是桥接标题不在我的所有目标中。
这是我的项目,但不是我的UnitTest目标。所以我通过我的UITest和UnitTest添加它,它开始没有问题。
答案 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