【问题标题】:Could not build Objective-C module, when using swift in objective-c module在objective-c模块中使用swift时无法构建Objective-C模块
【发布时间】:2019-09-03 05:08:43
【问题描述】:

在 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


    【解决方案1】:

    a great and simple article 结束了这个案例:

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

    【讨论】:

      【解决方案2】:

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

      解决方案:

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

      【讨论】:

      • 对我来说,答案是将其设置为 NO,然后将其设置回 YES。
      猜你喜欢
      • 2015-07-05
      • 2016-10-16
      • 2016-04-06
      • 2018-05-25
      • 2021-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多