iPhones.ru

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

slavikus avatar | 32
FavoriteLoading В закладки

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

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

Мы исследовали этот вопрос в связи с тем, что такие ситуации иногда возникают и как результат взаимодействия Русского Проекта с различными программами типа 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)

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

32 комментариев

Форум →
  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.

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

    спасибо за статью, имхо лучшая статья за посл время. пора уж образовывать народ )

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

    Мозг завис…. :)
    Теперь все стало понятно…
    Можно сказать вник внутрь яблока :)

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

    одолели демоны!

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

    Огромное спасибо автору статьи за то, что не игнорирует букву “Ё”. В отличие от некоторых.

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

    статья замечательная сама по себе, хотя много терминов мне не понятных))) ну и ладно)

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

    Спасибо большое за статью. Очень познавательно.
    Если есть желание, время и силы, пожалуйста, пишите еще. Хочется ощущать себя, хоть немного сведущим в некоторых аспектах функционирования iPhone.

    Jeremy, почему такая щепетильность в отношении к букве «ё»?

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

    Спасибо, Слава, очень интересная статья
    весьма познавательно с точки зрения на UNIX-платформы

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

    Гордость берет за наших русских ребят! Приятно осознавать, что это именно мы разработали русскую клавиатуру, с которой было “слизано” множество остальных, что именно наши программисты “правят” ошибки Apple, и вот так запросто, на простом языке могут объяснить весьма сложные вещи!
    Молодцы!

    Войди на сайт, чтобы ответить
    Ответить
  19. SergeyA avatar
    SergeyA 12 января 2008
    0

    Прочитал и не понял одной вещи.
    Допустим, что проблема понята правильно – состязания и гонки (кому не понятны термины, отсылаю к Таненбауму “Современные операционные системы”) в период загрузки.
    Как следствие этого взаимоблокировки и тупиковые ситуации.
    Проблема не решаема – если нет никакой возможности заранее узнать, захватила ли порт СБ или нет. Если такая возможность есть, то проблем как таковых не существует. Достаточно при старте той или иной программы (демона), чтобы он в цикле активного ожидания проверял факт захвата порта СБ. И если порт не захвачен – оставался в этом цикле.
    Как только порт захвачен – условие активного ожидания нарушается и программа (демон) начинает стартовать дальше.

    Войди на сайт, чтобы ответить
    Ответить
  20. Jon-Gul avatar
    Jon-Gul 12 января 2008
    0

    Насчет буквы “Ё” мне тоже понравилось

    Войди на сайт, чтобы ответить
    Ответить
  21. VintyK avatar
    VintyK 12 января 2008
    0

    спасибо за пост !
    в мемориз !

    Войди на сайт, чтобы ответить
    Ответить
  22. slavikus avatar
    slavikus 12 января 2008
    0

    SergeyA, основная загвоздка в том, что порт захватывается не самим демоном сознательно, а библиотекой, с которой он линкуется. Поэтому вышеупомянутая проблема вообще не известна авторам демонов =))

    Она решается ещё проще – при старте демону нужно передавать в аргументах –launchedFromSB – и тогда UIKit не пытается открыть этот порт. Это можно сделать, слегка подредактировав plist файл демона в /Library/LaunchDaemons.

    Войди на сайт, чтобы ответить
    Ответить
  23. Vovchik avatar
    Vovchik 12 января 2008
    0

    slavikus, поподробнее. Что, как и на что надо подредактировать. Что вы все недомолвками говорите. Сказал А, говори сразу Б.

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

    Это на тему, давайте бороться с пользовательским произволом по вмешательству в фон! хехехехе. Давайте объясним как нужно редактировать и править файлы, чуть позже поясним как можно и попатчить, а потом дружно будем объяснять как с этим бороться и писать гневные статьи о желании пользователя вмешаться не только в интерфейс(!!!!) а уже и совсем в ОСь!!!!!
    Слава, прекрати объяснения.

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

    почему нет ?
    я думаю что чем больше информации об internals в простом и понятном виде – тем лучше.

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

    Потому что мы по опыту знаем: 70% прочитавших побегут пробовать и править. Причем сделано это будет почти всеми неправильно, и фон начнет хрюкать…….. Все закончится тем что те кто на форуме помогает и подсказывает погрязнут в ответах на вопросы…….. А ответ один: не профи, не разработчик? Пользователь? НЕ ЛЕЗЬ ВНУТРЬ НОГАМИ!

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

    А с момента “передать аргумент лаунчедфромсб” можно поподробнее?, да, Скорп! я очень хочу сделать рестор……;-)

    Войди на сайт, чтобы ответить
    Ответить
  28. slavikus avatar
    slavikus 13 января 2008
    0

    А, собственно говоря, почему недомолвками? Я уже сказал и А, и Б. Дальше пожалуйста, сами – есть описаловка launchd и формата plist’ов для него, посмотреть, как в plist добавить аргумент для процесса – не так и сложно. =)

    Да и я уже говорил, что при добавлении ключа могут появится забавные side effects, которые могу помешать нормальной работе демона – в частности, невозможность показа окошек из него (демон и не должен показывать никаких окошек, но гениальные программописатели это как-то игнорируют).

    В общем, открывайте plist для демона и смотрите – там всё просто. Но на свой страх и риск. =)

    Войди на сайт, чтобы ответить
    Ответить
  29. dmPalets avatar
    dmPalets 13 января 2008
    0

    помыл руки
    прочитал мантру
    протер стекло замшей
    пошел править plist-ы
    :-)

    Войди на сайт, чтобы ответить
    Ответить
  30. Dalexus avatar
    Dalexus 19 апреля 2008
    0

    мне нифига плисты не помагали…. Тьфу-тьфу – счас стабильно пашет.

    Войди на сайт, чтобы ответить
    Ответить
  31. DSC avatar
    DSC 26 апреля 2008
    0

    IPhone в наше хакерское время всегда останется игрушкой НЕ для блондинок;)
    >”…читайте, если Вам интересно, но имейте в виду, что оно, возможно, может представлять некоторые сложности для понимания. =)…”
    Для нормально образованных инженеров,специальность которых хоть как-то связана с IT,это – сущий пустячёк:)))Можно было даже больше нагрузить статейку…А тем,кто в чём-то хочет разобраться,советую не кричать:”Майн Годдд,я не поняЛА)))” или “Объясните блАндинке)”!=) Листайте книжки,образовывайтесь,а уж потом кричите О своём бедствии)))А то у нас народ ленивый пошёл…Хотят всё на блюдечке с голубой каёмочкой,а сами для этого минимум усилий прилагают:)
    ЗЫ:Сложности закаляют людей,делая из них настоящих асов своего дела!
    ЗЫЫ:статья написана ДАЖЕ более,чем понятно:)

    Войди на сайт, чтобы ответить
    Ответить
  32. drug_max avatar
    drug_max 3 июня 2008
    0

    Спасибо за статью, очень интересно !!! :) хех лезть и чет переделывать не собираюсь, слава яйцам что все работает отлично (с тех пор как установил РП и Катю) сбасибо ребятам из RipDEV :), ждемс обновлений софта))))

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

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

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