NSSecureCoding-implementing 类 必须在共享框架中才能与 XPC 一起工作吗?
Must NSSecureCoding-implementing classes be in shared framework to work with XPC?
在 Swift 中关注 Creating XPC Services guide 并尝试传递自定义 Foo
class 时,我发现要使其正常工作,它必须位于动态库中。当它嵌入到两个目标时,服务连接失败并显示 4097
代码。如果 Foo
在静态库中,也会发生同样的情况。
我似乎无法提及此要求,我猜测这是因为安全性在解码时将它们识别为不同的对象。这是真的?关于这个有更具体的信息吗?
问题在于 Swift 名称修改,这会导致在不同的目标中产生不同的 class 名称,因此当 XPC 解码器尝试安全地解码接收到的对象时,它会看到不同的 class 名称从指定和失败。
使用 obj.io XPC example 编译 Swift @objc class Foo: NSObject, NSSecureCoding
class 在应用程序和服务目标中分别具有 @class Foo : NSObject<NSSecureCoding>
和 @class _TtC15ImageDownloader3Foo : NSObject<NSSecureCoding>
签名。
为了避免这种情况,只需在 @objc(Foo)
标签中添加明确的 Objective-C 名称,这将在两个目标中产生相同的 @class Foo : NSObject<NSSecureCoding>
class 签名。
在 Swift 中关注 Creating XPC Services guide 并尝试传递自定义 Foo
class 时,我发现要使其正常工作,它必须位于动态库中。当它嵌入到两个目标时,服务连接失败并显示 4097
代码。如果 Foo
在静态库中,也会发生同样的情况。
我似乎无法提及此要求,我猜测这是因为安全性在解码时将它们识别为不同的对象。这是真的?关于这个有更具体的信息吗?
问题在于 Swift 名称修改,这会导致在不同的目标中产生不同的 class 名称,因此当 XPC 解码器尝试安全地解码接收到的对象时,它会看到不同的 class 名称从指定和失败。
使用 obj.io XPC example 编译 Swift @objc class Foo: NSObject, NSSecureCoding
class 在应用程序和服务目标中分别具有 @class Foo : NSObject<NSSecureCoding>
和 @class _TtC15ImageDownloader3Foo : NSObject<NSSecureCoding>
签名。
为了避免这种情况,只需在 @objc(Foo)
标签中添加明确的 Objective-C 名称,这将在两个目标中产生相同的 @class Foo : NSObject<NSSecureCoding>
class 签名。