我有一个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'
我检查过的事情:
-
"Install Objective-C Compatibility Header"设置为"YES" .
-
Headers 搜索路径包括框架的路径 .
我确定我错过了一些东西,所以如果有人有任何线索,那就太好了 .
18 回答
我刚刚复制了现有的方案,并为项目添加了另一个配置 . 我不得不为框架的项目添加一个具有相同名称的配置,以便它也可以构建在相同的
DerivedData/($AppName)/Build/Products/($CONFIGURATION_NAME)
文件夹中 . 否则,不会导入.framework文件 .我有同样的问题 . 例如,我将所有导入从
#import "HMSegmentedControl.h"
更改为#import <HMSegmentedControl/HMSegmentedControl.h>
.今天我尝试在我的Swift项目中使用Objective-C编写的pod时遇到了同样的问题,上述解决方案似乎都没有用 .
在podfile中我写了
use_frameworks!
. 评论这一行,然后再次运行pod install
解决了这个问题,错误就消失了 .我有一个问题,花了2个小时才找到它 . 我的环境如下:
cocoapod 0.39.0
swift 2.x
XCode 7.3.1
脚步:
项目路径: project_name/project_name/your_bridging_header.h
在Build Setting中的Swift部分,Objective-C Bridging Header应为: project_name/your_bridging_header.h
在 your_bridging_header.h 中,将所有声明从 .h 更改为 #import
正在使用的类 your_3rd_party . 声明 import your_3rd_party
在我的情况下,我只是不得不退出模拟器......
我有一个与pods类似的问题 . 基本上尝试运行我的UI测试,Xcode抱怨丢失的pod . 对此的解决方案比上述任何解决方案简单得多:
转到项目文件(主要不是目标)
点击"Info"标签(最左边)
为UI测试目标设置了正确的pod配置("Configurations"在"Deployment Target"下面的部分)
工作!
我发现它在一个帖子中:https://github.com/CocoaPods/CocoaPods/issues/2695
听起来有点像可可 beans 荚的虫子,但我可以看到为什么它可能是棘手的情况 .
使用Cocoapods安装库CocoaImageHashing时出现此错误 . 问题是搜索路径错误 . 所以在Target级别,在Build Settings - > Search Paths - > Header Search Paths中,路径对应于非现有文件夹,例如“$ / Headers / Public / CocoaImageHashing”,当文件夹结构Headers / Public时/不存在 . 我添加了路径$ / CocoaImageHashing,错误消失了 .
这在某种程度上对我有用:
清洁项目
清理构建文件夹
重启Xcode
我们遇到了相同的错误消息,原因完全不同 .
Build :
App目标,所有Obj-C代码
单元测试目标,带有一个swift测试用例和一个引用应用程序代码的桥接头
当我们添加第二个快速测试用例时,在干净(或在队友的机器上)之后,我们在构建单元测试目标时看到了这个错误 .
通过向单元测试目标添加虚拟Obj-C类来修复它 .
如果使用cocoapods,请尝试通过运行以下命令重新安装pod .
找到了解决方案:
SWIFT_OBJC_BRIDGING_HEADER
)必须设置为目标级别,而不是项目级别 . 务必删除项目级别的设置值 .(对我来说,它似乎是一个Xcode错误,因为我不知道它为什么修复它) .
我的框架之前正在工作,突然停止工作,这些答案都没有对我有用 . 我删除了Build Phases> Link Binary With Libraries中的框架,并重新添加了它 . 再次开始工作 .
(2017年5月27日更新)
Xcode 8. Swift Project - importing Objective C.
要知道的事情:
桥接头文件必须保存在项目的文件夹中 . (即没有保存在.xcodeproj保存的同一级别,而是保存在保存所有swift和Objective c文件的文件夹中的一级) . 它仍然可以在顶层找到该文件,但它无法正确链接并能够将Objective C文件导入到桥接头文件中
桥接头文件可以命名为任何东西,只要它是.h头文件即可
确保Build Settings> Swift Compiler - General> Objective C Bridging Header中的路径正确指向您所做的桥接头文件
重要提示:如果您因某种原因导致尝试导入
您不应该在任何目标C文件中#import "MyBridgingHeaderFile.h" . 这也会导致"file not found"错误
我不得不加我的
lib
用户 Headers 搜索路径中的目录:在我的例子中,
lib
目录包含.a
-library文件和一些头文件 . 这些包含在桥接头文件中 . 但是,swift编译器无法找到它们 . 只有当我将${PROJECT_DIR}/lib
添加到用户 Headers 搜索路径时,它才构建了测试目标 .(我在Mavericks 10.9.5上使用Xcode 6.2)
如果帮助任何人 .
在我的情况下,我添加的obj-c文件有一个参考文件夹(xcode中的蓝色文件夹), Headers 找不到它们 . 刚刚将文件,而不是文件夹,从finder添加到xcode并解决了 .
我有类似的问题,只有一个解决方案适合我 . 我尝试了所有建议,我知道我设置我的桥接 Headers 很好,因为我有一些其他的lib工作 .
当我将库(拖放)复制到项目中时,没有Cocoapods,只有在那之后我才能导入 Headers 而没有错误 .
我用了facebook / Shimmer库 .
好吧有点奇怪,但我想你必须在你的测试目标的"Copy Bundle Resources"阶段添加一个资源,使其加载你的主应用程序目标的所有 Headers . 就我而言,我添加了
main.storyboard
并且它处理了错误 .我有同样的问题 . 对我来说,原因是我在我的应用程序和今天的扩展程序中使用相同的桥接 Headers . My Today Extension不包括Parse,但因为它是在桥接头中定义的,所以它试图寻找它 . 我为今天的扩展创建了一个新的桥接 Headers ,错误消失了 .