objective-c - Objective-C 项目中嵌入的已编译 Swift 框架中的未知类

标签 objective-c swift frameworks

我有一个用 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 项目:

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

在Objective-C项目中,我导入框架使用

@import Dynamic_Framework_Tester;

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

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

关于objective-c - Objective-C 项目中嵌入的已编译 Swift 框架中的未知类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48080928/

相关文章:

iphone - iOS书中奇怪的变量分配

iphone - UIWebview 加载安全页面缓慢

iphone - 使用 iAd JS 框架创建 Web 应用程序?

javascript - 你会推荐什么框架来为网络制作类似桌面的应用程序?

ios - UIButton 作为 subview 没有响应

ios - 如何动态更改 UIStoryboard 中使用的颜色

ios - 如何暂停 NSURLSessionDownloadTask?

ios - 在设备之间共享数据(Swift)

ios - 如何配置 podsec 文件 swift 项目

c# - java web 的框架太多了。害怕和困惑 :(