Xcode没有自动创建桥接头文件?

85

我将一个Obj-C文件导入了我的Swift项目中,Xcode自动提示我创建桥接头文件,这是预期的。然而,我删除了这两个文件(移到回收站)以做一些更改,但是当我尝试再次导入Obj-C文件时,该提示不再出现。原因是什么?我甚至在另一个项目中测试了相同的情况,似乎一旦我删除了Xcode自动创建的桥接头文件,它就不会再次弹出提示了。为什么会这样呢?

9个回答

181
您遇到的问题原因是,Xcode构建设置仍然保存了自动生成桥接标头文件的路径。由于标头文件 (ProjectName-Bridging-Header.h) 仍存在于项目目录中,因此不会出现任何构建错误。 解决方法: 点击项目目标,转到构建设置选项卡(选择全部而不是基本),搜索桥接标头。您可以看到Xcode生成的路径输入。选择它,然后单击删除按钮。
此外,请确保从Xcode项目目录中删除Xcode自动生成的桥接标头文件(ProjectName-Bridging-Header.h)
现在,再次尝试导入Obj-C文件。如预期地,您会看到创建桥接标头文件的提示。

enter image description here


26
我正试图将Obj-C文件添加到项目中,但从未看到过桥接头提示。在构建设置中也没有"桥接"选项:/ - apinho
1
如果找不到Objective-c Bridging Header,请访问以下链接:https://stackoverflow.com/questions/38071929/objective-c-bridging-header-section-not-found - Basha K

51

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

将其保存为 YourApp-Bridging-Header

然后进入 Build Settings,在“Objective-C Bridging Header”中找到之前的人告诉你的,将路径设置为你的桥接头文件: YourApp/YourApp-Bridging-Header.h 其中 'YourApp/' 是应用程序的名称。它可以包含空格,例如 'Your App/'。

在我的情况下,在xCode 7.3.1中它可以工作


25
$(SRCROOT)/$(PROJECT_NAME)/$(SWIFT_MODULE_NAME)-Bridging-Header.h 复制粘贴“Objective-C Bridging Header”。 - miragessee
Aman Deep,欢迎您! - Iulian Nikolaiev

11

在Xcode中创建桥接头文件的方法有多种,如上所述/建议。这里我将为您提供创建桥接的最佳和最简单的方法。

  1. Image1显示当前没有桥接存在。

Image1

  1. Image2显示我复制了一个包含Objective-C头文件的文件夹,在复制后,屏幕上会弹出一个弹窗。

Image2

  1. Image3将显示弹出消息。但是按下完成按钮后,您会注意到仍然没有桥接存在。有关参考,请参见图像2。

Image3

  1. 现在在Image5&6中,我只需拖放Objective-C头文件,之后您将收到弹出消息。

Image4

  1. 按下完成按钮后,您会收到消息Would you like to configure an Objective-C bridging header?。按下Yes按钮后,您将获得桥接头文件,您可以在Image5中看到它。

Image5

如果您想将标题保留在同一组中,请使用新建组并将文件拖放到该组中。

Image6

不要创建任何文件夹,否则会因此出现错误。


6
请查看项目设置 -> 构建设置,在下拉到 User-Defined 部分,查看是否存在一个名为 SWIFT_OBJC_BRIDGING_HEADER 的键以及其是否有值。如果有,则可能认为您已经有一个文件了,在这种情况下,只需重新创建具有相同名称的文件即可。

不,没有那个名称的值。唯一的键是 MTL_ENABLE_DEBUG_INFO - John Durand
忘了提醒,你是否点击了左上角的应用程序目标而不是项目?应该有一个下拉菜单,其中有一个名为“项目”然后是“目标”的部分,如果您还没有,请点击您的目标。 - Fonix
也许只需在顶部点击“+”并添加一个新条目,其中键为APPNAME-Bridging-Header.h,然后在您的项目中创建该文件,希望可以使用它。 - Fonix
Ramshad的答案可能更准确,我刚意识到我用作示例的项目是错误的,它是一个导入Swift的obj-c项目,所以密钥可能不正确。 - Fonix

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

  2. 如果你不小心删除了该文件,则必须构建新的桥接文件。这是相同的。

  3. 转到 文件->新建文件->头文件,文件名应为 YourProjectName-Bridging-Header,否则无法识别。


1

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

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

为了解决这个问题 -

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

然后,您肯定会提示创建Bridging Header文件。


0

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

如果您不小心删除了该文件,则必须构建一个新的桥接文件。这是相同的。

转到“文件”->“新建文件”->“头文件”,名称应为YourProjectName-Bridging-Header,否则无法识别。

如果您正在使用React Native,最后需要添加这些行:

//
//  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

0
如果您想手动配置它,只需转到“构建设置”,并从“基本(默认)”或自定义中更改选择为“全部”。
由于空字段被隐藏以使事情更容易适用于普通终端用户,如果您错过了添加桥接标头的提示,则可能难以手动找到它。此外,搜索选项将不包括隐藏字段。
切换到“全部”,然后“Swift编译器 - 常规”部分应该出现,并带有“Objective-C Bridging Header”的子设置。

-4
  1. 打开Xcode项目
  2. 文件 -> 新建 -> 文件 -> 如果你想要 .swift文件,那么点击Swift文件 .h文件点击头文件 .m文件目标C文件等等

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接