【问题标题】:Xcode 8 with mixed Swift and Objective-c project generated "ModuleName-Swift.h" header not found混合 Swift 和 Objective-c 项目的 Xcode 8 生成“ModuleName-Swift.h”标头未找到
【发布时间】:2017-02-01 18:39:25
【问题描述】:

我在 Xcode 8 中有一个混合了 Swift 和 Objective-C 的项目,它使用生成的“ModuleName-Swift.h”头文件将 swift 导入到 Objective-c 类中,但是预处理器无法找到生成的头文件文件并在导入时引发错误。

“词汇或预处理器问题:'ModuleName-Swift.h 文件未找到'”

项目编译得很好,但是预处理器会因为找不到标头而抛出错误,并且对于在类内调用的任何 Swift 类,没有语法高亮或代码完成。在 Objective-c 中使用 Xcode 8 无法识别但编译得很好的 Swift 类是一场斗争。

关于如何安抚 Xcode 8 中的预处理器的任何想法?

【问题讨论】:

  • 我遇到了同样的问题。我注意到在主项目文件中,生成的头文件与 Xcode 7 中的命名不同。所以我适当地更新了它并且能够编译。我还没有弄清楚如何让智能感知器正常工作。

标签: ios objective-c xcode xcode8


【解决方案1】:

我遇到了完全相同的问题。在添加一个仅针对一个目标的新文件(错误地)并注意到它在读取 Swift 类时没有问题后找到了解决方案。因此,如果您有多个目标,并且由于迁移后您不需要构建和运行它们,建议您这样做。

【讨论】:

  • 我在项目中有多个目标,似乎在构建另一个目标之后,预处理器问题就消失了。即使没有添加任何新项目而没有按照指示设置目标,也会发生这种情况,而是只需要构建两个目标以解决错误。
  • @myuiviews 是正确的,我的意思是我在添加一个只选择了一个目标的新文件后错误地找到了修复程序。而且这种情况继续发生,需要构建两个目标以在 Swift 文件更改后避免此错误。
  • 我得到了很多,我通常只是构建并且一切都很好,直到我编辑一些文件然后 Swift.h 文件上的所有导入都会返回,直到我再次构建项目。但最烦人的是新类在 OBJC 中不可见,这会减慢工作流程。
  • @MaudeBeaulac 是的,即使在添加/更新方法或参数时,它也不会反映 obj-c 的变化,直到构建另一个目标。希望它会在某个时候得到修复。
  • 拯救了我的一天! ?
【解决方案2】:

当我们有多个目标时会出现这个问题。如果新创建目标的 Swift 编译器中的 Objective-c Generated Interface Header Name 变量与原始目标的值不同。将其更改为与原始目标相同的值。请参阅以下内容:

newtargetname-Swift.h 更改为 originaltargetname-Swift.h 以获得新目标

【讨论】:

  • @mitulmarsonia 它包含在 Xcode 9 中。首先将 Install Objective-C Compatibility Header 设置为 Yes。
【解决方案3】:

为了解决这个问题 Xcode 9.2,经过长时间的研究,我知道我的“Objective-c Generated Interface Header Name”是以产品名称命名的“productname-Swift.h

【讨论】:

  • 谢谢你救了我!
  • 一个很好的简短回答 .. +1 .. 我将 swift.h 文件的所有实例更改为新的 ProductName-Swift.h .. 这里产品名称将是您的新应用程序名称。跨度>
【解决方案4】:

您需要在构建设置中添加它。

迁移到 Xcode 8 时可能会出现问题,您将在构建设置 Swift 头文件中包含 unspecified

如果来自killerz

转到 Build Settings->Objective-C Generated Interface Header Name 并将值设置为 YourModule-Swift.h(这通常已经设置,这是您需要在 .m 文件中导入的文件名 #import "YourModule-Swift.h"

【讨论】:

  • 我已验证 Objective-C 生成的接口标题名称设置为与我在 Objective-C 类中导入的文件名相同。它构建得很好,并且该文件是在派生数据中生成的,但是预处理器在尝试找到它时会出错,并为每个导入的 swift 类抛出错误。
  • 构建时没有错误日志。只有在编辑文件并且预处理器尝试查找标题并导入 Swift 类时,错误才会出现在 Xcode 中,如所述。实际构建工作没有错误。
  • @myuiviews 你能分享一下你的构建设置的截图吗?
  • 对此有任何反馈吗?我也有同样的问题
【解决方案5】:

如果

  • 您产品的正常目标运行良好,但是
  • 运行测试目标时出现错误...

请注意,每个目标使用(并且应该使用)不同的文件名作为 Objective-C 生成的接口标题名称

这意味着您无法将生成的头文件导入到您的 Objective-C .h 文件中,因为它们不会在测试目标中找到:

相反,您应该将这些 #import 语句移动到您的 Objective-C .m(实现文件)中,它们将在其中成功构建。


如果您需要在 .h 文件中引用 Swift 类,use the @class directive,例如:

//
//  ViewController.h
//  import-example
//

#import <UIKit/UIKit.h>

@class SomeSwiftClass;

@interface ViewController : UIViewController

- (NSString *) titleFromGenerator:(SomeSwiftClass *)generator;

@end

【讨论】:

  • "如果您需要在 .h 文件中引用 Swift 类,请使用 @class 指令,例如:" 这非常有帮助 - 谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-30
  • 2019-02-28
  • 1970-01-01
  • 1970-01-01
  • 2015-12-24
  • 2019-03-13
相关资源
最近更新 更多