iOS <unknown header '/Users/app/Desktop/WiseAppawo/WiseAppVTwo/WiseAppVTwo-Bridging-Header.h' does

来源:互联网 发布:网络猫有什么用处 编辑:程序博客网 时间:2024/06/03 18:03


我想开始我的Objective-C的项目中使用斯威夫特。
所以我加了一个迅速类:

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

注:在“建立设置 - >雨燕编译器 - 代码发生 - > Objective-C的Briding页眉”设置为MyProjectName桥接,Header.h

我应该怎么做来解决这个问题?

任何帮助深表感谢。

编辑:桥接头文件:#如果定义(__ has_​​include)&& __has_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 < 201103Ltypedef 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
分享编辑
 
1 
MyProjectName-Swift.hMyProjectName-Bridging-Header.h在相反的方向。工作MyProjectName-Swift.h时自动提供。MyProjectName-Bridging-Header.h然而,半自动提供,即你必须确保它的存在。所以,你确定,你可以看到MyProjectName-Bridging-Header.h在你的项目导航?如果没有,创建并添加一个文件使用该名称到您的项目。然后再次检查,在生成设置的路径是正确的(它应该包括项目目录:MyProjectName/MyProjectName-Bridging-Header.h -  米洛斯 9月29日在'14 9:53
 
你检查你的产品模块的名字是不是空的?(构建设置- >包装- >产品模块名称) -  尼娜 在9:56 09月29日'14
 
龚如心,是我的模块名称为“MyProjectName”而不是厄尔 -  user2408952 9月29日在'14 10:01
 
米洛斯,我想的Xcode应该自动生成该文件briding。因此,没有,我没有在我的项目文件。 -  user2408952在10:02 09月29日'14 
1 
你有没有手动指定的桥接,Header.h?我看到,有一个拼写错误“Briding” -  尼娜 9月29日在'14 10:05

8回答

活跃的最古老的
投了95下投票

如果在相同的水平的其他类创建桥接文件,则可能需要添加的相对路径,因为这些图片显示。这里注意,桥接文件是在相同的水平的其他类中创建: 在这里输入的形象描述

我在生成设置输入正确的名称, 在这里输入的形象描述

但是编译器未找到该文件。 在这里输入的形象描述

所以,如果我添加从项目的根目录的相对路径(即我加./ProjectName/BridgerFileName.h) 在这里输入的形象描述

现在它编译,我可以在我的目标C类调用一个方法: 在这里输入的形象描述

分享编辑
 
3 
对我来说,没有解决的。它看起来是的XCode没有反应到更新的Objective-C的桥接报头字段。 - 大流士Miliauskas 3月11日在'15 5:47 
投了37下投票

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

这需要设置以下值:目标> [您的应用目标]>构建设置>斯威夫特编译器-代码生成> Objective-C的桥接报头

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

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

$(SRCROOT)/$(PROJECT_NAME)/$(SWIFT_MODULE_NAME)-Bridging-Header.h
分享编辑
 
1 
$(SRCROOT)/$(PROJECT_NAME)/$(SWIFT_MODULE_NAME)-Bridging-Hea‌​der.h将更加普遍:) - gaussblurinc 4月29日在'15十五点44分
1 
这应该是唯一的答案! -  卢卡·达万佐 11月2日在'15 14:15
1 
主席先生,你是一个生命的救星! -  themobileapper 04月28日在13:41
最多投票10向下票

对于那些谁删除的桥接报头

我本来打算以相反的方式,因为大多数这里的其他答案。我一直在使用一个桥接报头前面,但我并不需要它了。之后,我从我的项目中删除它,我开始变得在问题中提到的错误。我执行以下步骤来解决我的问题。

  1. 转到目标> [您的应用目标]>构建设置>斯威夫特编译器-代码生成> Objective-C的桥接报头,并删除路径。(感谢@Donamite为理念。)
  2. 转到窗口>项 ​​目并删除导出数据文件夹。 在这里输入的形象描述
分享编辑
 
 
谢谢你,伟大的工作! -  约瑟夫·E 在23:38 06月08日
投了3下投票

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

分享编辑
 
1 
这是一个有效的答案。它不应该被下调。您可以使用$(SRCROOT)和$(PROJECT_NAME)为指导,以正确的答案到达,但你可能无法复制和粘贴每一个解决方案。 -  霍布斯给我滚 10月12日在'15 15时37分
 
在这个答案提供的解决方案实际上已经固定我的问题,谢谢SRINIVAS Padidala -  威尔逊Balderrama 2月7日在16:33
向上投1向下票

创建桥接报头手动档

首先,删除其中的Xcode创建桥接头文件。并选择您的项目转到>构建设置>搜索关键字。斯威夫特编译器 - 代码生成。点击Objective-C的桥接报头,删除该路径。现在,清理项目。

现在选择项目>窗口中的导航栏。选择项目并从那里删除您导出数据。

现在创建一个新的文件,选择来源,然后选择头文件并创建桥接头文件。文件名 ​​必须是你的项目名-桥接- Header.h,然后创建它

选择您的项目转到>构建设置>搜索关键字。斯威夫特编译器-代码生成。点击Objective-C的桥接报头,现在加入这个Objective-C的桥接报头的路径类似项目名称,桥接,Header.h

现在导入您的类放到桥的头文件,你可以很容易地编译代码。

您桥接头文件看起来是这样的,当你手动创建文件。

分享编辑
 
向上投1向下票

在斯威夫特项目添加桥文件。

步骤1.转到文件>使用Objective-C文件添加可可(对于临时用途)

在这里输入的形象描述

步骤2然后将下面的弹出会出现在这里输入的形象描述


大概的意思就是说,干掉文件的同时得干掉路径
0 0
原创粉丝点击