Джерело
BW Swift | Як AlarmKit працює «під капотом»? - автор Jacob BartlettЯкщо ти коли-н...
797 Охват/переглядів
2025-11-04 11:34
Повідомлення №2228
⏰Як AlarmKit працює «під капотом»? - автор Jacob BartlettЯкщо ти коли-небудь переживав сонний параліч, то знай: AlarmKit значною мірою працює на тому ж принципі під капотом — демонах.Демони — це системні програми, що працюють у фоновому режимі. В iOS вони забезпечують роботу ключових сервісів, таких як головний екран (SpringBoard), обробка сенсорних і рухових подій з апаратного забезпечення (backboardd), відтворення аудіо й відео (mediaserverd) та служби локації (locationd).Демон також відповідає за роботу будильників в iOS, як у AlarmKit, так і у стандартному застосунку Clock.Основна функціональність будильників у застосунку «Годинник» забезпечується фреймворком MobileTimer.framework. Цей фреймворк містить повну логіку роботи таймерів і будильників. Якщо скористатися classdump-dyld або RuntimeBrowser, можна згенерувати повний заголовковий інтерфейс для будильників у файл заголовків Alarm.h.Цей інтерфейс дуже схожий на параметри планування AlarmKit, які ми розглянемо далі, тому можна досить упевнено стверджувати, що і Clock, і AlarmKit побудовані поверх цього фреймворка. Тож, імовірно, у подальшому ми можемо розглядати їх як взаємозамінні.Застосунок «Годинник» має приватне право (entitlement) com.apple.private.mobiletimerd, яке дає йому дозволи на взаємодію з демоном мобільного таймера (який, своєю чергою, імпортує MobileTimer.framework). Ця привілейована програма постійно працює у фоні, відстежує будильники, заплановані через фреймворк, планує їх виконання та активує їх, викликаючи _fireScheduledAlarm().Коли будильник спрацьовує, він наказує SpringBoard перервати все, що відбувається, і показати інтерфейс будильника. Будильники мають особливі системні привілеї: • Вони ігнорують беззвучний режим. • Використовують приватну аудіосесію AVKit, щоб обходити вимкнення звуку. • Вони внесені у список винятків для режимів фокусування, таких як «Не турбувати» чи «Фокус сну».BWSwift 📱 YouTube 📱 Patreon