понедельник, 9 января 2012 г.

Избавляемcя от тормозов iPhone 3G

Не секрет что выход iOS 4.0 был прохладно встречен со стороны владельцев не очень новых iPhone. Новый функционал нравился всем, но вот отчеты о заметном снижении производительности постепенно перестали нуждаться в доказательствах, так как проявлялись практически у всех владельцев версии 3G. Я думал, что причина кроется исключительно в новых программах – так как их пишут уже с расчетом на новое мощное железо последних моделей и старые модели просто перестают тянуть. Однако вскоре и старые-добрые проверенные софтины начали тормозить.

Одной из причин таких тормозов оказался файл consolidated.db - в который iPhone педантично складывает географические координаты перемещений своего хозяина. Когда его размер становится внушительным – всякое обращение к нему (а значит и к службе геолокации) становится долгим и ресурсоемким. Тормоза с геолокацией я заметил, но связать их с этим файлом мне помогла статья на Хабре. В ее заключении автор находит противоядие – злобный файл должен быть потерт (в разных смыслах) – это совершенно безопасно для стабильности iPhone. И это совсем не проблема, если ваш iPhone взломан. Мой случай был иным.
Итак, нужно было всего-навсего стереть/изменить некоторое содержимое (или сам файл) на iPhone.

Попытка номер раз

Создаем бекап iPhone. Находим его на диске. (C:\Users\YOUR_USERNAME\AppData\Roaming\Apple Computer\MobileSync\Backup\). Скачиваем iPhone Backup Browser. Находим файл (ого, 26 Мб!)


В столбце с именем “Key” находится название этого файла в директории с бекапом. Удаляем файл “4096c9ec676f2847dc283405900e284a7c815836” (есть подозрение, что это имя для версии операционки 4.2.1 будет таким же на всех iPhone). Командуем iTunes восстановить iPhone из бекапа. iTunes пытается, но сообщает об ошибке. Что ж, видимо он проверяет наличие файла.

Попытка номер два

Создаем пустой файл с именем “4096c9ec676f2847dc283405900e284a7c815836”. Та же проблема. Видимо iTunes проверяет содержимое/размер файла.

Попытка номер три

Через SQLite Manager открываем базу данных файла и грохаем все содержимое (как в статье на Хабре). Базу сжимаем (VACUUM). Теперь это 9Мб вместо 0 и 26Мб. Заливаем на iPhone. iTunes ругается. Видимо, размер файла должен быть тот же.

Попытка номер четыре

Чистим базу, но VACUUM не вызываем – размер тот же (26 Мб). Надежда на, то что в пустых данных iPhone искать будет быстрее. Заливаем на iPhone. Та же проблема. То, чего я и боялся – iTunes сверяет хэш-сумму. Придется найти ее.

Попытка номер пять

Легенда гласит, что все хэши хранятся здесь (Manifest.mbdb, Manifest.plist). Но до расшифровки HEX значений я так и не добрался, поскольку вышел на iBackupBot. Программа позволяет экспортировать/импортировать файлы из iPhone/iPad бэкапов.


Осталось только достать новенький незамыленный consolidated.db с его хэш-суммой чтобы подменить им мой оригинальный. Такой файлик я взял с нового iPad, который недавно поселился у меня дома. С iPad-ного бекапа экспорт – в iPhone-ный бекап импорт. iTunes съел, iPhone снова летает.

Если у вас проблемы в производительностью iPhone 3G, особенно при доступе к геолокационной службе, план действий следующий. Скачиваете iBackupBot, находите новый consolidated.db и импортируете его в ваш бекап. После чего восстанавливаете iPhone из этого бекапа и еще 6-12 месяцев стабильной работы вам обеспечено. Потом процедуру придется повторить (мне так кажется).

Большое спасибо ребятам из www.icopybot.com – их триальная версия ничем не уступает платной и в ближайший год мне не понадобится.

PS

Мои перемещения по Москве за последние полтора года, внимательный зритель найдет район, где я живу (любой ай-девайсовод такую карту может составить – вот так или вот так):