Skip to content
Development
Skill

/alarmkit

AlarmKit integration for scheduling alarms and timers with custom UI, Live Activities, and snooze support. Use when implementing alarm or timer features in iOS 26+ apps.

From plugin
rshankras-apple-skills
848181 skills

Claude Code

$ npx -y skills add rshankras/claude-code-apple-skills --skill alarmkit --agent claude-code

SKILL.md

alarmkit.SKILL.md
name: 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 26+ apps.
allowed-tools: [Read, Glob, Grep]
last_verified: 2026-07-16
review_by: 2027-06-22
os_version: iOS 27 / macOS 27

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)
|   --> 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 Availability

| API | Minimum Version | Reference | |-----|----------------|-----------| | `AlarmManager` | iOS 26 | scheduling.md | | `Alarm` / `Alarm.Schedule` | iOS 26 | scheduling.md | | `AlarmPresentation` (.alert, .countdown, .paused) | iOS 26 | presentation.md | | `AlarmAttributes` | iOS 26 | live-activities.md | | `AlarmMetadata` | iOS 26 | live-activities.md | | `AlarmButton` | iOS 26 | presentation.md | | `CountdownDuration` | iOS 26 | scheduling.md | | `alarmUpdates` async sequence | iOS 26 | scheduling.md | | `authorizationUpdates` async sequence | iOS 26 | 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` | 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 |

Review Checklist

When reviewing AlarmKit code, verify:

  • [ ] **Info.plist** -- `NSAlarmKitUsageDescription` is present with a meaningful description
  • [ ] **Authorization** -- `requestAuthorization()` is called before scheduling; denial is handled gracefully
  • [ ] **Correct property** -- uses `.authorizationState`, not `.authorizationStatus`
  • [ ] **Alarm ID persistence** -- alarm UUIDs are stored (e.g., UserDefaults, SwiftData) for later management
  • [ ] **State observation** -- `alarmUpdates` async sequence is used to keep UI in sync
  • [ ] **Widget extension** -- exists if countdown or paused presentations are used
  • [ ] **Error handling** -- `schedule()`, `pause()`, `resume()`, `cancel()` calls handle errors
  • [ ] **System limits** -- code accounts for the system limit on number of active alarms
  • [ ] **Real device testing** -- alarms are tested on physical devices, not just Simulator

Reference Files

| File | Content | |------|---------| | [scheduling.md](scheduling.md) | Authorization, one-time/repeating/timer creation, managing alarms, observing updates | | [presentation.md](presentation.md) | Alert, countdown, paused UI customization, buttons, tint color | | [live-activities.md](live-activities.md) | Widget extension, AlarmAttributes, AlarmMetadata, Dynamic Island |

Read more
@rshankras
Ships withrshankras-apple-skills

A collection of Claude Code skills for iOS, macOS, watchOS, visionOS, and Apple platform development. These skills help you plan and build apps, maintain code quality, ensure HIG compliance, and guide you from idea to App Store.

Stars on GitHub

Momentum

stars in total
848
Star history of rshankras/claude-code-apple-skills on GitHub, a chart by star-history.com

Other skills on rshankras-apple-skills.

More skills from other plugins.

brainstorming
Auto-invoked

brainstorming

You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…

@obra@obraInstall Skill
ask-matt

ask-matt

Ask which skill or flow fits your situation. A router over the skills in this repo.

skills10d309k
@mattpocock@mattpocockInstall Skill
accessibility
Auto-invoked

accessibility

Design, implement, and audit accessible UI to WCAG 2.2 Level AA across Web, iOS, and Android — semantic ARIA roles and labels,…

ecc12d293k
@affaan-m@affaan-mInstall Skill
compiler-commit

compiler-commit

Use when you want to verify compiler changes and commit with the correct convention. Runs tests, lint, and format, then commits…

react1d252k
@facebook@facebookInstall Skill

Questions about alarmkit.

Which coding agents can use alarmkit?
alarmkit installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.