首页 文章

将Objective-C框架导入Swift项目时,在Bridging Header中获取“找不到文件”

提问于
浏览
78

我有一个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 回答

  • 2

    我刚刚复制了现有的方案,并为项目添加了另一个配置 . 我不得不为框架的项目添加一个具有相同名称的配置,以便它也可以构建在相同的 DerivedData/($AppName)/Build/Products/($CONFIGURATION_NAME) 文件夹中 . 否则,不会导入.framework文件 .

  • 4

    我有同样的问题 . 例如,我将所有导入从 #import "HMSegmentedControl.h" 更改为 #import <HMSegmentedControl/HMSegmentedControl.h> .

  • 1

    今天我尝试在我的Swift项目中使用Objective-C编写的pod时遇到了同样的问题,上述解决方案似乎都没有用 .

    在podfile中我写了 use_frameworks! . 评论这一行,然后再次运行 pod install 解决了这个问题,错误就消失了 .

  • 0

    我有一个问题,花了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

  • 1

    在我的情况下,我只是不得不退出模拟器......

  • 4

    我有一个与pods类似的问题 . 基本上尝试运行我的UI测试,Xcode抱怨丢失的pod . 对此的解决方案比上述任何解决方案简单得多:

    • 转到项目文件(主要不是目标)

    • 点击"Info"标签(最左边)

    • 为UI测试目标设置了正确的pod配置("Configurations"在"Deployment Target"下面的部分)

    工作!

    我发现它在一个帖子中:https://github.com/CocoaPods/CocoaPods/issues/2695

    听起来有点像可可 beans 荚的虫子,但我可以看到为什么它可能是棘手的情况 .

  • 18

    使用Cocoapods安装库CocoaImageHashing时出现此错误 . 问题是搜索路径错误 . 所以在Target级别,在Build Settings - > Search Paths - > Header Search Paths中,路径对应于非现有文件夹,例如“$ / Headers / Public / CocoaImageHashing”,当文件夹结构Headers / Public时/不存在 . 我添加了路径$ / CocoaImageHashing,错误消失了 .

  • 67

    这在某种程度上对我有用:

    • 清洁项目

    • 清理构建文件夹

    • 重启Xcode

  • 22

    我们遇到了相同的错误消息,原因完全不同 .

    Build :

    • App目标,所有Obj-C代码

    • 单元测试目标,带有一个swift测试用例和一个引用应用程序代码的桥接头

    当我们添加第二个快速测试用例时,在干净(或在队友的机器上)之后,我们在构建单元测试目标时看到了这个错误 .

    通过向单元测试目标添加虚拟Obj-C类来修复它 .

  • -1

    如果使用cocoapods,请尝试通过运行以下命令重新安装pod .

    pod install
    
  • 2

    找到了解决方案:

    • "Objective-C Bridging Header"设置(又名 SWIFT_OBJC_BRIDGING_HEADER )必须设置为目标级别,而不是项目级别 . 务必删除项目级别的设置值 .

    (对我来说,它似乎是一个Xcode错误,因为我不知道它为什么修复它) .

  • 52

    我的框架之前正在工作,突然停止工作,这些答案都没有对我有用 . 我删除了Build Phases> Link Binary With Libraries中的框架,并重新添加了它 . 再次开始工作 .

  • 0

    (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"错误

  • 1

    我不得不加我的 lib 用户 Headers 搜索路径中的目录:

    test target settings - user header search path

    在我的例子中, lib 目录包含 .a -library文件和一些头文件 . 这些包含在桥接头文件中 . 但是,swift编译器无法找到它们 . 只有当我将 ${PROJECT_DIR}/lib 添加到用户 Headers 搜索路径时,它才构建了测试目标 .

    (我在Mavericks 10.9.5上使用Xcode 6.2)

  • 1

    如果帮助任何人 .

    在我的情况下,我添加的obj-c文件有一个参考文件夹(xcode中的蓝色文件夹), Headers 找不到它们 . 刚刚将文件,而不是文件夹,从finder添加到xcode并解决了 .

  • 0

    我有类似的问题,只有一个解决方案适合我 . 我尝试了所有建议,我知道我设置我的桥接 Headers 很好,因为我有一些其他的lib工作 .

    当我将库(拖放)复制到项目中时,没有Cocoapods,只有在那之后我才能导入 Headers 而没有错误 .

    我用了facebook / Shimmer库 .

  • 3

    好吧有点奇怪,但我想你必须在你的测试目标的"Copy Bundle Resources"阶段添加一个资源,使其加载你的主应用程序目标的所有 Headers . 就我而言,我添加了 main.storyboard 并且它处理了错误 .

    enter image description here

  • 5

    我有同样的问题 . 对我来说,原因是我在我的应用程序和今天的扩展程序中使用相同的桥接 Headers . My Today Extension不包括Parse,但因为它是在桥接头中定义的,所以它试图寻找它 . 我为今天的扩展创建了一个新的桥接 Headers ,错误消失了 .

相关问题