带有混合Swift和Objective-c项目的Xcode 8没有find“ModuleName-Swift.h”头文件

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

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

在这里输入图像说明

该项目编译得很好,但预处理器抛出错误的头没有被发现和任何Swift类在类中调用没有语法突出显示或代码完成。 这是一个在Objective-C中使用Xcode 8无法识别Swift类的工作,但是编译得很好。

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

我有完全相同的问题。 添加一个新的文件后,find只有一个目标(错误),并注意到它没有问题,阅读Swift类的解决scheme。 所以,如果你有多个目标 ,而且从迁移开始你就不需要build立和运行它们了,build议你这样做。

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

newtargetname-Swift.h更改为newtargetname -Swift.h新的目标

在这里输入图像说明

你需要在你的构build设置中添加这个。

在迁移到Xcode 8时,可能会有一个问题,在构build设置Swift头文件中,您将没有unspecified

这个如果来自killerz

转到生成设置 – > Objective-C生成的接口标题名称,并将值设置为YourModule-Swift.h(这通常已经设置,这是您需要导入.m文件#import“YourModule-Swift.h “

如果

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

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

这意味着你不能在你的Objective-C .h文件中导入生成的头文件,因为它们不会在testing目标中find:

使用.h文件时导入错误的屏幕截图

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


如果您需要在.h文件中引用Swift类,请使用@class指令 ,例如:

 // // ViewController.h // import-example // #import <UIKit/UIKit.h> @class SomeSwiftClass; @interface ViewController : UIViewController - (NSString *) titleFromGenerator:(SomeSwiftClass *)generator; @end