在 Objective-C 模块中使用 swift 时,无法构建 Objective-C 模块

问题描述 投票:0回答:3

在 iOS 应用程序中,我有一个子项目(不是 cocoapods),其中包含 swift 文件和 ObjC 文件(由 swift 文件使用)。 XCode 自动创建了一个桥接文件,但无法构建它,因为框架中显然不允许桥接。我使用的解决方法是将 Objective-C 标头添加到伞文件中,并且它有效。现在我需要使用 ObjC 中的 swift 类。我将

define module
设置为 YES,即生成的文件 Framework-Swift.h 。但是当我尝试将其导入 Objective-C 时,我得到了

无法构建 Objective-C 模块

谷歌搜索后我得到的最接近的是这个答案:

啊,明白了。看起来你正在构建一个混合的 Swift 和 Objective-C pod - 如果是这种情况,Xcode 将尝试导入 在生成的 -Swift.h 标头中。 您需要手动创建标头并添加导入 您想要向 Swift 公开的 Objective-C 类。

CocoaPods 自动生成伞头并导入 在 .modulemap 中,但 Xcode 在生成时不使用它 -Swift.h 头文件

但我不确定需要手动创建什么标头。 关于在 Objective-C 框架中使用 swift 有什么想法或建议吗?两种方式都可以吗?

ios objective-c swift xcode bridging-header
3个回答
15
投票

在包含多个目标的 Swift 项目中使用 Swift Pod 时,我也遇到了类似的问题。根本没有 Objective-C 代码。我尝试清除构建文件夹、Pod 缓存、派生数据 - 没有任何效果。

解决方案:

打开包含模块代码的目标的构建设置。将“安装 Objective-C 兼容性标头”设置为“否”

enter image description here


0
投票

一篇很棒而简单的文章总结了这个案例:

  1. DEFINES_MODULE=是
  2. 要在 Swift 中使用 ObjC 类,请创建一个桥接头并在构建设置中指定它的路径
  3. 要在 ObjC 中使用 Swift 类,请在
    #import <ModuleName/ModuleName-Swift.h>
    文件中使用
    *.m
    (如果需要,请在
    @class SwiftClass;
    文件中使用
    *.h
    前向声明)
  4. 让 swift 类及其成员对 objc 可见
    1. NSObject
    2. 继承你的班级
    3. 在其前面加上
      @objcMembers
    4. 让班级及其成员都成为
      public

0
投票

在 Xcode 16 中,.h 文件的 Target Membership 应设置为 Public。 选择头文件,打开右侧的 Inspector 窗口,并将 Target Membership 设置为 Public。

Could not build Objective-C module solution

© www.soinside.com 2019 - 2024. All rights reserved.