Посвящается всем маньякам, которые, подобно мне, устанавливают на свой айпод все приложения подряд
В один прекрасный момент плеер перестанет загружаться (у меня это случилось после 400-ого приложения).
Это происходит из-за того, что при загрузке плеера создаётся некий кэш установленных приложений. Если приложений много, то этот процесс затягивается. А в это время загруженный демон по кличке MobileWatchDog проверяет, не завис ли SpringBoard. И когда SpringBoard очень занят созданием кэша, он не отвечает вовремя и WatchDog инициирует перезагрузку девайса, вызывая Kernel Panic с причиной WD Timeout (логи этих ошибок можно найти в
/private/var/logs/CrashReporter/Panics/).
WatchDog находится в
/System/Library/SystemConfiguration/mobilewatchdog.bundle, этот бандл стартует при автоматической загрузке демона configd.
Если плеер стал постоянно перезагружаться сразу после включения, то можно переименовать папку бандла, загрузить плеер, он создаст кэш, потом вернуть название папки обратно и снова перезагрузить. Тогда автоперезагрузки прекратятся, но только до того момента, как будет установлено новое приложение.
Поэтому я сделал иначе - установил задержку перед запуском WatchDog-а, что позволяет дать время на создание кэша для любого количества приложений. Совсем выключить WatchDog нельзя, т.к. существует ещё железный WatchDog и если он через несколько минут (вроде 6 или 10) не обнаруживает своего программного собрата, он делает плееру рестарт
Итак, что нужно для создания задержки:
1. Создать файл
com.apple.configdwd.plist следующего содержания:
Код:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.apple.configdwd</string>
<key>Program</key>
<string>/etc/delaywd</string>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
Сохранить его в Unix Text кодировке и скопировать в папку на плеере
/System/Library/LaunchDaemons/, установив права
06442. Переименовать бандл
mobilewatchdog.bundle в папке
/System/Library/SystemConfiguration/ на
mobilewatchdog.no_bundle3. Создать файл
delaywd и кинуть в папку
/etc/. Кодировка файла - Unix Text, права
0755, содержимое:
Код:
#!/bin/bash
sleep 120
/usr/sbin/configd -t /System/Library/SystemConfiguration/mobilewatchdog.no_bundle & exit
4. Перезагрузить плеер. WatchDog будет запущен на 120 секунд позже, величину можно менять как угодно, но не более 6-10 минут естественно.
З.Ы. Во всех создаваемых файлах нужно оставлять в конце перенос на новую строку