好的,所以回答主要问题:.zip 存档中的数据是一个用NSArchiver
类序列化的数据块(当使用 hex 工具(我使用 hex fiend)打开它们时,它们有一个相当独特的标题,所以是第一个线索)。阅读起来相当简单,您所要做的就是打电话给NSUnarchiver
,至少理论上是这样的。在详细介绍之前,这是一个非常简单的示例应用程序,它转储了一些信息:https ://github.com/JustSid/Traced
因此, 和 的问题NSArchiver
在于NSUnarchiver
,首先您需要拥有所有已存档的类,其次您必须按照存档的顺序读取数据(这是棘手的一点,我曾经class-dump
为一些必需的类转储接口,然后尝试逐个对象取消归档数据对象并查看我返回的内容。幸运的是,NSArchiver
死于描述性错误消息,如果缺少一个类,它会告诉你它叫什么名字)。我遇到的最大问题是 Instruments 二进制文件和使用的框架不包含我需要的所有类,特别是存档包含名为XRVideoCardRun
. 我假设.template
里面的文件.trace
bundle 包含一个带有所需类的动态库(我的意思是,它的大小超过 300kb 并且包含很多 blob(它是二进制 plist))。我懒得从中提取二进制数据并运行class-dump
它,我很幸运,从档案中出来的大部分数据与我期望看到的超类一致,XRRun
(我发现在其中一个 Instruments 框架中),但包含字典的数组除外,其内容看起来像示例数据。
所以,剩下的就是把所有东西结合在一起。如果您查看示例应用程序,最有趣的部分应该是XRRun.m
and.h
文件。它们包含一些文档,以及一些关于如何从样本中提取数据的部分,尽管您可能希望将其替换为您自己的自动化逻辑。希望能帮助到你。
向您的示例文件抛出的应用程序会输出以下内容:
Run 1, starting at 24.05.13 17:42:16, running until 24.05.13 17:42:28
Sample 0: FPS: 27 Device: 0% Renderer: 0% Tiler: 0% Timestamp: 1.012740
Sample 1: FPS: 35 Device: 11% Renderer: 10% Tiler: 2% Timestamp: 2.018574
Sample 2: FPS: 34 Device: 33% Renderer: 32% Tiler: 7% Timestamp: 3.026101
Sample 3: FPS: 59 Device: 59% Renderer: 59% Tiler: 16% Timestamp: 4.032030
Sample 4: FPS: 60 Device: 59% Renderer: 58% Tiler: 16% Timestamp: 5.038990
Sample 5: FPS: 59 Device: 59% Renderer: 58% Tiler: 16% Timestamp: 6.046022
Sample 6: FPS: 59 Device: 57% Renderer: 53% Tiler: 17% Timestamp: 7.051187
Sample 7: FPS: 60 Device: 67% Renderer: 66% Tiler: 14% Timestamp: 8.057343
Sample 8: FPS: 59 Device: 64% Renderer: 64% Tiler: 11% Timestamp: 9.064914
Sample 9: FPS: 60 Device: 67% Renderer: 67% Tiler: 11% Timestamp: 10.072592
Sample 10: FPS: 59 Device: 65% Renderer: 65% Tiler: 15% Timestamp: 11.080248
(PS:如果格式改变,应用程序也会崩溃......)