Xcode MyProjectName-Bridging-Header.h不存在
我想在我的Objective-C项目中开始使用Swift。 所以我添加了一个快速的类:
import Foundation @objc class System : NSObject { @objc func printSome() { println("Print line System"); } }
并将其导入到.m文件中:
#import "MyProjectName-Swift.h"
当build立我的项目时,我得到以下错误:
Bridging header 'PathToMyProject/MyProjectName-Bridging-Header.h' does not exist
注意:在“生成设置 – > Swift编译器 – 代码生成 – > Objective-C Briding Header”设置为MyProjectName-Bridging-Header.h
我该怎么办才能解决这个问题?
任何帮助深表感谢。
编辑:桥接头文件:#如果已定义(__ 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
如果桥接文件是在与其他类相同的级别创build的,则可能需要添加相对path,如这些图片所示。 请注意,桥接文件是在与其他类相同的级别创build的:
我在Build Settings中input了正确的名字,
但编译器没有find该文件。
因此,如果我从项目的根目录添加相对path(也就是添加./ProjectName/BridgerFileName.h
),
现在编译,我可以在我的Objective C类中调用一个方法:
我发现在手动创build桥接头文件并select默认名称和位置之后,桥接头将被放置在根目录下的项目目录中。
这需要设置以下值: 目标> [您的应用程序目标]>构build设置> Swift编译器 – 代码生成> Objective-C桥接头 :
$(SRCROOT)/$(PROJECT_NAME)/$(PROJECT_NAME)-Bridging-Header.h
请注意,如果你的项目是一个快速模块(框架),那么,正如评论中指出的,你可能更喜欢:
$(SRCROOT)/$(PROJECT_NAME)/$(SWIFT_MODULE_NAME)-Bridging-Header.h
对于那些正在删除桥接头
我和其他大部分的答案都是相反的。 以前我一直在使用Bridging Header,但是我不再需要它了。 从我的项目中删除后,我开始得到问题中提到的错误。 我执行了以下步骤来解决我的问题。
- 转到目标> [您的应用程序目标]>构build设置> Swift编译器 – 常规> Objective-C桥接头并删除path。 (感谢@Donamite的想法。)
- 删除派生date。 转到Xcode>首选项>位置 ,然后单击派生数据文件夹中的灰色箭头。 然后删除你的项目文件夹。
在Swift项目中添加桥文件。
步骤1.转到文件>用Objective-C文件添加Cocoa(用于临时目的)
第二步,然后出现以下popup窗口
现在按下创build桥接标题button
DONE
你会得到BRIGDE文件的捆绑
谢谢
对我来说,它有助于在我的桥接头文件path前使用$(SRCROOT)/ $(PROJECT_NAME)/
这些是我们必须通过创build桥接标题来遵循的步骤。
-
文件 – >新build – > iOS->头文件 ,给桥接文件的名称就像“yourProjectName-Bridging-Header.h”
-
build立 – 设置 – > Objective-C桥接头 ,只需给桥接头文件名称如“ProjectName-Bridging-Header.h”
注意:桥接头文件应位于“.xcodeproj”文件所在项目的主根文件夹中。 如果不将桥接头文件移动到项目的根文件夹。 这样Xcode就可以访问桥文件。
-
生成项目,并在桥接头中导入必要的文件。
按照以下步骤操作:
- 删除桥接头文件。 。 。 (也许你手动创build)和;
- 在Objective-C项目中创build新的Swift文件。 。 。 (不导入,首先创build它)
也许这两件事情将有助于解决您的问题。
对我来说,它有助于在我的Objective-C桥接头path前使用$(SRCROOT)
。
$(SRCROOT)/swiftLibraries/swiftLibraries-Bridging-Header.h
以下为我工作:
- 桥接头文件应位于“.xcodeproj”文件所在项目的主根文件夹中。 移动到项目目录,并将桥接头拖放到根目录,如果它在任何其他文件夹内。
- 纠正标题名称中的拼写错误。
- 清除派生数据
- 目标 – >生成设置 – > Swift编译器:常规 – >添加对象C头名称。
- 清理并再次运行。
手动创build桥接头文件
首先删除Xcode创build的桥接头文件。 并select您的项目转到>构build设置>search关键字。 Swift编译器 – 代码生成。 点击Objective-C桥接头,删除该path。 现在清理你的项目。
现在在导航栏中select您的项目>窗口。 select项目并从那里删除您的派生数据。
现在创build一个新文件,selectSource ,然后selectHeader File并创buildBridging头文件。 文件名必须是你的projectname-Bridging-Header.h然后创build它
select您的项目转到>构build设置>search关键字。 Swift编译器 – 代码生成。 单击Objective-C桥接头,现在添加此Objective-C桥接头中的path,如projectname-Bridging-Header.h
现在将你的类导入桥接头文件,你可以很容易地编译你的代码。
当您手动创build文件时,桥接头文件看起来像这样。