关于 alarmkit
alarmkit 是用于实现和审查 AlarmKit 闹钟与计时器的编码技能,按调度、呈现和 Live Activities 整理参考,并提示常见配置与状态管理问题。
主要功能
- 01一次性、重复及倒计时调度
- 02闹钟授权与配置指引
- 03提醒界面和按钮定制
- 04Live Activities 与 Widget 扩展指引
- 05常见错误审查清单
适用场景
- 01为应用添加闹钟或计时器
- 02审查 AlarmKit 授权和调度代码
- 03在锁定屏幕或 Dynamic Island 显示倒计时
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ rshankras/ claude-code-apple-skills --skill alarmkit安装后在 Claude Code 中输入/alarmkit确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
live-activities.mdpresentation.mdscheduling.md详细介绍
AlarmKit
用于安排闹钟和倒计时器的框架,支持自定义 UI、集成实时活动,以及覆盖专注模式/静音模式。可避免最常见的错误:使用错误的授权属性名称、遗漏 Info.plist 键,以及忘记为倒计时展示添加小组件扩展。
此技能的触发条件
在用户遇到以下情况时使用此技能:
- 要求添加、修复或检查闹钟或计时器功能
- 提及 AlarmKit、AlarmManager 或 AlarmPresentation
- 希望安排一次性、重复或倒计时闹钟
- 询问闹钟提醒上的稍后提醒、停止或重复按钮
- 希望闹钟显示在 Dynamic Island 或锁定屏幕上(实时活动)
- 提及为闹钟覆盖专注模式或静音模式
- 询问 AlarmAttributes 或 AlarmMetadata
决策树
根据用户的需求选择合适的参考文件:
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 可用性
| API | 最低版本 | 参考文件 |
|---|---|---|
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 |
常见错误——快速参考
| # | 错误 | 修复方法 | 详情 |
|---|---|---|---|
| 1 | 使用 .authorizationStatus 而非 .authorizationState | 属性是 AlarmManager.shared.authorizationState,不存在 authorizationStatus | scheduling.md |
| 2 | 忘记在 Info.plist 中添加 NSAlarmKitUsageDescription | 调用 requestAuthorization() 前,添加该键并设置面向用户的说明文字 | scheduling.md |
| 3 | 创建倒计时器时使用了日程安排 | 计时器只使用 CountdownDuration,不要传入日程安排 | scheduling.md |
| 4 | 倒计时展示缺少小组件扩展 | 倒计时和暂停状态的 UI 需要一个 ActivityConfiguration(for: AlarmAttributes.self) 小组件 | live-activities.md |
| 5 | 未持久化闹钟 UUID | 保存 Alarm.id(UUID),以便之后暂停、恢复或取消闹钟 | scheduling.md |
| 6 | 未监听 alarmUpdates 以同步状态 | 使用 alarmUpdates 异步序列,让本地状态与系统保持同步 | scheduling.md |
检查清单
检查 AlarmKit 代码时,请确认:
- Info.plist——存在
NSAlarmKitUsageDescription,且说明内容有意义 - 授权——安排闹钟前调用
requestAuthorization();妥善处理用户拒绝授权的情况 - 正确的属性——使用
.authorizationState,而非.authorizationStatus - 闹钟 ID 持久化——保存闹钟 UUID(例如使用 UserDefaults、SwiftData),以便之后管理
- 状态观察——使用
alarmUpdates异步序列,使 UI 保持同步 - 小组件扩展——使用倒计时或暂停状态展示时,扩展必须存在
- 错误处理——妥善处理
schedule()、pause()、resume()、cancel()调用中的错误 - 系统限制——代码考虑到系统对活动闹钟数量的限制
- 真机测试——在实体设备上测试闹钟,而不只是使用 Simulator
参考文件
| 文件 | 内容 |
|---|---|
| scheduling.md | 授权、创建一次性闹钟/重复闹钟/计时器、管理闹钟、观察更新 |
| presentation.md | 提醒、倒计时、暂停状态 UI 自定义、按钮、色调 |
| live-activities.md | 小组件扩展、AlarmAttributes、AlarmMetadata、Dynamic Island |
评论
支持 Markdown