在我的 Swift 应用程序中使用来自我的 XPC 服务的 Objective-C 协议

Using an Objective-C protocol from my XPC Service in my Swift app

我有一个使用 Swift 编写的应用程序,完全使用 Swift,从未有过 Obj-C class,没有 Obj-C 文件或桥接 headers.

为了在不影响我的应用程序权利的情况下添加一些功能,我正在尝试添加 XPC 服务——我在 Xcode 中创建了它,XPC 服务的模板在 Xcode 中创建仅 Obj-C。

这很好,我在 Obj-C 中写出了我的服务,但是现在当我想通过 NSXPCConnection 调用我的服务时,我必须设置它的接口,然后做我需要在我的 Swift 应用程序代码中引用我为我的 XPC 目标编写的 Obj-C 协议。

我该怎么做?我不能只将 "Protocol.h" 添加到我的应用程序目标,它没有 C header 的规则。我在这方面发现的所有其他评论似乎只适用于链接到框架或共同目标中的协议...

好的,所以我找到了解决方案。

1) 删除了样板 Obj-C 服务 class 和协议文件。

2) 在 swift 中编写了我的协议和出售对象 classes。确保这些可以导出到 Obj-C。

3) 将 protocol.swift 文件添加到我的应用程序的目标中。将 #import "Service-Swift.h" 添加到我的服务 main.m.

所以现在我的 XPC 对象在 Swift 中实现,我的对象协议在 swift 中,唯一的非 swift 文件是我的 XPC 的主文件。

据我了解,您甚至可以更改主文件。 https://www.objc.io/issues/14-mac/xpc/