Многие из нас сталкивались с проблемой, когда после установки некоторого количества программ, телефон перестаёт загружаться висит на заставке с яблочком с «ромашкой» поверх. Иногда телефон таки умудряется запустится через несколько часов лежания.
Мы исследовали этот вопрос в связи с тем, что такие ситуации иногда возникают и как результат взаимодействия
Далее достаточно «технологичное» объяснение одной из причин таких ситуаций читайте, если Вам интересно, но имейте в виду, что оно, возможно, может представлять некоторые сложности для понимания. =)
В системе (как практически и во всех других) предусмотрены «демоны», процессы, которые загружаются с системой и висят в фоновом режиме. В случае с 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 файлов если интересно, я его расскажу. В таком случае функциональность установленных приложений с демонами останется, но вот только я не знаю, насколько это отразится на каждом конкретном приложении в теории, это может помешать ему выводить собственные окна на экран (оно и не должно, оно же демон, но вдруг кто-то попытается?..)
Человеку нашего века вообще свойственна привязанность к железкам будь то автомобиль, компьютер, или такое устройство, как iPhone. Поэтому неудивительно, что некоторые из них начинают себя вести не очень адекватно балуем мы их? Потому давайте относиться к своему питомцу построже и не ставить на него всё подряд, не думая о последствиях. А любовь к своему телефону мы покажем и без дурацкого гадания на ромашке, не так ли?
Слава Карпенко (RiP Dev Team)
32 комментариев
Форум →Спасибо, оч. интересно!
Слава, может пора уже Мануал/методичку выпустить, от RipDev.
кроме меня, еще покупатели найдутся?!
а мне картинки понравились………;-)
Мне кажется, что мануал уже начал писаться на форуме в разделе FAQ. А что касается статьи, то еще раз убеждаюсь – не зря денег платил за пакет русификации. Ребята работают! И работают отлично. Вот если бы они еще и за другие проекты взялись с функционалом типа Customize, SummerBoard, MMS, готов с удовольствием приобретать их продукты, потому что знаю – будет работать как надо!
а я бы аську купил….. думаю аську нормальную огромное количество людей купили бы !!!
+1 работает и работают
Мануал после SDK будет актуален.
Может народ начнет задумываться что ставить и что покупать.
> Есть обходной манёвр, который запрещает демонам пытаться захватить системный порт сообщений
Полцарства за маневр! У меня большие траблы с деланием скриншотов :)
На форуме мы старались просто сказать что делать не надо и что мы не всегда виноваты, как и Эппл. Здесь подробно и профессионально.
Scrobbler кстати в последней версии запускается со специальной задержкой :) для решения подобных ситуаций
Очень доступно и понятно написано про демонов – спасибо.
Отсюда просьба – пишите почаще такие статьи, если на то будет ваше желание. Сэкономите народу килограммы нервов!.
>SpringBoard пытается открыть нужный ей порт с правами владения, жестко обламывается
У меня как раз после установки РП начались такие грабли, если следить за загрузкой, то видно как иФон по несколько раз перезагружается. Но отчетливо это видно при загрузке в verbose mode.
спасибо за статью, имхо лучшая статья за посл время. пора уж образовывать народ )
Мозг завис…. :)
Теперь все стало понятно…
Можно сказать вник внутрь яблока :)
одолели демоны!
Огромное спасибо автору статьи за то, что не игнорирует букву “Ё”. В отличие от некоторых.
статья замечательная сама по себе, хотя много терминов мне не понятных))) ну и ладно)
Спасибо большое за статью. Очень познавательно.
Если есть желание, время и силы, пожалуйста, пишите еще. Хочется ощущать себя, хоть немного сведущим в некоторых аспектах функционирования iPhone.
Jeremy, почему такая щепетильность в отношении к букве «ё»?
Спасибо, Слава, очень интересная статья
весьма познавательно с точки зрения на UNIX-платформы
Гордость берет за наших русских ребят! Приятно осознавать, что это именно мы разработали русскую клавиатуру, с которой было “слизано” множество остальных, что именно наши программисты “правят” ошибки Apple, и вот так запросто, на простом языке могут объяснить весьма сложные вещи!
Молодцы!
Прочитал и не понял одной вещи.
Допустим, что проблема понята правильно – состязания и гонки (кому не понятны термины, отсылаю к Таненбауму “Современные операционные системы”) в период загрузки.
Как следствие этого взаимоблокировки и тупиковые ситуации.
Проблема не решаема – если нет никакой возможности заранее узнать, захватила ли порт СБ или нет. Если такая возможность есть, то проблем как таковых не существует. Достаточно при старте той или иной программы (демона), чтобы он в цикле активного ожидания проверял факт захвата порта СБ. И если порт не захвачен – оставался в этом цикле.
Как только порт захвачен – условие активного ожидания нарушается и программа (демон) начинает стартовать дальше.
Насчет буквы “Ё” мне тоже понравилось
спасибо за пост !
в мемориз !
SergeyA, основная загвоздка в том, что порт захватывается не самим демоном сознательно, а библиотекой, с которой он линкуется. Поэтому вышеупомянутая проблема вообще не известна авторам демонов =))
Она решается ещё проще – при старте демону нужно передавать в аргументах –launchedFromSB – и тогда UIKit не пытается открыть этот порт. Это можно сделать, слегка подредактировав plist файл демона в /Library/LaunchDaemons.
slavikus, поподробнее. Что, как и на что надо подредактировать. Что вы все недомолвками говорите. Сказал А, говори сразу Б.
Это на тему, давайте бороться с пользовательским произволом по вмешательству в фон! хехехехе. Давайте объясним как нужно редактировать и править файлы, чуть позже поясним как можно и попатчить, а потом дружно будем объяснять как с этим бороться и писать гневные статьи о желании пользователя вмешаться не только в интерфейс(!!!!) а уже и совсем в ОСь!!!!!
Слава, прекрати объяснения.
почему нет ?
я думаю что чем больше информации об internals в простом и понятном виде – тем лучше.
Потому что мы по опыту знаем: 70% прочитавших побегут пробовать и править. Причем сделано это будет почти всеми неправильно, и фон начнет хрюкать…….. Все закончится тем что те кто на форуме помогает и подсказывает погрязнут в ответах на вопросы…….. А ответ один: не профи, не разработчик? Пользователь? НЕ ЛЕЗЬ ВНУТРЬ НОГАМИ!
А с момента “передать аргумент лаунчедфромсб” можно поподробнее?, да, Скорп! я очень хочу сделать рестор……;-)
А, собственно говоря, почему недомолвками? Я уже сказал и А, и Б. Дальше пожалуйста, сами – есть описаловка launchd и формата plist’ов для него, посмотреть, как в plist добавить аргумент для процесса – не так и сложно. =)
Да и я уже говорил, что при добавлении ключа могут появится забавные side effects, которые могу помешать нормальной работе демона – в частности, невозможность показа окошек из него (демон и не должен показывать никаких окошек, но гениальные программописатели это как-то игнорируют).
В общем, открывайте plist для демона и смотрите – там всё просто. Но на свой страх и риск. =)
помыл руки
прочитал мантру
протер стекло замшей
пошел править plist-ы
:-)
мне нифига плисты не помагали…. Тьфу-тьфу – счас стабильно пашет.
IPhone в наше хакерское время всегда останется игрушкой НЕ для блондинок;)
>”…читайте, если Вам интересно, но имейте в виду, что оно, возможно, может представлять некоторые сложности для понимания. =)…”
Для нормально образованных инженеров,специальность которых хоть как-то связана с IT,это – сущий пустячёк:)))Можно было даже больше нагрузить статейку…А тем,кто в чём-то хочет разобраться,советую не кричать:”Майн Годдд,я не поняЛА)))” или “Объясните блАндинке)”!=) Листайте книжки,образовывайтесь,а уж потом кричите О своём бедствии)))А то у нас народ ленивый пошёл…Хотят всё на блюдечке с голубой каёмочкой,а сами для этого минимум усилий прилагают:)
ЗЫ:Сложности закаляют людей,делая из них настоящих асов своего дела!
ЗЫЫ:статья написана ДАЖЕ более,чем понятно:)
Спасибо за статью, очень интересно !!! :) хех лезть и чет переделывать не собираюсь, слава яйцам что все работает отлично (с тех пор как установил РП и Катю) сбасибо ребятам из RipDEV :), ждемс обновлений софта))))
Нашли орфографическую ошибку в новости?
Выделите ее мышью и нажмите Ctrl+Enter.Что означает ошибка «Профиль приложения больше не доступен» в iOS
Как отключить автоматический запуск музыкального плеера на Apple Watch
Почему не срабатывает переключение языка клавиатуры в macOS
Как удалить джейлбрейк iOS 12.4
Почему в Safari на iPhone не отображаются вкладки с других устройств
Как на iPhone или Mac отключить звук в Live-фото
Что делать, если iPhone «застрял» в режиме наушников
Как в macOS Sonoma изменить настройки DNS и Proxy