Войти

Или войди с помощью

Яблоко в ромашках: любит, не любит…

slavikus avatar |

Яблоко в ромашках

Многие из нас сталкивались с проблемой, когда после установки некоторого количества программ, телефон перестаёт загружаться — висит на заставке с яблочком с «ромашкой» поверх. Иногда телефон таки умудряется запустится через несколько часов лежания.

Мы исследовали этот вопрос в связи с тем, что такие ситуации иногда возникают и как результат взаимодействия Русского Проекта с различными программами типа MobileScrobber, Dock, Screenshot и других.

Далее достаточно «технологичное» объяснение одной из причин таких ситуаций — читайте, если Вам интересно, но имейте в виду, что оно, возможно, может представлять некоторые сложности для понимания. =)

В системе (как практически и во всех других) предусмотрены «демоны», процессы, которые загружаются с системой и висят в фоновом режиме. В случае с iPhone такими демонами (от сторонних разработчиков) является ssh, Dock, Screenshot, Scrobber, и т.п.

Практически все (кроме ssh) из них написаны на Objective-C, с применением UIKit (системной библиотеки, отвечающей за вывод GUI, и обслуживающей программы, написаные на Objective-C).

Продолжаем. В системе есть понятие системного порта, в который идут различные оповещения об изменении уровня яркости дисплей, входа/выхода из режима Sleep, и тп. Этим портом по умолчанию «владеет» SpringBoard.app, и работать без него отказывается. Однако, когда запускаются сторонние демоны, использующие UIKit, они пытаются открыть этот порт под себя (точнее, UIKit пытается). Если SpringBoard умудрилась запуститься раньше, и «подмять» его под себя, всё хорошо — система возвращает уже открытый порт демону, все довольны. Однако, если по какой-то причине SpringBoard запустилась чуть позже одного из демонов (а процесс запуска их всех идет параллельно — кто быстрее, тот и прав), наступает Полная Попа, в просторечии именуемая «яблочко с ромашкой при загрузке»: SpringBoard пытается открыть нужный ей порт с правами владения, жестко обламывается (порт уже открыт другим демоном, например, Dock), и завершается. Системный сервис launchd, который отвечает за запуск приложений при старте системы, видит, что SpringBoard завершился, и запускает его снова. И так до тех пор, пока каким-то чудом (часов через 12) SpringBoard не получит-таки в личное пользование этот злосчастный порт (если демон, который успел его захватить первым, по какой-то причине самозавершится, что, слава богу, благодаря количеству глюков в оных, не редкое явление).

Почему всё это происходит? Apple явно не рассчитывали, что демоны будут написаны на Objective-C с использованием UIKit. Есть обходной манёвр, который запрещает демонам пытаться захватить системный порт сообщений, но его должны реализовывать авторы демонов (или нужно править .plist в /Library/LaunchDaemons).

Тонкие связи

При чем тут Русский Проект, спросите вы? А при том, что поскольку мы не меняем системных файлов, а делаем всё динамически в памяти при запуске SpringBoard, это отнимает несколько миллисекунд, которые оказываются фатальными — другие сервисы успевают запуститься раньше. Вся описанная ситуация может случаться (и случается) и без наших продуктов вообще, но все-таки реже.

В будущем обновлении мы радикально переделали то, как добавляются наши изменения в памяти, и запуск SpringBoard теперь практически не задерживается. Потому рекомендую обновиться, когда апдейт таки выйдет.


И на закуску, что делать, если это всё-таки произошло, ваш любимый телефон предлагает погадать с ним на ромашке о любви, и у Вас есть доступ к нему через iPhone Browser или SSH.

Самый радикальный и простой способ — удалить все . plist файлы из папки /Library/LaunchDaemons, кроме com. openssh. sshd. plist — это SSH, и такой конфликт вызывать он не может. После чего в 99 случаях из 100, ваш телефон запустится.

plist file

А более сложный способ, который в теории должны делать авторы демонов, требует небольшого редактирования тех же . plist файлов… если интересно, я его расскажу. В таком случае функциональность установленных приложений с демонами останется, но вот только я не знаю, насколько это отразится на каждом конкретном приложении — в теории, это может помешать ему выводить собственные окна на экран (оно и не должно, оно же демон, но вдруг кто-то попытается?..)


Человеку нашего века вообще свойственна привязанность к железкам — будь то автомобиль, компьютер, или такое устройство, как iPhone. Поэтому неудивительно, что некоторые из них начинают себя вести не очень адекватно — балуем мы их? Потому давайте относиться к своему питомцу построже и не ставить на него всё подряд, не думая о последствиях. А любовь к своему телефону мы покажем и без дурацкого гадания на ромашке, не так ли?

Слава Карпенко (RiP Dev Team)

32
undefined
iPhones.ru
Многие из нас сталкивались с проблемой, когда после установки некоторого количества программ, телефон перестаёт загружаться — висит на заставке с яблочком с «ромашкой» поверх. Иногда телефон таки умудряется запустится через несколько часов лежания. Мы исследовали этот вопрос в связи с тем, что такие ситуации иногда возникают и как результат взаимодействия Русского Проекта с различными программами типа MobileScrobber, Dock, Screenshot и других. Далее достаточно «технологичное» объяснение одной из причин...

Войди и оставь комментарий

Или войди с помощью

<- Назад Забыли пароль? Войти
  1. naderevnudedu avatar
    naderevnudedu 11 января 2008
    0

    Спасибо, оч. интересно!
    Слава, может пора уже Мануал/методичку выпустить, от RipDev.
    кроме меня, еще покупатели найдутся?!

    Войди на сайт, чтобы ответить
    Ответить
  2. hackins avatar
    hackins 11 января 2008
    0

    а мне картинки понравились………;-)

    Войди на сайт, чтобы ответить
    Ответить
  3. Iskander avatar
    Iskander 11 января 2008
    0

    Мне кажется, что мануал уже начал писаться на форуме в разделе FAQ. А что касается статьи, то еще раз убеждаюсь – не зря денег платил за пакет русификации. Ребята работают! И работают отлично. Вот если бы они еще и за другие проекты взялись с функционалом типа Customize, SummerBoard, MMS, готов с удовольствием приобретать их продукты, потому что знаю – будет работать как надо!

    Войди на сайт, чтобы ответить
    Ответить
  4. --aleksander-- avatar
    --aleksander-- 11 января 2008
    0

    а я бы аську купил….. думаю аську нормальную огромное количество людей купили бы !!!

    Войди на сайт, чтобы ответить
    Ответить
  5. naderevnudedu avatar
    naderevnudedu 11 января 2008
    0

    +1 работает и работают
    Мануал после SDK будет актуален.
    Может народ начнет задумываться что ставить и что покупать.

    Войди на сайт, чтобы ответить
    Ответить
  6. SeaBreeze avatar
    SeaBreeze 11 января 2008
    0

    > Есть обходной манёвр, который запрещает демонам пытаться захватить системный порт сообщений

    Полцарства за маневр! У меня большие траблы с деланием скриншотов :)

    Войди на сайт, чтобы ответить
    Ответить
  7. Scorpios33 avatar
    Scorpios33 11 января 2008
    0

    На форуме мы старались просто сказать что делать не надо и что мы не всегда виноваты, как и Эппл. Здесь подробно и профессионально.

    Войди на сайт, чтобы ответить
    Ответить
  8. proforg avatar
    proforg 11 января 2008
    0

    Scrobbler кстати в последней версии запускается со специальной задержкой :) для решения подобных ситуаций

    Войди на сайт, чтобы ответить
    Ответить
  9. zarkad avatar
    zarkad 11 января 2008
    0

    Очень доступно и понятно написано про демонов – спасибо.
    Отсюда просьба – пишите почаще такие статьи, если на то будет ваше желание. Сэкономите народу килограммы нервов!.

    Войди на сайт, чтобы ответить
    Ответить
  10. bura avatar
    bura 11 января 2008
    0

    >SpringBoard пытается открыть нужный ей порт с правами владения, жестко обламывается
    У меня как раз после установки РП начались такие грабли, если следить за загрузкой, то видно как иФон по несколько раз перезагружается. Но отчетливо это видно при загрузке в verbose mode.

    Войди на сайт, чтобы ответить
    Ответить
Помни о правилах — если начал оффтопить, то не удивляйся потом.

Нашли орфографическую ошибку в новости?

Выделите ее мышью и нажмите Ctrl+Enter.