Builds AlarmKit alarms and countdowns with system Lock Screen, Dynamic Island, StandBy, and Apple Watch presentation. Use for authorization, AlarmManager scheduling, stop/secondary actions, countdown extension handoff, state observation, or Live Activity-backed alarm experiences.
88%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
Passed
No findings from the security scan
Schedule prominent alarms and countdown timers that surface on the Lock Screen, Dynamic Island, StandBy, and paired Apple Watch when firing. Targets iOS 26+ / iPadOS 26+.
UI Boundary: AlarmKit alerts use system-managed alert UI that breaks through Focus and Silent modes. Custom UI is limited to countdown and paused Live Activity states rendered by a Widget Extension.
Add NSAlarmKitUsageDescription to Info.plist. Request authorization before scheduling alarms:
import AlarmKit
func setupAlarmKit() async throws {
let status = await AlarmManager.shared.requestAuthorization()
guard status == .authorized else { throw AlarmError.unauthorized }
}Construct and schedule an alarm with firing date and stop actions:
let alarm = Alarm(
id: UUID(),
schedule: .time(Date().addingTimeInterval(3600)),
title: "Morning Medication",
stopAction: .dismiss,
secondaryAction: .snooze(duration: 300)
)
try await AlarmManager.shared.schedule(alarm)Create active countdown experiences that present live timers across Dynamic Island and Lock Screen:
let timer = Alarm(
id: UUID(),
schedule: .countdown(duration: 600),
title: "Tea Steep",
stopAction: .dismiss
)
try await AlarmManager.shared.schedule(timer)Observe active alarms and firing transitions asynchronously:
Task {
for await activeAlarms in AlarmManager.shared.alarms {
for alarm in activeAlarms {
print("Alarm \(alarm.title): \(alarm.state)")
}
}
}Render custom UI for countdown and paused states in a Widget Extension conforming to ActivityConfiguration(for: AlarmAttributes<MyMetadata>.self):
import WidgetKit
import SwiftUI
import AlarmKit
struct AlarmLiveActivity: Widget {
var body: some WidgetConfiguration {
ActivityConfiguration(for: AlarmAttributes<MyMetadata>.self) { context in
// Lock Screen presentation
Text(context.state.presentationState.title)
} dynamicIsland: { context in
DynamicIsland {
DynamicIslandExpandedRegion(.leading) {
Image(systemName: "alarm")
}
DynamicIslandExpandedRegion(.trailing) {
Text(context.state.schedule, style: .timer)
}
} compactLeading: {
Image(systemName: "alarm")
} compactTrailing: {
Text(context.state.schedule, style: .timer)
} minimal: {
Image(systemName: "alarm")
}
}
}
}requestAuthorization().NSAlarmKitUsageDescription declared in target Info.plistAlarmManager.shared.requestAuthorization() confirmed authorizedAlarmAttributes generic metadataAlarmManager.shared.alarmsthienqo/ios-skills
6bf8b62
Canonical home
since May 23, 2026
Also appears in
on Sep 6, 2026
since May 22, 2026
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.