我有一个用 Swift 构建的框架二进制文件,我正试图将其合并到一个 Objective-C 项目中。但是框架中的类不可用。
在swift框架中,类是这样定义的:
@objcMembers
@objc public final class Messaging: NSObject, UINavigationControllerDelegate, LogsManagerDelegate {
...
}
我将存档和导出的框架直接拖到项目中使用,并确保在build设置中将定义模块设置为是。
在 Objective-C 中我尝试使用框架:
@import ContactAtOnceMessaging;
@implementation MessagingExperience
Messaging *messaging; // Unknown type name 'Messaging'
...
@end
如果我将框架的代码直接拖到项目中,Messaging 是一个已知类,所以我知道 Swift 没问题。
我还尝试将导入更改为以下内容,但没有成功。
#import "ContactAtOnceMessaging/ContactAtOnceMessaging-Swift.h"
我还尝试使用 CocoaPods 导入框架,但没有帮助。
我做错了什么?
最佳答案
我可以确认我遇到了与您相同的问题。我也能够解决它。我不确定最初的问题是否是由我的配置中某处的异常引起的。但是,我确实测试了以下过程并发现它可以可靠地与 Xcode 9.3 一起工作。
我首先在 Xcode 项目中创建了一个名为 Dynamic-Framework-Tester
的测试 Swift 框架,并将其设置为在每次构建时复制到绝对路径。
然后我执行了以下步骤来设置我的 Objective-C 项目:
- 使用 Objective-C 作为语言创建了一个新项目。
- 未选择“如果需要复制项目”,将框架从其绝对路径拖到项目中。
- 已从 Linked Frameworks and Libraries 中删除框架,因为它将在步骤 (4) 中自动添加。
- 将框架添加到嵌入式二进制文件。
- 在build设置中,将始终嵌入 Swift 标准库设置为是。
- 将我的自定义框架路径添加到build设置中的框架搜索路径设置。
在Objective-C项目中,我导入框架使用
@import Dynamic_Framework_Tester;
并从 Objective-C 调用框架中公开的方法。
使用模拟器,我能够更新框架并在应用程序的后续运行中应用更改。
关于objective-c - Objective-C 项目中嵌入的已编译 Swift 框架中的未知类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48080928/