Ответ 1
Хорошо, поэтому для ответа на главный вопрос: данные в архиве .zip - это блок данных, который был сериализован с классом NSArchiver
(у них есть довольно отличительный заголовок при открытии с помощью шестнадцатеричного инструмента (я использовал hex fiend), так что это был первый ключ). Достаточно прямо читать, все, что вам нужно сделать, это позвонить NSUnarchiver
, по крайней мере, в эту теорию. Прежде чем я расскажу о деталях, вот очень простое примерное приложение, которое выгружает несколько информации: https://github.com/JustSid/Traced
Таким образом, проблема с NSArchiver
и NSUnarchiver
заключается в том, что вам в первую очередь необходимо иметь все классы, которые были заархивированы, и, во-вторых, вам нужно прочитать данные в том порядке, в котором это (это был сложный бит, я использовал class-dump
, чтобы выгрузить интерфейс для нескольких требуемых классов, а затем попытался разобрать объект данных по объекту и посмотреть, что я получил. К счастью, NSArchiver
умирает с дескриптивные сообщения об ошибках, если отсутствует класс, он скажет вам, как его зовут). Самая большая проблема, с которой я столкнулся, заключалась в том, что двоичные файлы Instruments и используемые фреймворки не содержат всех необходимых мне классов, в частности, архив содержит сериализованные данные класса с именем XRVideoCardRun
. У меня есть предположение, что файл .template
внутри пакета .trace
содержит динамическую библиотеку с требуемым классом (я имею в виду, она размером более 300 КБ и содержит много blobs (это битовый диск)). Я был слишком ленив, чтобы извлечь из него двоичные данные и запустить class-dump
против него, и мне посчастливилось, что большая часть данных, полученных из архива, была совместима с тем, что я ожидал увидеть для суперкласса, XRRun
(который я нашел в одной из рамок "Инструменты" ), за исключением массива, содержащего словари, содержимое которого выглядело как образцы данных.
Таким образом, остальное просто объединяло все вместе. Если вы посмотрите пример приложения, наиболее интересной частью должен быть файл XRRun.m
и .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: Если формат меняется, приложение также сломается...)