NSKeyedArchive反序列化工具重大更新

本文详细介绍了NSKeyedArchive反序列化库的重要更新,新增了递归反序列化功能,能够处理嵌套在普通plist中的NSKeyedArchive数据块,并提供了向后兼容的参数选项。

NSKeyedArchive反序列化工具更新

很久以前,我编写了一些代码来使NSKeyedArchives(NSKA)可读,基本上是反序列化数据。随后它被转换成一个库,用于其他项目如iLeapp和mac_apt。上周我重新审视了这个库,发现并修复了一个小错误。同时,我还增加了一个额外功能,主要是为了方便那些不喜欢接触代码的用户。

之前,这个库只能处理NSKA文件。如果文件是普通的plist,它会返回一个异常,提示在plist中找不到’$archiver’元素。但如果你有一些文件是普通plist(未序列化),但其中包含嵌套的NSKA plist作为数据块,该怎么办?实际上在iOS/macOS上有相当多这样的情况。要使它们可读,你必须编写代码来提取这些数据块并通过库运行它们。之前的代码即使在NSKA归档内也不处理递归反序列化。

现在,最新更新(版本1.4.0)在deserialize_plist(...)deserialize_plist_from_string(...)函数中增加了一个额外参数来解锁此功能,并执行所有嵌套数据块的完全递归反序列化。

1
def deserialize_plist(path_or_file, full_recurse_convert_nska=False)

默认情况下,该值为False,模拟旧行为。但是,当设置为True时,对于非NSKA(未序列化或普通)plist将不再返回异常,并且始终返回一个plist。如果树中的任何位置有一个数据(二进制块)元素,其值包含NSKA plist的有效标头,现在将被替换为代表NSKA数据反序列化版本的树分支。

图1 - 使用旧代码与新代码反序列化的NSKA plist对比

如果你在任何项目中使用nska_deserialize依赖,请更新到最新版本:

1
pip3 install nska_deserialize --upgrade

旧的编译exe已更新(标志设置为True)。它也非常方便使用拖放操作,如此处所示。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计