Xcode 6 / Beta 4:使用桥接头与框架目标不受支持

我刚刚升级到Xcode 6 Beta 4,并为Beta 2中的实时视图创build了一个框架。由于另一个快捷方式,我需要使用一些Obj-C代码。 当升级虽然,我得到以下错误:

错误:使用桥接头与框架目标不受支持

我在发行说明中没有看到任何内容,或者发现任何其他迁移path。 有没有其他人看到这个,并得出解决scheme?

我意识到Beta 3消除了对实时视图框架的需求,但是如果我能够实现它,对我而言是有意义的。 我可以删除它作为后备,但是如果它们在Beta 4中没有完全被破坏的话,会更喜欢使用框架。

由于错误状态,Frameworks中不允许使用桥接头。 Mix&Match苹果文档的“相同框架目标”部分中的导入代码提示此处。 正如他们所说,你需要“在你的伞头文件中,导入你想暴露给Swift的每一个Objective-C头文件”。

但是,我发现你也可能需要公开这些特定的头文件。 这个答案回顾了为什么和如何做到这一点: Swift编译器错误:“框架模块内的非模块化头” 。

所以,这样做:

  1. 删除您的桥接头文件。
  2. 在框架的构build设置中删除对桥接头文件的引用
  3. 将必要的标题添加到伞形文件([ProductName] .h)
  4. 在框架的“构build阶段”的“标题”部分中公开包含的文件。
  5. 清洁和重build。

注意 :“伞头文件”是一个文件(名为[ProductName] .h),通常代表框架的所有公共头文件。 它通常只是包含在框架中的其他头文件的#import语句列表。 在Xcode中,如果你打开UIKit.h,你会看到一个伞形文件的好例子。

请参阅将Objective-C导入Swift 。

从相同的框架中将Objective-C代码导入到Swift中

  1. 在“构build设置”下的“打包”中,确保将该框架目标的“定义模块”设置设置为“是”。
  2. 在你的伞头文件中,导入你想暴露给Swift的每个Objective-C头文件。 例如:

         #import“XYZ / XYZCustomCell.h”
         #import“XYZ / XYZCustomView.h”
         #import“XYZ / XYZCustomViewController.h”
    
  3. 在框架的“构build阶段”的“标题”部分中公开包含的文件。

  4. 清洁和重build。

Swift会在你的伞头看到你公开暴露的每一个头文件。 该框架中的Objective-C文件的内容将自动在该框架目标中的任何Swift文件中提供,而不需要任何导入语句。 使用您的自定义Objective-C代码,使用与系统类相同的Swift语法。

let myOtherCell = XYZCustomCell() myOtherCell.subtitle = "Another custom cell" 

重要说明:“伞头文件”是指文件{ModuleName} .h。 顺便说一下,目标名称是{ModuleName} .framework。