问题标签 [nssecurecoding]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
933 浏览

objective-c - 当 NSDictionary 不知道它的未来内容时,它如何支持 NSSecureCoding

根据 Apple 规范,当一个类支持时NSSecureCoding,它应该使用

在它的 initWithCoder

但是由于字典不知道它的内容,它如何支持安全编码?

与属性类已知的自定义对象相反

0 投票
1 回答
4618 浏览

ios - 用户信息中带有自定义对象的 UNMutableNotificationContent

我想在 UNMutableNotificationContent 的用户信息中使用自定义对象,但它不起作用。当我在 userinfo 中放置自定义对象时,不会触发通知。

使用此代码,将触发通知:

使用以下内容,没有错误但不会触发通知:

TestClass 是自定义类,这里是定义:

任何想法?

0 投票
1 回答
176 浏览

swift - `cannotDecodeObjectOfClassName` 未在 `NSKeyedArchiverDelegate` 中调用

我正在尝试捕获通过协议安全地解码未知类的NSKeyedUnarchiver取消归档异常。NSInvalidUnarchiveOperationExceptionNSSecureCoding

我正在使用的解决方案基于相关的NSKeyedUnarchiverDelegate SO 帖子,通过实现委托协议NSKeyedUnarchiverDelegate,因此我可以通过unarchiver(_:cannotDecodeObjectOfClassName:originalClasses:). 但是,在解码过程中遇到未知类时,似乎不会调用此委托方法。

这是我用于安全地取消归档数组对象的代码片段。

UnarchiverDelegate的实现就像在我指出的原始NSKeyedUnarchiverDelegate SO 帖子中一样。在我的设置下,decodeObject(of: allowedClasses, forKey: key)不会引发异常,而是引发运行时异常:

根据其文档NSKeyedUnarchiverDelegate,这应该只是应该调用的 那种异常:unarchiver(_:cannotDecodeObjectOfClassName:originalClasses:)

通知代理具有给定名称的类在解码期间不可用。

但在我的例子中,这个方法没有被上面的代码片段调用(即使其他委托方法,比如unarchiverWillFinish(_:)unarchiver(_:didDecode:)在解码没有遇到问题时被正常调用。

与原来的帖子不同,我不能使用类函数,比如decodeTopLevelObjectForKey我可以处理异常的地方try?,因为我需要支持NSSecureCoding协议的安全编码和解码,就像这里讨论的那样。这迫使我使用decodeObject(of:forKey),它不会抛出任何我可以处理的异常,而且,它也不会在抛出导致应用程序崩溃的运行时异常之前通知我的委托。

在什么场景下unarchiver(_:cannotDecodeObjectOfClassName:originalClasses:)实际调用了委托方法?如何NSInvalidUnarchiveOperationException在我的NSSecureCoding设置下收听并做出反应,以便在解码不成功时避免运行时崩溃?

0 投票
1 回答
359 浏览

swift - NSSecureCoding 实现类必须在共享框架中才能与 XPC 一起使用吗?

在遵循在 Swift 中创建 XPC 服务指南并尝试传递自定义Foo类时,我发现为了使其工作,它必须位于动态库中。当它嵌入到两个目标中时,与服务的连接会因4097代码而失败。如果Foo在静态库中,也会发生同样的情况。

我似乎无法引用此要求,并猜测这是因为安全性在解码时将它们识别为不同的对象。这是真的?这方面有更具体的信息吗?

0 投票
1 回答
656 浏览

swift - NSSecureCoding 与钥匙串

我了解使用“NSSecureCoding”可以将数据安全地存储到磁盘,类似于钥匙串作为安全存储信息的地方。

我还了解钥匙串具有在同一提供商的应用程序之间共享的优势。如果有人会忽略钥匙串共享功能,是否可以说,与 NSSecureCoding 相比,将数据存储在钥匙串中同样安全?

我有一个用户对象

我存档的

TTYYUU的内容是:

6270 6c69 7374 3030 d401 0203 0405 0615 1658 2476 6572 7369 6f6e 5824 6f62 6a65 6374 7359 2461 7263 6869 7665 7254 2474 6f70 1200 0186 a0a4 0708 0d0e 5524 6e75 6c6c d209 0a0b 0c52 2430 5624 636c 6173 7380 0280 0356 7465 6565 6573 d20f 1011 125a 2463 6c61 7373 6e61 6d65 5824 636c 6173 7365 735f 1011 5365 6375 7265 436f 6469 6e67 2e55 7365 72a2 1314 5f10 1153 6563 7572 6543 6f64 696e 672e 5573 6572 584e 534f 626a 6563 745f 100f 4e53 4b65 7965 6441 7263 6869 7665 72d1 1718 5472 6f6f 7480 0108 111a 232d 3237 3c42 474a 5153 555c 616c 7589 8ca0 a9bb bec3 0000 0000 0000 0101 0000 0000 0000 0019 0000 0000 0000 0000 0000 0000 0000 0

有人可以展示解码原始信息的方法,它说格式是“NSPropertyList Binary Format_v1_0”,有人可以展示如何从这个二进制文件中提取“teeees”吗?

0 投票
1 回答
1400 浏览

ios - 使用 decodeObject(of: forKey:) 解码符合协议的对象

我有一个需要遵守的 Objective-C 协议NSSecureCoding

我有一个父对象,它存储对符合 的对象的引用MyProtocol,并且我希望父对象也符合NSSecureCoding. 当我尝试这个时:

我得到错误:'decodeObject(of:forKey:)' is unavailable in Swift: use generic 'decodeObjectOfClass(_:forKey:)'

如果您不知道您编码的对象的特定类,有什么方法可以使用 NSSecureCoding?

0 投票
1 回答
373 浏览

ios - 如何在动作扩展中将 NSSecureCoding 转换为 MKMapItem

我正在尝试为我的应用程序制作一个操作扩展,用户可以在其中添加他当前的位置以及其他一些数据。在与 Apple Maps App 共享位置后,我调试了扩展程序,发现 Maps 发送了四个具有以下内容的提供商:

  • 所选位置的电子名片
  • 选定位置的 Apple 地图 URL
  • 纯文本,它是所选位置的名称
  • 一个MKMapItem

以上所有内容均为NSSecureCoding. 强制转换为 vCard 的数据Data并使用该数据进行初始化,纯文本和 url 从 NSSecureCoding 成功,但我还没有找到从收到的数据创建对象的方法。StringStringMKMapItem

这是我尝试过的:

但它失败了。我可能必须Data先将它转换为,但我找不到任何初始化MKMapItemData

0 投票
4 回答
1395 浏览

swift - 使用优化速度选项时,`supportsSecureCoding` 崩溃

我在创建使用 NSSecureCoding 及其子类的类时遇到问题。

我应该这样称呼它,因为 NSObject.h 中的文档说,

此属性必须在所有允许安全编码的类上返回 YES。采用 NSSecureCoding 并覆盖 initWithCoder: 的类的子类也必须覆盖此方法并返回 YES。// 编写解码数据的方法时,应参考安全编码指南。

目标-C:

迅速:

我使用的是 Xcode 10.0,在 Swift 4.0 和 Swift 4.2 上都试过了。人们如何解决这个问题?任何帮助表示赞赏。

更新:使用时public class var supportsSecureCoding,它会编译,但在使用 Optimize for Speed 时会在运行时崩溃。

0 投票
2 回答
237 浏览

ios - Swift iOS SceneKit 如何使用 NSSecureCoding 对 SCNMatrix4 进行安全编码?

我正在尝试对SceneKit SCNMatrix4进行安全编码,使其符合NSSecureCoding类似于以下内容的内容:

但这会引发编译错误:

无法将“SCNMatrix4.Type”类型的值转换为预期的参数类型“[AnyClass]?” (又名“可选>”)

显然SCNMatrix4不是一个对象,这就是为什么这不起作用的原因,但我肯定不需要遍历 16Float中的每一个SCNMatrix4并使用以下代码对每个进行编码:

确定不是吗?

安全编码的正确方法是什么?

0 投票
1 回答
326 浏览

ios - iOS Swift 你如何安全编码/解码一个 TimeInterval 以与 NSSecureCoding 兼容?

我有一个变量

我想对其进行编码和解码NSSecureCoding

到目前为止,我有这个用于编码:

这用于解码,将其TimeInterval视为Double

但这不起作用并导致错误:

[错误] 错误:多线程获取期间引发异常 *** -[NSKeyedUnarchiver decodeDoubleForKey:]:键值 (pausedTime) 不是 64 位浮点数 ({ "__NSCoderInternalErrorCode" = 4864; })

请有人可以为我提供保护编码/解码的正确TimeInterval方法吗?