【问题标题】:Duplicate definition of category 'my_framework' on interface 'NSObject'接口“NSObject”上类别“my_framework”的重复定义
【发布时间】:2016-02-02 22:00:58
【问题描述】:

我正在更新我的应用程序和一个公共库(动态框架)。曾经是作为 Xcode 子项目的静态库,现在是包含 swift 代码的动态框架。

在编写我的应用程序代码时,我看到了一些编译器警告。目前,它们只是警告。

在我的应用程序的 MainViewController 中,我包含了一个用 swift 编写的文件。所以这有一个 App-swift.h 的导入。在这个自动生成的 App-swift.h 中,有一段:

#if defined(__has_feature) && __has_feature(modules)
@import UIKit;
@import my_framework;
#endif

在这个“my_framework”内部,我有一个关于各种文件的类别方法,例如NSObject+my_framework.h

现在,我收到 MainViewController.m 的编译器警告,提示“接口 'NSObject' 上的类别 'my_framework' 的重复定义”。下拉列表提供了两个定义的位置。一个位置是我的框架内的实际类别头文件。编译器通过它被包含在 pch 文件中来“看到”这个位置。另一个位置在“@import my_framework”行直接链接到我的 App-swift.h 文件。

有什么办法可以避免这个警告吗?

【问题讨论】:

    标签: ios objective-c xcode swift xcode7


    【解决方案1】:

    使用@import#import <FMK/FMK.h> 代替#import "fmk.h"

    【讨论】:

    • 对我的修复是重写导入行,然后错误消失了。 Xcode 9.4。
    【解决方案2】:

    对我来说同样的问题,我从 my_framework.framework/Modules/module.modulemap 中删除了 module * { export * } 行,所以它看起来像:

    framework module my_framework {
       umbrella header "my_framework.h"
    
       export *
    }
    

    警告消失了。然后,将 module.modulemap 添加到 my_framework 项目,并将其路径设置为 MODULEMAP_FILE 构建设置。

    【讨论】:

    • 我删除了“module * { export * }”,但我仍然收到这些重复的警告...另一个注意事项,这个框架是从本地 dev pod 添加的,所以 pod install 脚本参与了这个过程,最终动态创建了modulemap文件。
    • 如果您设置了 MODULEMAP_FILE 构建设置,CocoaPod 不应为您创建模块映射。也许您应该尝试使用 Carthage,它除了使用 xcodebuild 编译框架之外什么都不做。
    【解决方案3】:

    在我的 swift 项目中,我使用桥头文件来导入现有的 Objective-C 文件。两次导入文件时出现此错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-30
      • 2014-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多