TL;DR:你如何编码和解码一个MTLSharedTextureHandle
andMTLSharedEventHandler
以便它可以通过一个 XPC 连接在一个内部传输xpc_dictionary
?
我正在开发的一个 macOS 应用程序广泛使用 XPC 服务,并使用基于 C 的 API 实现。(即:)xpc_main, xpc_connection, xpc_dictionary...
这在当时是有道理的,因为某些对象,例如IOSurfaces
,不支持NSCoding/NSSecureCoding
并且必须使用IOSurfaceCreateXPCObject
.
在 macOS 10.14 中,Apple 引入了用于在进程之间共享金属纹理和事件的新类:MTLSharedTextureHandle
和MTLSharedEventHandle
. 这些类支持NSSecureCoding
,但它们似乎在 C-XPC 接口中没有用于编码/解码它们的对应部分。
我想我可以使用类似[NSKeyedArchiver archivedDataWithRootObject:requiringSecureCoding:error]
的方法将它们转换为NSData
对象,然后可以将其存储在 中xpc_dictionary
,但是当我尝试这样做时,我得到以下异常:
Caught exception during archival:
This object may only be encoded by an NSXPCCoder.
(NSXPCCoder 是一个私有类。)
MTLSharedTextureHandle
和都会发生这种情况MTLSharedEventHandle
。我可以切换到使用新的NSXPCConnection
API,但我已经在 C 接口上构建了大量代码,所以我宁愿不必进行切换。
有没有办法将这两个类中的任何一个归档到可以存储在xpc_dictionary
服务和客户端之间传输的有效负载中?