Xcode 没有自动创建桥接头?

我导入了一个 Obj-C 文件到我的快速项目和 Xcode 自动提示我创建一个桥接头文件,正如预期的那样。然而,我删除了这两个文件(移动到垃圾桶)以做一些更改,但是当我再次尝试导入 Obj-C 文件时,提示符不再出现。原因是什么?我甚至在另一个项目中测试了同样的场景,似乎一旦我删除了 Xcode 自动创建的桥接头,它就不会再次提示了。为什么会这样?

135163 次浏览

看看你的项目设置-> 构建设置,向下滚动到 User-Defined部分,看看它是否有一个名为 SWIFT_OBJC_BRIDGING_HEADER的键,如果它有一个值。如果它在那里,它可能认为你已经有一个,在这种情况下,只是重新创建文件相同的名称。

  1. 桥接文件在项目中只提示一次。

  2. 如果你不小心删除了这个文件,你必须建立一个新的桥接文件。

  3. 转到 File->New File->Header File,名字应该是 YourProjectName-Bridging-Header,否则它不能被认出来。

问题的原因是,Xcode 构建设置仍然保存着自动生成的桥接头文件的路径。无法获得任何生成错误,因为项目目录中仍然存在头文件 (ProjectName-Bridging-Header.h)

如何解决:

单击您的项目目标,转到 生成设置选项卡(选择 < strong > all 而不是 < strong > basic ) ,搜索 桥头。您可以看到 Xcode 生成的路径条目。选择它,然后点击删除按钮。

另外,确保从 Xcode 项目目录中删除 Xcode 自动生成的桥接头文件 (ProjectName-Bridging-Header.h)

现在,再次尝试导入 Obj-C 文件。您可以看到按预期创建桥接头文件的提示。

enter image description here

正如上面提到/建议的,在 xcode 中创建桥接 Header 有不同的方法。在这里,我会给你最好和最简单的方式创建桥梁。

  1. Image1显示在当前时间点没有桥接。

Image1

  1. Image2显示我已经复制了一个包含 Objective-c 头文件的文件夹,复制后弹出窗口将出现在屏幕上。

Image2

  1. Image3将显示弹出消息。但在按下完成按钮后,你会发现仍然没有桥存在。参考图片2。

Image3

  1. 现在在 image 5 & 6中,我只需要拖放 Objective-c 头文件,然后你就会看到弹出消息。

Image4

  1. 按完成按钮后,你得到的消息喜欢 要配置 Objective-C 桥接头吗?。在按下 Yes 按钮后,你会看到你的桥头,你可以在图5中看到。

Image5

如果你想保持你的头在一个组,然后使用 新组别和拖放你的文件在该组。

Image6

永远不要创建任何文件夹,否则您将因此而得到错误。

文件-> 新建文件-> 头文件

将它保存为 YourApp 桥接头

然后去构建设置,找到“ Objective-C 桥接头”(正如之前的人告诉你的) ,然后传递到你的桥接头: YourApp/YourApp-Bridge-Header.h,其中“ YourApp/”是一个应用的名称。它可以包含空白,例如“ Your App/”。

在我的 xCode7.3.1中,它可以工作

  1. 开放的 xcode 项目
  2. 文件-> 新建-> 文件-> 如果你愿意的话 。迅速文件,然后点击迅速文件 H 文件点击头文件 文件目标文件等

如果要手动配置,只需转到“生成设置”,并将选项从“基本”(默认)或“自定义”更改为“所有”即可。

因为隐藏空字段是为了让普通最终用户更容易找到,所以如果您错过了添加桥接头的提示,您可能很难手动找到它。此外,搜索选项将不包括隐藏字段。

“全部更改”和“快速编译器-常规”部分应该出现在“ Objective-C 桥接头”的子设置中

在处理了这个问题大约一个小时之后。 我发现真正的问题是文件夹!

永远不要创建/复制文件夹。

为了解决这个问题

首先创建一组您喜欢的名称。 然后将 Objective-C 文件复制到组(而不是文件夹)中。

然后,您肯定会提示桥接头文件创建。

桥接文件在项目中只提示一次。

如果你不小心删除了这个文件,你必须建立一个新的桥接文件。

进入文件-> 新建文件-> 头文件,名称应该是 YourProjectName-桥接-头文件,否则无法识别。

如果你使用的是本地反应系统,最后你需要添加以下代码行:

//
//  Use this file to import your target's public headers that you would like to expose to Swift.
//
#import <React/RCTBridgeModule.h>
#import <React/RCTViewManager.h>
#import <React/RCTLog.h>


#import <Foundation/Foundation.h>
#import <React/RCTEventEmitter.h>
#import <React/RCTConvert.h>


@interface RCT_EXTERN_MODULE(core, NSObject)
@end