Xcode 6/Beta 4:使用带有框架目标的桥接头 ;不受支持
我刚刚升级到Xcode 6 Beta 4,并在Beta 2中为实时视图创建了一个框架。由于另一个swift,我需要使用一些Obj-C代码。但是,升级时,我遇到以下错误: 错误:不支持将桥接头与框架目标一起使用 我在发行说明中没有看到任何内容,也没有找到任何其他迁移路径。是否有其他人看到了这一点并找到了解决方案Xcode 6/Beta 4:使用带有框架目标的桥接头 ;不受支持,xcode,frameworks,beta,Xcode,Frameworks,Beta,我刚刚升级到Xcode 6 Beta 4,并在Beta 2中为实时视图创建了一个框架。由于另一个swift,我需要使用一些Obj-C代码。但是,升级时,我遇到以下错误: 错误:不支持将桥接头与框架目标一起使用 我在发行说明中没有看到任何内容,也没有找到任何其他迁移路径。是否有其他人看到了这一点并找到了解决方案 我意识到Beta 3消除了对实时视图框架的需求,但在我的情况下,如果我能让它工作的话,这是有意义的。虽然我可以将其作为备用方案删除,但如果在Beta 4中没有完全损坏,我更愿意使用框架。正
我意识到Beta 3消除了对实时视图框架的需求,但在我的情况下,如果我能让它工作的话,这是有意义的。虽然我可以将其作为备用方案删除,但如果在Beta 4中没有完全损坏,我更愿意使用框架。正如错误所述,框架中不允许使用桥接头。苹果文档的导入同一框架目标中的代码部分暗示了这一点。正如他们所说,您需要“在您的伞形头文件中,导入您想要向Swift公开的每个Objective-C头” 但是,我发现您可能还需要公开这些特定的标题。此答案回顾了为什么以及如何做到这一点: 因此,请这样做:
顺便说一句,目标名称是{ModuleName}.framework。有两种可能。将必要的头文件添加到伞头文件并将其公开是一种方法。但是,如果这些头文件应可供Swift使用,而不是公开,则会出现问题 第二种可能会使Swift可以使用内部标题,对此进行了详细描述。基本上,需要创建一个类似于以下内容的模块映射:
module AwesomeKitPrivate {
header "../InternalClass.h"
export *
}
然后可以使用以下设置将其包含在XCode中:
SWIFT_INCLUDE_PATHS = $(SRCROOT)/AwesomeKit/ProjectModule
在我的例子中,从我的框架的
构建设置中删除Objective-C桥接头设置有帮助
“我意识到Beta 3消除了对框架的需求”。如何?(对于实时视图)-编辑我也遇到了同样的问题。哇,你的小小编辑让我的生活变得更好了-没有听说过这种变化(消除了对框架的需求)在任何地方,我都在为实时视图的所有这些框架目标绞尽脑汁。非常感谢@chrisco!感谢您简洁的回答(标记为)。我已经阅读了该部分,但对伞形标题和桥接标题之间的区别感到困惑。@zaxy78查看“将Swift导入Objective-C”“本文档的一节:@DeepFriedTwinkie,当您说:“为您的伞式文件添加必要的标题”时,您指的是什么伞式文件?”?谢谢。这正是我所需要的。将它们添加到“公共”部分是解决办法。我是否正确地假设,在我的框架中,任何必须由swift类使用的私有类现在都必须向使用我的框架的任何人公开?这似乎不是一个理想的解决方案。太好了!谢谢。与mak相比,我更喜欢这种技术公开所有标题。强烈建议将该解决方案与其他解决方案进行对比,并查看提供的详细解决方案链接。这是正确的答案,但取决于您试图实现的目标,您可能可以使用苹果提供的一些宏,这些宏对Swift Objc互操作非常有帮助:header
语句accEPT是一个相对路径。当您想添加另一个框架的标题时,您会怎么做?我想在我的模块Swift文件中使用objc文件,但我不想将它们公开给其他模块。我如何才能这样做?
SWIFT_INCLUDE_PATHS = $(SRCROOT)/AwesomeKit/ProjectModule