Xcode MyProjectName-Bridging-Header.h不存在

use*_*952 109 xcode objective-c ios swift

我想在Objective-C项目中开始使用Swift.所以我添加了一个快速的类:

import Foundation
@objc class System : NSObject {
    @objc func printSome() {
        println("Print line System");
    }
}
Run Code Online (Sandbox Code Playgroud)

并将其导入.m文件:

#import "MyProjectName-Swift.h"

在构建我的项目时,我收到以下错误:

Bridging header 'PathToMyProject/MyProjectName-Bridging-Header.h' does not exist
Run Code Online (Sandbox Code Playgroud)

注意:在"Build Settings-> Swift Compiler - Code Generation-> Objective-C Briding Header"下设置为MyProjectName-Bridging-Header.h

我该怎么做才能解决这个问题?

任何帮助深表感谢.

编辑:桥接头文件:#if defined(__ has_include)&& __has_include()#include #endif

#include <objc/NSObject.h>
#include <stdint.h>
#include <stddef.h>
#include <stdbool.h>

#if defined(__has_include) && __has_include(<uchar.h>)
# include <uchar.h>
#elif __cplusplus < 201103L
typedef uint_least16_t char16_t;
typedef uint_least32_t char32_t;
#endif
#if !defined(SWIFT_PASTE)
# define SWIFT_PASTE_HELPER(x, y) x##y
# define SWIFT_PASTE(x, y) SWIFT_PASTE_HELPER(x, y)
#endif
#if !defined(SWIFT_METATYPE)
# define SWIFT_METATYPE(X) Class
#endif

#if defined(__has_attribute) && __has_attribute(objc_runtime_name)
# define SWIFT_RUNTIME_NAME(X) __attribute__((objc_runtime_name(X)))
#else
# define SWIFT_RUNTIME_NAME(X)
#endif
#if !defined(SWIFT_CLASS_EXTRA)
# define SWIFT_CLASS_EXTRA
#endif
#if !defined(SWIFT_PROTOCOL_EXTRA)
# define SWIFT_PROTOCOL_EXTRA
#endif
#if !defined(SWIFT_CLASS)
# if defined(__has_attribute) && __has_attribute(objc_subclassing_restricted) 
#  define SWIFT_CLASS(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) __attribute__((objc_subclassing_restricted)) SWIFT_CLASS_EXTRA
# else
#  define SWIFT_CLASS(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA
# endif
#endif

#if !defined(SWIFT_PROTOCOL)
# define SWIFT_PROTOCOL(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) SWIFT_PROTOCOL_EXTRA
#endif

#if !defined(SWIFT_EXTENSION)
# define SWIFT_EXTENSION(M) SWIFT_PASTE(M##_Swift_, __LINE__)
#endif

#if !defined(OBJC_DESIGNATED_INITIALIZER)
# if defined(__has_attribute) && __has_attribute(objc_designated_initializer)
#  define OBJC_DESIGNATED_INITIALIZER __attribute__((objc_designated_initializer))
# else
#  define OBJC_DESIGNATED_INITIALIZER
# endif
#endif
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wproperty-attribute-mismatch"

#if defined(__has_feature) && __has_feature(modules)
#endif

#pragma clang diagnostic pop
Run Code Online (Sandbox Code Playgroud)

Jam*_*mey 182

如果桥接文件与其他类创建的级别相同,则可能需要添加相对路径,如这些图片所示.请注意,桥接文件创建的级别与其他类相同: 在此输入图像描述

我在Build Settings中正确输入了名称, 在此输入图像描述

但编译器找不到该文件. 在此输入图像描述

因此,如果我从项目的根目录添加相对路径(即我添加./ProjectName/BridgerFileName.h), 在此输入图像描述

现在它编译,我可以在Objective C类中调用一个方法: 在此输入图像描述

  • 对我来说它根本没有解决.看起来XCode没有对更新的Objective-C Bridging Header字段做出反应. (4认同)

Don*_*ghn 71

我发现在手动创建桥接头文件并选择默认名称和位置后,桥接头将放在项目目录中,该目录位于根目录下.

这需要以下设置值:Targets> [Your App Target]> Build Settings> Swift Compiler - Code Generation> Objective-C Bridging Header:

$(SRCROOT)/$(PROJECT_NAME)/$(PROJECT_NAME)-Bridging-Header.h 
Run Code Online (Sandbox Code Playgroud)

请注意,如果您的项目是一个快速模块(框架),那么,如评论中所指出的,您可能更喜欢:

$(SRCROOT)/$(PROJECT_NAME)/$(SWIFT_MODULE_NAME)-Bridging-Header.h
Run Code Online (Sandbox Code Playgroud)

  • `$(SRCROOT)/ $(PROJECT_NAME)/ $(SWIFT_MODULE_NAME)-Bridging-Header.h`会更常见:) (2认同)

Sur*_*gch 44

对于那些正在删除桥接标头的人

我和其他大多数答案都是相反的.我以前一直在使用桥接头,但我不再需要它了.我从项目中删除它后,我开始收到问题中提到的错误.我执行了以下步骤来解决我的问题.

  1. 转到目标> [您的应用程序目标]>构建设置> Swift编译器 - 常规> Objective-C桥接标题并删除路径.(感谢@Donamite的想法.)(你可以在搜索框中输入"桥接"来找到它.)
  2. 删除派生日期.转到Xcode>首选项>位置,然后单击Derived Data文件夹中的灰色箭头.然后删除您的项目文件夹.

在此输入图像描述


iOS*_*iOS 18

Swift 4.1中

您的项目没有bridging-Header.h文件,但您的项目有该路径.为此,您需要删除该路径...

转到目标文件并选择Build Settings,----> Swift Compiler - General,然后删除bridging-Header.h.按照以下屏幕截图....在此输入图像描述

删除Swift Compiler - General中的bridging-Header.h文件

在此输入图像描述

现在你有这样的......

在此输入图像描述


Man*_*ngh 13

在Swift项目中添加Bridge文件.

步骤1.转到文件>使用Objective-C文件添加Cocoa(用于临时目的)

在此输入图像描述

步骤2.然后将出现以下弹出窗口在此输入图像描述

现在按Create Bridging Header Button

DONE
你会得到多桥文件捆绑
THANKS


小智 12

对我来说,它有助于在我的桥接头文件路径前使用$(SRCROOT)/ $(PROJECT_NAME)/


Vis*_*han 12

这些是创建Bridging标头的步骤.

  1. 文件 - >新建 - > iOS->头文件,将桥接文件名称设置为"yourProjectName-Bridging-Header.h"

  2. Build-Settings-> Objective-C Bridging Header,只需将桥接头文件名称设置为"ProjectName-Bridging-Header.h"

    注意:桥接头文件应位于".xcodeproj"文件所在项目的主根文件夹中.如果没有将Bridging头文件移动到项目的根文件夹.这样Xcode就能够访问桥文件.

  3. 构建项目,并在Bridging标头中导入必要的文件.


Ant*_*ine 6

对我来说,它有助于$(SRCROOT)在我的Objective-C桥接标题路径前使用.

$(SRCROOT)/swiftLibraries/swiftLibraries-Bridging-Header.h
Run Code Online (Sandbox Code Playgroud)


iHa*_*edi 5

请按照以下步骤操作:

  1. 删除桥接头文件...(也许你手动创建)和;
  2. 在Objective-C Project中创建新的Swift文件...(不导入,先创建它)

也许这两件事有助于解决您的问题.


A.G*_*A.G 5

以下对我有用:

  1. 桥接头文件应位于".xcodeproj"文件所在项目的主根文件夹中.移动到项目目录,并将桥接标题拖放到root,如果它在任何其他文件夹中.
  2. 更正标题名称中的拼写错误.
  3. 清除派生数据
  4. 目标 - >构建设置 - > Swift编译器:常规 - >添加Obj C头名称.
  5. 清洁并再次运行.