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

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 и других. Далее достаточно «технологичное» объяснение одной из причин...
Прокомментировать

🙈 Комментарии 32

  1. naderevnudedu avatar
    naderevnudedu11 января 2008
    0

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

  2. hackins avatar
    hackins11 января 2008
    0

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

  3. Iskander avatar
    Iskander11 января 2008
    0

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

  4. --aleksander-- avatar
    --aleksander--11 января 2008
    0

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

  5. naderevnudedu avatar
    naderevnudedu11 января 2008
    0

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

  6. SeaBreeze avatar
    SeaBreeze11 января 2008
    0

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

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

  7. Scorpios33 avatar
    Scorpios3311 января 2008
    0

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

  8. proforg avatar
    proforg11 января 2008
    0

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

  9. zarkad avatar
    zarkad11 января 2008
    0

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

  10. bura avatar
    bura11 января 2008
    0

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

  11. stmamont avatar
    stmamont11 января 2008
    0

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

  12. gumoza avatar
    gumoza11 января 2008
    0

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

  13. Vafers avatar
    Vafers11 января 2008
    0

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

  14. Jeremy avatar
    Jeremy11 января 2008
    0

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

  15. Windland avatar
    Windland11 января 2008
    0

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

  16. c0nnstance avatar
    c0nnstance11 января 2008
    0

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

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

  17. dmPalets avatar
    dmPalets11 января 2008
    0

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

  18. Gyry avatar
    Gyry11 января 2008
    0

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

  19. SergeyA avatar
    SergeyA12 января 2008
    0

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

  20. Jon-Gul avatar
    Jon-Gul12 января 2008
    0

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

  21. VintyK avatar
    VintyK12 января 2008
    0

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

  22. slavikus avatar
    slavikus12 января 2008
    0

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

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

  23. Vovchik avatar
    Vovchik12 января 2008
    0

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

  24. Scorpios33 avatar
    Scorpios3312 января 2008
    0

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

  25. proforg avatar
    proforg13 января 2008
    0

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

  26. Scorpios33 avatar
    Scorpios3313 января 2008
    0

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

  27. hackins avatar
    hackins13 января 2008
    0

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

  28. slavikus avatar
    slavikus13 января 2008
    0

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

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

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

  29. dmPalets avatar
    dmPalets13 января 2008
    0

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

  30. Dalexus avatar
    Dalexus19 апреля 2008
    0

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

  31. DSC avatar
    DSC26 апреля 2008
    0

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

  32. drug_max avatar
    drug_max3 июня 2008
    0

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

Вы должны авторизоваться или зарегистрироваться для комментирования.

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

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

Как установить аватар в комментариях?

Ответ вот здесь