ios – 在xcode8中找不到ModuleName-Swift.h文件
我正在努力研究一个混合的Swift和ObjectiveC项目而没有运气。
我的项目由6个目标组成: > App 我已经能够添加一个具有一个目标成员资格(App)的Swift类,并使用从App-Bridging-Header.h传递的ObjectiveC代码 相反,我正在努力使用“Swift into ObjectiveC code”范例。 到目前为止我一直在做的是: >将新的Swift文件添加到Core项目,指定四个成员资格(App,Core,Summary,WatchKit Ext) 我已经关注了Mix and Match guide of Apple和许多SO线程,包括this one似乎显然是为了解决我的同样问题,但它不起作用。 也见过this和this但没有奏效。 还尝试过删除派生数据以及多次清理整个项目而没有运气。 编辑1:更多细节 这是我的Swift类的声明 @objc class MyClass: Object {} 这是在ObjectiveC中使用Swift类的片段 MyClass *app = [[MyClass alloc] init]; 如果我避免使用#import …- Swift.h,则构建失败,说我正在使用未声明的标识符“MyClass”,这听起来很合理。 如果我使用#import …- Swift.h文件,它说模块X找不到模块Y,依此类推。 编辑2:Swift模块名称 通过查看每个目标的SWIFT_OBJC_INTERFACE_HEADER_NAME属性,我看到它是使用这种语法构建的$(SWIFT_MODULE_NAME)-Swift.h我是否需要将SWIFT_MODULE_NAME更改为MODULE_NAME? 编辑3:进口 这是.m ObjectiveC文件中Swift头的导入集。 #import "ProjectName_App-Swift.h" #import "ProjectName_Core-Swift.h" #import "ProjectName_Summary-Swift.h" #import "ProjectName_WatchKit_Extension-Swift.h" 编辑4:-Swift.h文件的交叉可见性 我尝试过以下方法: >仅在目标应用程序中添加了Swift类 当为多个目标定义Swift类并且这些多个目标使用ObjectiveC文件时,它不起作用。构建错误是这样的:目标X – >找不到“ProjectName_TargetY-Swift.h”文件。 我究竟做错了什么? 解决方法
我在编辑4中做出的假设证明是正确的。
如果项目有多个目标,则无法在一个.m ObjectiveC文件中导入“-Swift.h”文件。 因此,必须采用一种解决方案,即更改SWIFT_OBJC_INTERFACE_HEADER_NAME构建设置并使其在不同目标中保持相同。
按Alt键进入产品菜单后执行此清理构建文件夹。由于标题的名称现在在目标之间共享,因此可以在.m ObjectiveC文件中导入一次,并且所有目标都可以从Swift类中受益。 如果在构建之后仍然显示错误,请确保通过Cmd单击其名称可以从XCode到达标头。它应该打开一个包含类似于此代码的文件: SWIFT_CLASS("_TtC27ProjectName_Summary11MyClass") @interface MyClass : NSObject - (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER; @end 如果需要确保生成这些标头,请打开终端并使用此命令 find ~/Library/Developer/Xcode/DerivedData -name "*Swift.h" 您应该看到每个目标的一个标题 在这些更改之后发生在我身上的另一个问题是它开始在我没有触及的ObjectiveC代码上给出错误。问题是由于进口的位置,如here所述:
在最后,代码编译并在设备和模拟器上运行! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |