Xcode MyProjectName-Bridging-Header.h不存在

时间:2014-09-29 09:16:45

标签: ios objective-c xcode swift

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

import Foundation
@objc class System : NSObject {
    @objc func printSome() {
        println("Print line System");
    }
}

并将其导入.m文件:

#import "MyProjectName-Swift.h"

构建项目时出现以下错误:

Bridging header 'PathToMyProject/MyProjectName-Bridging-Header.h' does not exist

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

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

非常感谢任何帮助。

编辑:Bridging-Header文件:     #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

12 个答案:

答案 0 :(得分:175)

如果桥接文件创建的级别与其他类相同,则可能需要添加相对路径,如这些图片所示。请注意,桥接文件创建的级别与其他类相同: enter image description here

我在Build Settings中正确输入了名称, enter image description here

但编译器找不到该文件。 enter image description here

因此,如果我从项目的根目录添加相对路径(即我添加./ProjectName/BridgerFileName.h), enter image description here

现在它编译,我可以在Objective C类中调用一个方法: enter image description here

答案 1 :(得分:67)

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

这需要以下设置值:目标&gt; [您的应用目标]&gt;构建设置&gt; Swift编译器 - 代码生成&gt; Objective-C桥接标题

$(SRCROOT)/$(PROJECT_NAME)/$(PROJECT_NAME)-Bridging-Header.h 

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

$(SRCROOT)/$(PROJECT_NAME)/$(SWIFT_MODULE_NAME)-Bridging-Header.h

答案 2 :(得分:43)

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

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

  1. 转到目标&gt; [您的应用目标]&gt;构建设置&gt; Swift编译器 - 一般&gt; Objective-C桥接标题并删除路径。 (感谢@Donamite的想法。)(您可以在搜索框中输入“桥接”来查找它。)
  2. 删除派生日期。转到 Xcode&gt;偏好&gt;位置,然后单击“衍生数据”文件夹中的灰色箭头。然后删除项目文件夹。
  3. enter image description here

答案 3 :(得分:15)

Swift 4.1

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

转到targets文件并选择Build Settings,----&gt; Swift Compiler - General,然后删除bridging-Header.h。按照以下屏幕截图.... enter image description here

删除Swift编译器中的bridging-Header.h文件 - 常规

enter image description here

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

enter image description here

答案 4 :(得分:13)

在Swift项目中添加Bridge文件。

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

enter image description here

步骤2.然后会出现以下弹出式enter image description here

现在按Create Bridging Header Button

完成
 你将获得BIGLE中的BRIGDE文件
<强>感谢

答案 5 :(得分:12)

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

答案 6 :(得分:12)

这些是创建桥接标题的步骤。

  1. 文件 - &gt;新建 - &gt; iOS-&gt;标题文件,将桥接文件名称设置为“yourProjectName-Bridging-Header.h”

  2. 构建设置 - &gt; Objective-C桥接标题,只需将桥接头文件名称设为“ProjectName-Bridging-Header.h”

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

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

答案 7 :(得分:6)

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

$(SRCROOT)/swiftLibraries/swiftLibraries-Bridging-Header.h

答案 8 :(得分:5)

请按照以下步骤操作:

  1. 删除桥接头文件。 。 。 (也许你手动创建)和;
  2. 在Objective-C Project中创建新的Swift文件。 。 。 (不导入,先创建它)
  3. 也许这两件事有助于解决您的问题。

答案 9 :(得分:5)

以下对我有用:

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

答案 10 :(得分:2)

手动创建桥接头文件

首先删除创建Xcode的Bridging头文件。并选择您的项目转到&gt;构建设置&gt;搜索关键字。 Swift编译器 - 代码生成。单击Objective-C Bridging Header,删除该路径。现在清理你的项目。

现在选择你的项目&gt;导航栏中的窗口。选择项目并从那里删除派生数据。

Now create a new file , select the Source and then select the Header File and create your Bridging header file . File name must be your projectname-Bridging-Header.h and then create it

选择您的项目转到&gt;构建设置&gt;搜索关键字。 Swift编译器 - 代码生成。单击Objective-C Bridging Header,现在在Objective-C Bridging Header中添加路径,如 projectname-Bridging-Header.h

现在将您的类导入到桥接头文件中,您可以轻松地将其编译为代码。

Your bridging header file looks like this when you are creating your file manually.

答案 11 :(得分:1)

帮助我的是手动将文件移动到错误消息中提到的路径。所以:

  1. 我删除了文件(已移至垃圾箱)
  2. 将其从废纸to移动到错误消息中的路径
  3. 后来我也不得不清理项目