【问题标题】:Unknown class in Compiled Swift Framework embedded in Objective-C ProjectObjective-C 项目中嵌入的已编译 Swift 框架中的未知类
【发布时间】:2018-01-03 16:03:44
【问题描述】:

我有一个用 Swift 构建的框架二进制文件,我正试图将它整合到一个 Objective-C 项目中。但是框架中的类不可用。

在swift框架中,类是这样定义的:

@objcMembers
@objc public final class Messaging: NSObject, UINavigationControllerDelegate, LogsManagerDelegate {
...
}

我将存档和导出的框架直接拖到项目中使用,并确保在 Build Settings 中将 Defines Module 设置为 Yes。

在 Objective-C 中我尝试使用框架:

@import ContactAtOnceMessaging;

@implementation MessagingExperience
Messaging *messaging;    // Unknown type name 'Messaging'

...

@end

如果我将框架的代码直接拖到项目中,Messaging 是一个已知的类,所以我知道 Swift 没问题。

我也尝试将导入更改为以下内容,但没有奏效。

#import "ContactAtOnceMessaging/ContactAtOnceMessaging-Swift.h"

我也尝试使用 CocoaPods 导入框架,但没有帮助。

我做错了什么?

【问题讨论】:

  • ^ 没用,我知道。无论如何,我们主要使用 cocoapods 来帮助管理这些东西。我猜你错过了某种伞形标题或模块映射,或者 cocoapods 为你做的这些花哨的事情之一。
  • 我也尝试过使用 CocoaPods,但它不起作用????希望我可以避免使用 Objective-C,但该框架必须与仍在使用它的开发人员合作。

标签: objective-c swift frameworks


【解决方案1】:

我可以确认我遇到了和你一样的问题。我也能够解决它。我不确定最初的问题是否是由我的配置中的某个异常引起的。但是,我确实测试了以下过程,发现它可以在 Xcode 9.3 中可靠地工作。


我首先在一个 Xcode 项目中创建了一个名为 Dynamic-Framework-Tester 的测试 Swift 框架,并将其设置为在每次构建时复制到绝对路径。

然后我执行了以下步骤来设置我的 Objective-C 项目:

  1. 使用 Objective-C 作为语言创建了一个新项目。
  2. 将框架从其绝对路径拖到项目中没有选择“如果需要,复制项目”。
  3. 已从 Linked Frameworks and Libraries 中删除框架,因为它会在步骤 (4) 中自动添加。
  4. 将框架添加到嵌入式二进制文件
  5. 在构建设置中,将始终嵌入 Swift 标准库设置为是。
  6. 将我的自定义框架路径添加到构建设置中的框架搜索路径设置。

在 Objective-C 项目中,我使用

导入了框架
@import Dynamic_Framework_Tester;

并从 Objective-C 调用框架中公开的方法。

使用模拟器,我能够更新框架并将更改应用于应用程序的后续运行。

【讨论】:

    猜你喜欢
    • 2016-10-21
    • 2021-10-20
    • 1970-01-01
    • 2018-09-17
    • 2015-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多