在遵循在 Swift 中创建 XPC 服务指南并尝试传递自定义Foo
类时,我发现为了使其工作,它必须位于动态库中。当它嵌入到两个目标中时,与服务的连接会因4097
代码而失败。如果Foo
在静态库中,也会发生同样的情况。
我似乎无法引用此要求,并猜测这是因为安全性在解码时将它们识别为不同的对象。这是真的?这方面有更具体的信息吗?
在遵循在 Swift 中创建 XPC 服务指南并尝试传递自定义Foo
类时,我发现为了使其工作,它必须位于动态库中。当它嵌入到两个目标中时,与服务的连接会因4097
代码而失败。如果Foo
在静态库中,也会发生同样的情况。
我似乎无法引用此要求,并猜测这是因为安全性在解码时将它们识别为不同的对象。这是真的?这方面有更具体的信息吗?
问题在于 Swift 名称修改,这会导致不同目标中的类名不同,因此当 XPC 解码器尝试安全地解码接收到的对象时,它会看到与指定不同的类名并失败。
使用obj.io XPC 示例编译的应用程序和服务目标中的 Swift@objc class Foo: NSObject, NSSecureCoding
类分别具有@class Foo : NSObject<NSSecureCoding>
和签名。@class _TtC15ImageDownloader3Foo : NSObject<NSSecureCoding>
为了避免这种情况,只需在@objc(Foo)
标签中添加明确的 Objective-C 名称,这将@class Foo : NSObject<NSSecureCoding>
在两个目标中产生相同的类签名。