XCode 7.3 破坏了 Bridging-Header.h?

Posted

技术标签:

【中文标题】XCode 7.3 破坏了 Bridging-Header.h?【英文标题】:XCode 7.3 broke Bridging-Header.h? 【发布时间】:2016-04-06 20:17:54 【问题描述】:

我刚刚升级到 XCode 7.3,它似乎破坏了我的 PROJECT_NAME-Bridging-Header.h

我收到此错误:

BBCategoryType 是一个在名为 BBCategory.h 的文件中定义的枚举,该文件是在我的 PROJECT_NAME-Bridging-Header.h 中导入的:

//
//  Use this file to import your target's public headers that you would like to expose to Swift.
//

#import "BBCategory.h"

我还注意到,如果我删除 PROJECT_NAME-Bridging-Header.h,我会收到相同的错误 - 如果我将其添加回项目,我会收到相同的错误 - 好像 XCode 7.3 甚至无法识别PROJECT_NAME-Bridging-Header.h 了。我已验证在我的构建设置中也正确引用了桥接头。我已按照此处的所有说明进行操作,以确保正确设置:

How to call Objective-C code from Swift

这是 BBCategory.h 的内容,它在升级到 XCode 7.3 之前没有改变并且完全可以工作,这肯定是问题开始的时候:

#import "PCFCategory.h"

/**
 *  Category class that is a subclass of PCFCategory.
 */
@interface BBCategory : PCFCategory

/**
 *  Enum that describes the type of Category, used in BBSubMenuViewController and PCFCategoryMap+BBAdditions.
 */
typedef NS_ENUM(NSUInteger, BBCategoryType) 
    /// BBCategoryTypeFeatured for Featured Category.
    BBCategoryTypeFeatured,
    /// BBCategoryTypeNormal for Normal Category.
    BBCategoryTypeNormal,
    /// BBCategoryTypeHome for Home Category.
    BBCategoryTypeHome,
    /// BBCategoryTypeError if the category type is unknown
    BBCategoryTypeError
;

这可能是 XCode 7.3 的一些错误,还是我需要进行一些更改才能使其正常工作?

我还注意到桥接头在下面显示为红色:

这让我觉得 XCode 7.3 无法识别桥接头。一切都在使用 XCode 7.1、7.2 - 7.3 这坏了

【问题讨论】:

“这可能是 XCode 7.3 的一些错误吗” 不,不可能。但是您的问题中有一个错误:您没有提供足够的信息。请显示 BBCategoryType 的 Objective-C 声明,以便其他人可以重现此内容。谢谢。 请上传BBCategory.h的内容和导致错误的swift文件。这可能是 BBCategoryType 声明中的错误,因为在 Objective-C 中有许多不同的方式来声明 enums。 我已经添加了 BBCategory.h 的内容 - 它在几个月内没有改变 - 但请查看我关于红色桥接头的新评论 文件名红色高亮表示Xcode找不到桥接头文件。在 Finder 中找到它,然后将其拖到您的项目中以重新链接它。还要检查它是否已在目标的 Build Settings > Objective-C Bridging Header 中被选中。 我已经手动删除并添加了 bridging-header.h,看起来不错。我还注释掉了 BBCategoryType 代码并且它可以编译 - 所以我很想相信 @Coder256 是正确的,因为 BBCategoryType 没有以 XCode 7.3 中的 Swift 可以消化的方式声明 【参考方案1】:

问题是你的枚举被定义在内部你的@interface

虽然这在 Objective-C 中是有效的,但它似乎对 Swift 隐藏了它(我不确定这是不是有意的 - 肯定想知道是否有其他人对此了解更多)。

因此,您可以通过将枚举移出@interface 来修复它。

#import "PCFCategory.h"

/**
 *  Enum that describes the type of Category, used in BBSubMenuViewController and PCFCategoryMap+BBAdditions.
 */
typedef NS_ENUM(NSUInteger, BBCategoryType) 
    /// BBCategoryTypeFeatured for Featured Category.
    BBCategoryTypeFeatured,
    /// BBCategoryTypeNormal for Normal Category.
    BBCategoryTypeNormal,
    /// BBCategoryTypeHome for Home Category.
    BBCategoryTypeHome,
    /// BBCategoryTypeError if the category type is unknown
    BBCategoryTypeError
;

/**
 *  Category class that is a subclass of PCFCategory.
 */
@interface BBCategory : PCFCategory

...

【讨论】:

不知道他能不能像swift中的嵌套类型一样使用BBCategory. BBCategoryType 非常感谢 - 从 XCode 7.3 开始,枚举在界面内时不再暴露。 不这样出现@EmilioPelaez

以上是关于XCode 7.3 破坏了 Bridging-Header.h?的主要内容,如果未能解决你的问题,请参考以下文章

使用 7.3 后的 Xcode 7.2 - 没有列出模拟器

Xcode 7.3 上传到 iTunesConnect(TestFlight 构建)失败

如何在不破坏 Zabbix 服务器的情况下从 php 5.4 迁移到 7.3?

XCode 7.3 模拟器无法启动

在 Xcode 7.3 中使用 Cocoapods

苹果发布Xcode 7.3,Swift更新至2.2版本