将 Swift Class 添加到 Objective-C 具有多个目标的项目

Adding Swift Class to Objective-C Project with Multiple Targets

我有一个现有的 Obj-C 项目,其中包含许多共享同一个 AppDelegate 的目标。我想桥接一个 swift class 被 select 目标使用。当我有一个目标时,我可以很容易地做到这一点。

当我将 swift 文件添加到项目时,我 select 生成了所需的目标和必要的 bridging-header.h 文件,但是当我尝试导入这些文件时 - swift.h 个文件,找不到它们。

对于具有多个构建目标的项目,我是否遗漏了哪些步骤?

编辑 - 更多详细信息

我想添加更多有关项目设置方式的详细信息。

我有一个框架,我们称之为 AppFactory,编码为 Obj-C。我有多个构建目标,它们根据该目标的 plist 中的信息生成不同版本的核心应用程序。我想要一个 swift 文件供这些应用程序使用。在我的构建设置中,定义模块被标记为是,我创建了这个 swift class:

@objec class SwiftClass: NSObject { }

在这样做的过程中,Xcode 生成了正确的 Briding-Header.h 文件。

根据 Apple Guides 当你有多个构建目标时你的导入 header 应该包括 ProductName/ProductModuleName-Swift.h,它应该由 Xcode.

当我查看派生数据文件夹时,ProductModuleName-Swift.h 确实存在,在 AppFactoryCore 文件夹下的每个目标构建文件夹中。

我找到了解决问题的方法。

Swift 文件目标: 我没有 SwiftClass.swift 同时针对框架和选定的目标(AppA、AppB 和 AppC),而是后退并只针对框架 AppFactoryCore。

构建设置(打包 > 定义模块): 我将每个应用程序目标的 Defines Module 属性 从 YES 还原为 NO,并将框架目标的 属性 设置为 YES

Swift Class声明: guide 状态:

Because the generated header for a framework target is part of the framework’s public interface, only declarations marked with the public or open modifier appear in the generated header for a framework target.

所以我在 class 和 class 函数中添加了访问控制修饰符

@objc open class SwiftClass: NSObject {
    //Code
}

导入Header: 由于 SwiftClass.swift 仅针对框架目标,而且它实际上是一个正在使用的框架,因此 header 将 SwiftClass.swift 导入通用 AppDelegate 是

#import <AppFactoryCore/AppFactoryCore-Swift.h>

完成所有先前声明的修改后,它终于变得可见了。

既然文件对所有目标都是全局的,我添加了一个自定义属性来确定目标 运行 是否应该使用 SwiftClass.swift.

希望这可以帮助其他人尝试完成相对相似的任务!