错误:不支持使用框架目标的桥接标头
我没有在发行说明中看到任何信息,也没有找到其他迁移路径。有人遇到过这个问题并找到了解决方案吗?
我知道 Beta 3 消除了实时视图的框架需求,但如果可以让它正常工作,对我来说是有意义的。如果在 Beta 4 中它们不是完全失效的话,我可以删除它作为备选方案,但更喜欢使用框架。
正如错误所述,桥接头文件不允许在框架中使用。苹果的Mix & Match开发文档中的“从同一框架目标内导入代码”部分提到了这一点。正如他们所说,您需要“在您的总头文件中导入每个您想要暴露给 Swift 的 Objective-C header”。
然而,我发现您可能还需要将那些特定的头文件设置为公开。本答案回顾了为什么需要这样做以及如何操作:Swift 编译器错误:“非模块化的框架模块内的头文件”。
因此,请执行以下操作:
注意:“总头文件”是一个文件(通常命名为[ProductName].h),它代表了一个框架的所有公共头文件。它通常只是一个列出了包含在框架中的其他头文件的 #import 语句列表。在 Xcode 中,如果您打开 UIKit.h,则会看到一个很好的总头文件示例。
有两种可能性。将必要的头文件加入到umbrella头文件中并使它们公开是一种方法。但是,如果这些头文件应该对Swift可用,但不应该公开,则会出现问题。
第二种可能性是详细描述如何让内部头文件对Swift可用,可以在这里找到。基本上需要创建一个类似以下的模块映射:
module AwesomeKitPrivate {
header "../InternalClass.h"
export *
}
可以使用以下设置将其包含在XCode中:
SWIFT_INCLUDE_PATHS = $(SRCROOT)/AwesomeKit/ProjectModule
header
语句接受相对路径。当您想要添加另一个框架的头文件时,该怎么办? - Georgios要从相同的框架中将Objective-C代码导入Swift,请执行以下操作:
在您的伞头文件中,导入您想要向Swift公开的每个Objective-C头文件。例如:
#import "XYZ/XYZCustomCell.h" #import "XYZ/XYZCustomView.h" #import "XYZ/XYZCustomViewController.h"
在该框架的“构建阶段”中的“Headers”部分中公开包含的文件。
清理并重新构建。
Swift将查看您在伞头文件中公开的所有标头。该框架中Objective-C文件的内容将自动在该框架目标内的任何Swift文件中可用,无需任何导入语句。使用与系统类相同的Swift语法使用自定义Objective-C代码。
let myOtherCell = XYZCustomCell()
myOtherCell.subtitle = "Another custom cell"
重要提示: "伞形头文件" 指的是文件 {ModuleName}.h。顺便提一下,目标名称为 {ModuleName}.framework。