На WWDC 2025 представили AlarmKit — фреймворк для создания будильников и таймеров, которые работают даже в беззвучном режиме и при активном Focus. В отличие от обычных уведомлений, AlarmKit всегда показывает баннер и воспроизводит звук!
1️⃣ Запрос разрешения.
Добавим в Info.plist ключ NSAlarmKitUsageDescription с описанием, зачем приложению нужны таймеры. Затем запросим авторизацию:
import AlarmKit
let manager = AlarmManager.shared
let state = try await manager.requestAuthorization()
2️⃣ Настройка таймера.
Создадим кастомизированный алерт и атрибуты:
let alert = AlarmPresentation.Alert(
title: "Готово!",
stopButton: AlarmButton(text: "Готово", systemImageName: "checkmark")
)
let attributes = AlarmAttributes<TimerData>(
presentation: AlarmPresentation(alert: alert),
tintColor: .blue
)
let timer = try await manager.schedule(
id: UUID(),
configuration: .timer(duration: 30, attributes: attributes)
)
3️⃣ Live Activity и Dynamic Island.
Добавим виджет для отображения обратного отсчета на экране блокировки и в Dynamic Island:
// В виджете:
Text(timerInterval: Date.now...countdown.fireDate)
.monospacedDigit()
4️⃣ Список активных таймеров.
Использование alarmUpdates для отслеживания состояния:
for await alarms in AlarmManager.shared.alarmUpdates {
// Обновляем список таймеров
}
⚠️ Практические советы.
🔹 Всегда проверяйте статус авторизации authorizationState перед планированием.
🔹 Используйте кастомные метаданные через AlarmMetadata для передачи дополнительной информации.
🔹 Для паузы/возобновления используйте методы pause() и resume().
🔹 Обрабатывайте ошибки отмены через try-catch.
❌ Важные ограничения.
🔸 Максимальное количество активных будильников: 50 на устройство.
🔸 Минимальная длительность таймера: 1 секунда.
🔸 Максимальная длительность: 23 часа 59 минут 59 секунд.
💡 Вывод:
AlarmKit — мощный инструмент для создания надежных таймеров, но требует настройки нескольких компонентов. Идеально для кулинарных таймеров, напоминаний и любых приложений, где важно точное время.
➡️ Подписаться на канал
Мобильный трудоголик