Добавить объявление

Работаем с таймерами через AlarmKit: новый фреймворк Apple

На 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 - мощный инструмент для создания надежных таймеров, но требует настройки нескольких компонентов. Идеально для кулинарных таймеров, напоминаний и любых приложений, где важно точное время.
28.08.2025 9 434