Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xcode 6/Beta 4:使用带有框架目标的桥接头 ;不受支持_Xcode_Frameworks_Beta - Fatal编程技术网

Xcode 6/Beta 4:使用带有框架目标的桥接头 ;不受支持

Xcode 6/Beta 4:使用带有框架目标的桥接头 ;不受支持,xcode,frameworks,beta,Xcode,Frameworks,Beta,我刚刚升级到Xcode 6 Beta 4,并在Beta 2中为实时视图创建了一个框架。由于另一个swift,我需要使用一些Obj-C代码。但是,升级时,我遇到以下错误: 错误:不支持将桥接头与框架目标一起使用 我在发行说明中没有看到任何内容,也没有找到任何其他迁移路径。是否有其他人看到了这一点并找到了解决方案 我意识到Beta 3消除了对实时视图框架的需求,但在我的情况下,如果我能让它工作的话,这是有意义的。虽然我可以将其作为备用方案删除,但如果在Beta 4中没有完全损坏,我更愿意使用框架。正

我刚刚升级到Xcode 6 Beta 4,并在Beta 2中为实时视图创建了一个框架。由于另一个swift,我需要使用一些Obj-C代码。但是,升级时,我遇到以下错误:

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

我在发行说明中没有看到任何内容,也没有找到任何其他迁移路径。是否有其他人看到了这一点并找到了解决方案


我意识到Beta 3消除了对实时视图框架的需求,但在我的情况下,如果我能让它工作的话,这是有意义的。虽然我可以将其作为备用方案删除,但如果在Beta 4中没有完全损坏,我更愿意使用框架。

正如错误所述,框架中不允许使用桥接头。苹果文档的导入同一框架目标中的代码部分暗示了这一点。正如他们所说,您需要“在您的伞形头文件中,导入您想要向Swift公开的每个Objective-C头”

但是,我发现您可能还需要公开这些特定的标题。此答案回顾了为什么以及如何做到这一点:

因此,请这样做:

  • 删除桥接头文件
  • 在框架的生成设置中删除对桥接头文件的引用
  • 向伞形文件([ProductName].h)添加必要的标题
  • 在框架的“构建阶段”的“标题”部分公开包含的文件
  • 清理和重建
  • 注意:“伞形头文件”是一个文件(名为[ProductName].h),通常表示框架的所有公共头。它通常只是框架中包含的其他头的#import语句列表。在Xcode中,如果打开UIKit.h,您将看到一个很好的伞形文件示例。

    请参阅

    将Objective-C代码从同一框架导入Swift

  • 在“生成设置”下的“打包”中,确保该框架目标的“定义模块”设置设置设置为“是”
  • 在伞形头文件中,导入要向Swift公开的每个Objective-C头。例如:

    #import "XYZ/XYZCustomCell.h" #import "XYZ/XYZCustomView.h" #import "XYZ/XYZCustomViewController.h" 重要提示:“伞形头文件”指文件{ModuleName}.h。
    顺便说一句,目标名称是{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