首页 文章

Swift Bridging Header导入问题

提问于
浏览
111

按照说明,我创建了一个桥接 Headers 并添加到我的项目中 . 不幸的是,发生了以下错误:

:0:错误:无法导入Objective-C Headers '--- path - to --- header / .... h'

Screenshot 1

在构建设置中,我将 Headers 搜索路径字符串添加到桥接 Headers 的位置,但没有任何帮助 .

有没有人遇到过这个问题?

19 回答

  • 0

    找到路径:

    Build Settings/Swift Compiler-Code Generation/Objective-C Bridging Header

    并删除该文件 . 那你应该没问题 .

  • 9

    这可能只会影响一小部分人,但在我的情况下,我的项目使用CocoaPods,其中一个pod有一个带有自己的CocoaPods的子规范 . 解决方案是使用全角度导入来引用子窗格中的任何文件 .

    #import <HexColors/HexColor.h>
    

    而不是

    #import "HexColor.h"
    
  • 0

    对于我删除 derived data 修复它,我注意到即使我从旧提交检出,同样的问题发生 .

    您可以从窗口 - >项目中找到该选项 .

  • 2

    对我而言,这是因为我忘了将它添加到Target的Build Settings中 .

    enter image description here

  • 65

    小心将文件添加到错误抱怨的文件夹中!我犯了同样的错误,如果你从Xcode创建文件,它将转到文件夹:Project-> Project-> Header.h

    Xcode正在寻找Project-> Header.h

    这意味着您需要将文件放在项目文件夹(ProjectName-> ProjectNameFolder)中!

    希望有所帮助;)

    更新:我不确定我是否明白你的意思,但试试这个来解决你的问题:
    1.删除到目前为止创建的所有桥接文件 .
    2.选择项目的主文件夹,然后点击新文件 - > iOS-> Header文件 .
    3.在创建的头文件中写入导入 .
    4.在Xcode-> Build Settings中选择项目,输入搜索字段:bridging并输入密钥SWIFT_OBJC_BRIDGING_HEADER头文件的名称或其路径!

    如果您按照此步骤操作,您的头文件将在正确的位置创建!

    :D希望有所帮助!

  • 3

    在我的情况下,这实际上是循环引用的错误 . 我在桥接头中导入了一个类,该类的头文件正在导入swift头( <MODULE_NAME>-Swift.h ) . 我这样做是因为在Obj-C头文件中我需要使用在Swift中声明的类,解决方案是简单地使用 @class 声明 .

    所以基本上错误说"Failed to import bridging header",上面的错误说 <MODULE_NAME>-Swift.h 文件未找到,上面是指向特定Obj-C头文件(即视图控制器)的错误 .

    检查这个文件我注意到它在头文件中声明了-Swift.h . 将此导入移动到实现解决了该问题 . 所以我需要使用一个对象,让我们在Swift中定义它 MyObject ,所以我只需更改 Headers 即可

    @class MyObject;
    
  • 2

    “我们需要告诉 Xcode 我们在 bridging header 中查找 header files 的位置 . 找到搜索路径部分,并更改 User Header Search Paths 的项目级别设置,为'Pods'目录添加一个递归条目: Pods/ ** “http://swiftalicio.us/2014/11/using-cocoapods-from-swift/

  • 142

    我也遇到过这个问题,遗憾的是它只是SDK Xcode中的一个错误 . 我和WWDC的一位工程师谈过这个以及我在使用CloudKit时遇到的其他一些问题 . 这些错误将在Xcode的下一个种子中得到解决 .

    这是使用测试版软件的有趣部分 .

  • 1

    对于其他有麻烦的人来说,将快速课程添加到objective-c项目中 . 这对我有用:

    • 创建新的swift文件 . 这将使xcode提示你是否希望xcode为mix swift-objective-c项目创建包括brigde-header.h的所有设置 . 按是 .

    • 现在,添加要在项目中使用的现有swift文件 .

    • 在实现文件中,您将使用swift类add:#import "YOURPROJECTNAME-swift.h" . 这个文件xcode为你创建 . 如果你的xcode项目是myProject那么"myProject-swift.h"

    就是这样 . 现在在代码中创建swift类,就像它是objective-c一样 .

  • 6

    我从cocoapods的bridgin头文件中导入了一些文件,而不是以正确的方式 .

    而不是导入

    #import <SomeCocoaPod/SomeCocoaPod.h>
    

    我写

    #import "SomeCocoaPod.h"
    

    这是我的巨大错误

  • 0

    将临时Objective-C文件添加到项目中 . 你可以给它任何你喜欢的名字 .

    选择“是”以配置Objective-C桥接标头 .

    删除刚刚创建的临时Objective-C文件 .

    在刚刚创建的projectName-Bridging-Header.h文件中,添加以下行:

    '#import < GoogleMaps/GoogleMaps.h >' Edit the AppDelegate.swift file:

    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
    
        GMSServices.provideAPIKey("AIza....") //iOS API key
    
        return true
    }
    

    Follow the link获取完整样本

  • 1

    对我来说,在添加框架时没有在目标路径中选择“如果需要复制项目” . 只需选择此选项即可重新添加框架 .

  • 1

    经过最初几天的努力,我终于成功地将Facebook注册功能集成到我的iOS应用程序中 . 以下是步骤(我假设您已经在您的机器中安装了Facebook SDK v4.1或更高版本):

    • 在您的项目下添加Facebook框架 - FBSDKCoreKit,FBSDKLoginKit .

    • 在Build SDK设置中不做任何更改,因为FB SDK v4.1及更高版本不再需要桥接头文件 .

    • 在ViewController.swift,AppDelegate.swift文件中导入FBSDKCorekit,FBSDKLoginKit

    • 如上所述在pList中添加信息here

    • 构建您的应用 . 哇哦!没有编译时错误 .

  • 8

    由于不同的原因,我有同样的问题, here is my case 我构建需要包含幻灯片菜单的项目,我使用SWRevealViewController lib来接近

    当我导入库文件时,我在.h && .m文件的Supporting Files下添加子文件夹(SWRevealViewController),它会触发两个错误,无法导入导入桥和找不到SWRevealViewController.h .

    How I fix it

    当我直接将文件移动到支持文件(删除子文件夹)时,SWRevealViewController.m自动添加到Build Phases - > Compile Sources并且问题消失了

    enter image description here

  • -2

    当我向我的应用添加今日扩展时,我遇到了这种错误 . 生成扩展的构建目标时使用与我的应用程序的构建目标相同的桥接头名称 . 这导致了错误,因为扩展程序没有看到我的应用程序的桥接 Headers 中列出的文件 .

    您需要做的唯一事情是删除或更改扩展名的桥接 Headers 的名称,一切都会好的 .

    希望这会有所帮助 .

  • 17

    我实际上在项目下创建了一个空的OSX源目标C文件(我的所有swift文件都在这里) .

    我添加了导入,然后删除了 .m 文件 .

  • 30

    在其他修复程序中,当我尝试执行Product-> Archive时出现错误 . 事实证明我有这个:

    Objective-C Bridging Header
      Debug (had the value)
      Release (had the value)
        Any architecture | Any SDK (this was blank - problem here!)
    

    在最后一行设置之后,它起作用了 .

  • 2

    有类似的问题,上面的任何解决方案都无法解决 . 我的项目使用CocoaPods . 我注意到,除了错误,我收到了一条警告,其中包含以下消息:

    Uncategorized: Target 'Pods' of project 'Pods' was rejected as an implicit dependency for 'Pods.framework' because its architectures 'arm64' didn't contain all required architectures 'armv7 arm64'
    

    enter image description here

    所以解决方案非常简单 . 对于Pods项目,将Build Active Architecture Only标志更改为 No 并且原始错误消失 .

  • 14

    Precompile Bridging Header 设置为 No 为我解决问题 .

相关问题