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(...)函数中增加了一个额外参数来解锁此功能,并执行所有嵌套数据块的完全递归反序列化。
|
|
默认情况下,该值为False,模拟旧行为。但是,当设置为True时,对于非NSKA(未序列化或普通)plist将不再返回异常,并且始终返回一个plist。如果树中的任何位置有一个数据(二进制块)元素,其值包含NSKA plist的有效标头,现在将被替换为代表NSKA数据反序列化版本的树分支。
图1 - 使用旧代码与新代码反序列化的NSKA plist对比
如果你在任何项目中使用nska_deserialize依赖,请更新到最新版本:
|
|
旧的编译exe已更新(标志设置为True)。它也非常方便使用拖放操作,如此处所示。