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