skills/swiftui/alarmkit/SKILL.md
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.
npx skillsauth add rshankras/claude-code-apple-skills alarmkitInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
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.
Use this skill when the user:
Choose the right reference file based on what the user needs:
What do you need?
|
+-- Schedule an alarm (one-time, repeating, or timer)
| --> 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)
| --> 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
--> live-activities.md
+-- Widget extension with ActivityConfiguration
+-- AlarmAttributes conformance
+-- Custom AlarmMetadata protocol
| API | Minimum Version | Reference |
|-----|----------------|-----------|
| AlarmManager | iOS 18 | scheduling.md |
| Alarm / Alarm.Schedule | iOS 18 | scheduling.md |
| AlarmPresentation (.alert, .countdown, .paused) | iOS 18 | presentation.md |
| AlarmAttributes | iOS 18 | live-activities.md |
| AlarmMetadata | iOS 18 | live-activities.md |
| AlarmButton | iOS 18 | presentation.md |
| CountdownDuration | iOS 18 | scheduling.md |
| alarmUpdates async sequence | iOS 18 | scheduling.md |
| authorizationUpdates async sequence | iOS 18 | scheduling.md |
| # | Mistake | Fix | Details |
|---|---------|-----|---------|
| 1 | Using .authorizationStatus instead of .authorizationState | The property is AlarmManager.shared.authorizationState -- there is no authorizationStatus | scheduling.md |
| 2 | Forgetting NSAlarmKitUsageDescription in Info.plist | Add the key with a user-facing string before calling requestAuthorization() | scheduling.md |
| 3 | Creating countdown timer with a schedule | Timers use CountdownDuration only -- do not pass a schedule | scheduling.md |
| 4 | Missing widget extension for countdown presentations | Countdown and paused UI requires an ActivityConfiguration(for: AlarmAttributes.self) widget | live-activities.md |
| 5 | Not persisting alarm UUIDs | Store the Alarm.id (UUID) so you can pause, resume, or cancel later | scheduling.md |
| 6 | Not observing alarmUpdates for state sync | Use the alarmUpdates async sequence to keep local state in sync with the system | scheduling.md |
When reviewing AlarmKit code, verify:
NSAlarmKitUsageDescription is present with a meaningful descriptionrequestAuthorization() is called before scheduling; denial is handled gracefully.authorizationState, not .authorizationStatusalarmUpdates async sequence is used to keep UI in syncschedule(), pause(), resume(), cancel() calls handle errors| File | Content | |------|---------| | scheduling.md | Authorization, one-time/repeating/timer creation, managing alarms, observing updates | | presentation.md | Alert, countdown, paused UI customization, buttons, tint color | | live-activities.md | Widget extension, AlarmAttributes, AlarmMetadata, Dynamic Island |
development
Build, install, and launch an iOS app on a physical iPhone or iPad entirely from the command line (no Xcode GUI), using xcodebuild + devicectl. Use when the user wants to run, test, or screenshot their app on a real device without opening Xcode.
development
Comprehensive iOS development guidance including Swift best practices, SwiftUI patterns, UI/UX review against HIG, and app planning. Use for iOS code review, best practices, accessibility audits, or planning new iOS apps.
development
Build, install, launch, and screenshot an iOS app in the Simulator to verify a change visually. Use when the user wants to run the app, see a change live, screenshot the running app, or confirm a UI fix actually works (not just that it compiles).
development
Audits skills in this repo for consistency, API drift, and structural gaps. Produces a prioritized report grouped by severity (Critical/High/Medium/Low). Use when asked to "audit skills", "check the skill repo for drift", or when planning bulk skill cleanup. Read-only — does not apply fixes.