我有一个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'
我检查过的事情:
我确定我错过了一些东西,所以如果有人有任何线索,那就太棒了。
答案 0 :(得分:68)
找到解决方案:
SWIFT_OBJC_BRIDGING_HEADER
)必须设置在目标级别,而不是项目级别。请务必删除项目级别的设置值。(对我而言,它似乎是一个Xcode错误,因为我不知道它为什么会修复它。)
答案 1 :(得分:54)
我有同样的问题。我改变了所有的进口货物
例如#import "HMSegmentedControl.h"
到#import <HMSegmentedControl/HMSegmentedControl.h>
。
答案 2 :(得分:23)
我必须在用户标题搜索路径中添加我的lib
目录:
在我的情况下,lib
目录包含.a
- 库文件和一些头文件。这些包含在桥接头文件中。但是,swift编译器无法找到它们。只有当我将${PROJECT_DIR}/lib
添加到用户标题搜索路径时,它才构建了测试目标。
(我在Mavericks 10.9.5上使用Xcode 6.2)
答案 3 :(得分:17)
我们遇到了相同的错误消息,原因完全不同。
设定:
当我们添加第二个快速测试用例时,在干净(或在队友的机器上)之后,我们在构建单元测试目标时看到了这个错误。
通过向单元测试目标添加虚拟Obj-C类来修复它。
答案 4 :(得分:5)
这对我来说不知何故:
答案 5 :(得分:4)
这有点奇怪,但我想你必须在测试目标的“Copy Bundle Resources”阶段添加一个资源,以便从主应用程序目标中加载所有头文件。在我的情况下,我添加了main.storyboard
,它处理了错误。
答案 6 :(得分:3)
如果使用cocoapods,请尝试通过运行以下命令重新安装pod。
pod install
答案 7 :(得分:3)
如果帮助任何人。
在我的情况下,我添加的obj-c文件有一个参考文件夹(xcode中的蓝色文件夹),标题找不到它们。 刚刚将文件而不是文件夹从finder添加到xcode并解决了。
答案 8 :(得分:2)
我有一个问题并在花了2个小时才找到它。我的环境如下:
cocoapod 0.39.0
swift 2.x
XCode 7.3.1
步骤:
答案 9 :(得分:2)
我遇到了同样的问题。对我来说,原因是我在我的应用程序和今天的扩展程序中使用相同的桥接标题。 My Today Extension不包括Parse,但因为它是在桥接头中定义的,所以它试图寻找它。我为今天的扩展创建了一个新的桥接标题,错误消失了。
答案 10 :(得分:1)
我的框架之前正在工作,突然停止工作,这些答案都没有对我有用。我在Build Phases中删除了框架&gt; Link Binary With Libraries,并重新添加它。再次开始工作。
答案 11 :(得分:1)
我刚刚复制了现有方案,并为项目添加了另一个配置。我必须为框架项目添加一个具有相同名称的配置,以便它也可以构建在同一个DerivedData/($AppName)/Build/Products/($CONFIGURATION_NAME)
文件夹中。否则.framework文件无法创建,因此无法导入。
答案 12 :(得分:1)
今天我在Swift项目中尝试使用Objective-C编写的pod时遇到了同样的问题,上述解决方案似乎都没有用。
在podfile中我写了use_frameworks!
。评论此行然后再次运行pod install
解决了这个问题,错误就消失了。
答案 13 :(得分:1)
(2017年5月27日更新)
Xcode 8. Swift项目 - 导入目标C。
要了解的事情:
答案 14 :(得分:1)
如果您使用 Cocoapods,请尝试:
pod deintegrate
pod install
对我来说,这解决了奇怪的问题。
答案 15 :(得分:0)
我有类似的问题,只有一个解决方案适合我。我尝试了所有建议,我知道我设置我的桥接标题很好,因为我有一些其他的lib工作。
当我将库(拖放)复制到项目中时,没有Cocoapods,只有在那之后我才能导入标题而没有错误。
我使用了facebook / Shimmer库。
答案 16 :(得分:0)
我的pod有类似的问题。基本上试图运行我的UI测试,Xcode抱怨丢失的pods。对此的解决方案比上述任何解决方案简单得多:
工作!
我在一个帖子中找到了它:https://github.com/CocoaPods/CocoaPods/issues/2695
听起来有点像可可豆荚的虫子,但我可以看到为什么它可能是棘手的情况。
答案 17 :(得分:0)
在我的情况下,我只是不得不退出模拟器...
答案 18 :(得分:0)
清理项目,清理生成文件夹,重新启动Xcode。我只是在项目goto>构建设置>搜索关键字中删除路径。 Swift编译器-常规-> Objective-C桥接头为我工作。
答案 19 :(得分:0)
添加/重新命名当前配置后,这发生在我身上,这很有意义。
每个配置都利用cocoapods生成的配置集,因此这些 东西需要匹配。
因此,如果您添加/重命名配置,则这些将需要使用正确的配置集,而对于运行file1 3
的配置集来说,即可。
答案 20 :(得分:0)
2019年8月
在我的情况下,我想在来自同一目标的Objective-C头文件中使用Swift协议,为此,我需要使用Swift协议的 forward声明来引用它在Objective-C界面中。对于在Objective-C头文件中使用Swift类,同样应该有效。要使用前向声明,请参见docs中的以下示例,该示例位于使用前向声明在Objective-C标题中包括Swift类:
// MyObjcClass.h
@class MySwiftClass; // class forward declaration
@protocol MySwiftProtocol; // protocol forward declaration
@interface MyObjcClass : NSObject
- (MySwiftClass *)returnSwiftClassInstance;
- (id <MySwiftProtocol>)returnInstanceAdoptingSwiftProtocol;
// ...
@end