在将Objective-C框架导入到Swift项目中时,在Bridging Header中find“找不到文件”
我有一个Swift项目,我试图导入基于ObjC的框架。 该框架位于项目path下的目录中,并由Xcode中的项目引用。 它也被添加到项目“Build Phases”页面中的“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'
我检查过的东西:
- “安装Objective-C兼容性标题”设置为“是”。
- 标题searchpath包含框架的path。
我确定我错过了一些东西,所以如果有人有任何线索的话,那就太棒了。
find了解决办法:
- “Objective-C桥接头”设置(又名
SWIFT_OBJC_BRIDGING_HEADER
)必须设置在目标级别,而不是项目级别。 一定要删除项目级别的设置值。
(对我来说,这看起来像一个Xcode错误,因为我不知道为什么修复它)。
我有同样的问题。 例如,我将所有从#import "HMSegmentedControl.h"
导入改为#import <HMSegmentedControl/HMSegmentedControl.h>
。
我们遇到了同样的错误信息,原因完全不同。
build立:
- 应用程序目标,所有Obj-C代码
- unit testing目标与一个单一的快速testing用例和一个桥头指代应用程序代码
当我们添加第二个快速testing用例时,在一个干净的(或者队友的机器上)之后,我们在构buildunit testing目标时看到了这个错误。
这是通过添加一个虚拟的Obj-C类到unit testing目标。
我不得不添加我的lib
目录在用户头searchpath:
在我的情况下, lib
目录包含.a
-library文件和一些头文件。 这些包含在桥接头文件中。 但是,swift编译器不会find它们。 只有当我将${PROJECT_DIR}/lib
到用户头部searchpath时,它才构buildtesting目标。
(我在Mavericks 10.9.5上使用Xcode 6.2)
这不知何故做了我的伎俩:
- 清洁项目
- 清理生成文件夹
- 重新启动Xcode
那么它的小奇怪,但我想你必须添加一个资源到您的testing目标的“复制捆绑资源”阶段,使其加载您的主要应用程序目标的所有标题。 在我的情况下,我添加了main.storyboard
,并照顾了错误。
我有一个问题,并花了2个小时find后修复它。 我的环境如下:
椰子树0.39.0
swift 2.x
XCode 7.3.1
脚步:
- 项目path: project_name / project_name / your_bridging_header.h
- 在构build设置的Swift部分,Objective-C桥接头应该是: project_name / your_bridging_header.h
- 在your_bridging_header.h中 ,将所有声明从.h更改为#import
- 在正在使用your_3rd_party的课堂上 。 声明导入your_3rd_party
我有同样的问题。 对我来说,原因是我的应用程序和我的今天扩展使用相同的桥接头。 我今天的扩展不包括parsing,但是因为它是在桥接头中定义的,所以它试图寻找它。 我为我的“今日扩展”创build了一个新的桥接头,错误消失了。
我的框架工作之前,突然停止工作,这些答案都没有为我工作。 我在“构build阶段”>“链接二进制库”中删除了该框架,然后重新添加它。 再次开始工作。
如果帮助任何人。
在我的情况下,我的obj-c文件被添加了一个参考文件夹(xcode中的蓝色文件夹),并且头文件找不到它们。 刚刚添加的文件,而不是文件夹,从发现者到Xcode和解决。
我刚刚复制了一个现有的scheme,并添加了另一个configuration项目。 我不得不在框架的项目中添加一个具有相同名称的configuration,以便它也构build在同一个DerivedData/($AppName)/Build/Products/($CONFIGURATION_NAME)
文件夹中。 否则.framework文件不会被创build,因此不能被导入。
当我试图在我的Swift项目中使用Objective-C中编写的pod时,我遇到了同样的问题,上面的解决scheme似乎都不起作用。
在podfile中我有use_frameworks!
书面。 评论这条线,然后再次运行pod install
解决了这个问题,我的错误消失了。
在使用CocoaImageHashing库时出现此错误。 问题是searchpath错了。 因此,在目标级别,在生成设置 – >searchpath – >标题searchpath中,path对应于非现有文件夹,例如“$ {PODS_ROOT} / Headers / Public / CocoaImageHashing”,当文件夹结构Headers / Public /不存在。 我添加了path$ {PODS_ROOT} / CocoaImageHashing,错误消失了。
如果使用cocoapods,请尝试通过运行以下命令重新安装pod。
pod install
(截至2017年5月27日更新)
Xcode 8. Swift项目 – 导入Objective C
事情要知道:
- 桥接头文件必须保存在项目的文件夹中。 (即不保存在.xcodeproj保存的同一级别,而是保存在所有快速和客观的c文件保存的文件夹下一级)。 它仍然可以在顶层find该文件,但是它不能正确链接,并且能够将Objective C文件导入桥接头文件
- 桥接头文件可以命名为任何东西,只要它是一个.h头文件
- 确保Build Settings> Swift Compiler – General> Objective C Bridging Header中的path正确指向你桥接的头文件
- 重要提示:如果仍然没有find,请尝试先清空桥接头文件,并清除当前写入的所有导入。 确保可以首先find桥接头文件,然后开始将目标c导入添加到该文件。 出于某种原因,即使find它也会反弹相同的“找不到”的错误,但它不喜欢你因为某种原因而尝试导入
- 您不应该在您的任何目标C文件中#import“MyBridgingHeaderFile.h”。 这也会导致“找不到文件”错误