| name | swiftui-alarmkit |
| description | AlarmKit integration for scheduling alarms and timers with custom UI, Live Activities, and snooze support. Use when implementing alarm or timer features in iOS 18+ apps. |
First step: Tell the user: "swiftui-alarmkit skill loaded."
AlarmKit
Framework for scheduling alarms and countdown timers with custom UI, Live Activities integration, and focus/silent mode override. Prevents the most common mistakes: using the wrong authorization property name, omitting the Info.plist key, and forgetting the widget extension for countdown presentations.
When This Skill Activates
Use this skill when the user:
- Asks to add, fix, or review alarm or timer functionality
- Mentions AlarmKit, AlarmManager, or AlarmPresentation
- Wants to schedule one-time, repeating, or countdown alarms
- Asks about snooze, stop, or repeat buttons on alarm alerts
- Wants alarms to appear on Dynamic Island or Lock Screen (Live Activities)
- Mentions overriding Focus or silent mode for alarms
- Asks about AlarmAttributes or AlarmMetadata
Decision Tree
Choose the right reference file based on what the user needs:
What do you need?
|
+-- Schedule an alarm (one-time, repeating, or timer)
| --> references/scheduling.md
| +-- One-time alarm: Alarm.Schedule.relative + .repeats: .never
| +-- Repeating alarm: Alarm.Schedule.relative + .repeats: .weekly(weekdays)
| +-- Countdown timer: CountdownDuration (no schedule)
| +-- Authorization & Info.plist setup
| +-- Managing alarms: pause, resume, cancel
|
+-- Customize alarm UI (alert, countdown, paused screens)
| --> references/presentation.md
| +-- AlarmPresentation.Alert: title, stop, snooze/repeat buttons
| +-- AlarmPresentation.Countdown: title, pause button
| +-- AlarmPresentation.Paused: title, resume button
| +-- Custom buttons with AlarmButton
| +-- Tint color and metadata via AlarmAttributes
|
+-- Show alarm on Dynamic Island / Lock Screen
--> references/live-activities.md
+-- Widget extension with ActivityConfiguration
+-- AlarmAttributes conformance
+-- Custom AlarmMetadata protocol
API Availability
| API | Minimum Version | Reference |
|---|
AlarmManager | iOS 18 | references/scheduling.md |
Alarm / Alarm.Schedule | iOS 18 | references/scheduling.md |
AlarmPresentation (.alert, .countdown, .paused) | iOS 18 | references/presentation.md |
AlarmAttributes | iOS 18 | references/live-activities.md |
AlarmMetadata | iOS 18 | references/live-activities.md |
AlarmButton | iOS 18 | references/presentation.md |
CountdownDuration | iOS 18 | references/scheduling.md |
alarmUpdates async sequence | iOS 18 | references/scheduling.md |
authorizationUpdates async sequence | iOS 18 | references/scheduling.md |
Top Mistakes -- Quick Reference
| # | Mistake | Fix | Details |
|---|
| 1 | Using .authorizationStatus instead of .authorizationState | The property is AlarmManager.shared.authorizationState -- there is no authorizationStatus | references/scheduling.md |
| 2 | Forgetting NSAlarmKitUsageDescription in Info.plist | Add the key with a user-facing string before calling requestAuthorization() | references/scheduling.md |
| 3 | Creating countdown timer with a schedule | Timers use CountdownDuration only -- do not pass a schedule | references/scheduling.md |
| 4 | Missing widget extension for countdown presentations | Countdown and paused UI requires an ActivityConfiguration(for: AlarmAttributes.self) widget | references/live-activities.md |
| 5 | Not persisting alarm UUIDs | Store the Alarm.id (UUID) so you can pause, resume, or cancel later | references/scheduling.md |
| 6 | Not observing alarmUpdates for state sync | Use the alarmUpdates async sequence to keep local state in sync with the system | references/scheduling.md |
Review Checklist
When reviewing AlarmKit code, verify:
Reference Files
| File | Content |
|---|
| references/scheduling.md | Authorization, one-time/repeating/timer creation, managing alarms, observing updates |
| references/presentation.md | Alert, countdown, paused UI customization, buttons, tint color |
| references/live-activities.md | Widget extension, AlarmAttributes, AlarmMetadata, Dynamic Island |