SkillAtlasSkill 详情

alarmkit

86 agent skills optimized for iOS 26+ development with Swift 6.

审核状态:已审核Quality 80Security 88

复制安装命令

用 Codex 或 Claude 安装复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它先审查 Skill 页面再帮你安装。

复制前请先查看来源、License 和安全提示。

项目 README

来源文件:README.md

抓取于 2026年8月21日

Swift iOS Skills — Agent Skills for iOS 26+ & SwiftUI Development

GitHub stars Swift 6.3 Platform Claude Code OpenAI Codex Agent Skills tessl License: PolyForm Perimeter

86 agent skills optimized for iOS 26+ development with Swift 6.3 and modern Apple frameworks. All code examples, patterns, and guidance target the latest APIs -- Liquid Glass, approachable concurrency, Foundation Models, StoreKit 2, SwiftData, async/await URLSession, and more. No deprecated patterns.

Compatible with Claude Code, OpenAI Codex, Cursor, GitHub Copilot, and 40+ other agents. Follows the open Agent Skills standard.

Every skill is self-contained. No skill depends on another. Install only what you need.

Release history: CHANGELOG.md.

Contents

Install

Recommended: any agent via skills CLI

The skills CLI is the recommended install method.

Interactive install (recommended):

npx skills add dpearson2699/swift-ios-skills

Running the default command opens the skills CLI UI so you can choose which skills to install and which agent(s) to install them for.

Install everything for any coding agent:

npx skills add dpearson2699/swift-ios-skills --all

Use --all when you want the full set of 86 skills installed automatically for any coding agent.

Install specific skills directly:

npx skills add dpearson2699/swift-ios-skills --skill <skill-name> --skill <skill-name>

Check for updates to installed skills:

npx skills check

Update installed skills to the latest versions:

npx skills update

Use these after installing through the skills CLI.

Claude Code (via plugin marketplace)

Add the marketplace (one-time):

/plugin marketplace add dpearson2699/swift-ios-skills

Install everything:

/plugin install all-ios-skills@swift-ios-skills

Or install a themed bundle (bundles limit how many skills load into the context window — if you want everything, use all-ios-skills above instead of installing multiple bundles):

/plugin install swiftui-skills@swift-ios-skills
/plugin install swift-core-skills@swift-ios-skills
/plugin install ios-app-framework-skills@swift-ios-skills
/plugin install ios-data-framework-skills@swift-ios-skills
/plugin install ios-ai-ml-skills@swift-ios-skills
/plugin install ios-engineering-skills@swift-ios-skills
/plugin install ios-hardware-skills@swift-ios-skills
/plugin install ios-platform-skills@swift-ios-skills
/plugin install ios-gaming-skills@swift-ios-skills
/plugin install apple-kit-skills@swift-ios-skills

OpenAI Codex

$skill-installer install https://github.com/dpearson2699/swift-ios-skills/tree/main/skills/<skill-name>

Claude Web App / Claude Desktop

  1. Download the skill folder(s) you want from this repo
  2. Zip each skill folder
  3. Go to Settings > Capabilities and enable "Code execution and file creation"
  4. Go to Customize > Skills, click +, then Upload a skill
  5. Upload the zip

ChatGPT

  1. Download the skill folder(s) you want from this repo
  2. Zip each skill folder
  3. Click your profile icon in ChatGPT and select Skills
  4. Click New skill and select Upload from your computer
  5. Upload the zip

Plugin Bundles (Claude Code)

PluginSkills included
all-ios-skillsAll 86 skills
apple-kit-skills39 skills spanning Apple Kit frameworks plus CarPlay
swiftui-skillsfocus-engine, swiftui-animation, swiftui-gestures, swiftui-layout-components, swiftui-liquid-glass, swiftui-navigation, swiftui-patterns, swiftui-performance, swiftui-uikit-interop, swiftui-webkit
swift-core-skillscore-data, swift-api-design-guidelines, swift-architecture, swift-codable, swift-charts, swift-concurrency, swift-formatstyle, swift-language, swift-testing, swiftdata
ios-app-framework-skillsactivitykit, adattributionkit, alarmkit, app-clips, app-intents, avkit, carplay, mapkit, paperkit, pdfkit, photokit, push-notifications, storekit, tipkit, widgetkit
ios-data-framework-skillscloudkit, contacts-framework, eventkit, financekit, healthkit, musickit, passkit, weatherkit
ios-ai-ml-skillsapple-on-device-ai, coreml, natural-language, speech-recognition, vision-framework
ios-engineering-skillsapp-store-optimization, app-store-review, authentication, background-processing, cryptokit, debugging-instruments, device-integrity, ios-accessibility, ios-ettrace-performance, ios-localization, ios-memgraph-analysis, ios-networking, swift-security, swiftlint, ios-simulator, metrickit
ios-hardware-skillsaccessorysetupkit, core-bluetooth, core-motion, core-nfc, dockkit, pencilkit, realitykit, sensorkit
ios-platform-skillsappmigrationkit, audioaccessorykit, browserenginekit, callkit, cryptotokenkit, energykit, homekit, permissionkit, relevancekit, shareplay-activities
ios-gaming-skillsgamekit, scenekit, spritekit, tabletopkit

Skills

SwiftUI

SkillWhat it covers
focus-engine@FocusState, defaultFocus, focusSection, focused scene values, focus restoration, UIFocusGuide
swiftui-animationSpring animations, PhaseAnimator, KeyframeAnimator, matchedGeometryEffect, SF Symbols
swiftui-gesturesTap, drag, magnify, rotate, long press, simultaneous and sequential gestures
swiftui-layout-componentsGrid, LazyVGrid, Layout protocol, ViewThatFits, custom layouts
swiftui-liquid-glassiOS 26 Liquid Glass, glassEffect, GlassEffectContainer, morphing transitions
swiftui-navigationNavigationStack, NavigationSplitView, programmatic navigation, deep linking
swiftui-patterns@Observable, state ownership, environment wiring, view composition, async loading, MV-pattern architecture
swiftui-performanceRendering performance, view update optimization, layout thrash, Instruments profiling
swiftui-uikit-interopUIViewRepresentable, UIHostingController, Coordinator, incremental UIKit-to-SwiftUI migration
swiftui-webkitWebView, WebPage, navigation policies, JavaScript calls, local content, custom URL schemes

Core Swift

SkillWhat it covers
swift-api-design-guidelinesSwift API Design Guidelines -- argument labels, mutating/nonmutating pairs, documentation comments, naming conventions
swift-architectureArchitecture patterns: MV (@Observable), MVVM, MVI, TCA, Clean Architecture, Coordinator, decision framework
swift-codableSwift Codable, JSONDecoder, JSONEncoder, CodingKeys, custom decoding, nested JSON
swift-chartsBar, line, area, pie, donut, and 3D charts, scrolling, selection, annotations
swift-concurrencySwift 6.2 concurrency, Sendable, actors, structured concurrency, data-race safety
swift-formatstyleFormatStyle protocol, number/currency/date/duration/measurement formatting, custom styles
swift-languageSwift 6.3 language idioms, result builders, property wrappers, typed throws
swift-testingSwift Testing framework, @Test, @Suite, #expect, parameterized tests, mocking
core-dataCore Data persistence, NSPersistentContainer, NSFetchedResultsController, batch operations, staged migration
swiftdata@Model, @Query, #Predicate, ModelContainer, migrations, CloudKit sync, @ModelActor

App Experience Frameworks

SkillWhat it covers
activitykitActivityKit, Dynamic Island, Lock Screen Live Activities, push-to-update
adattributionkitPrivacy-preserving ad attribution, postbacks, conversion values, re-engagement
alarmkitAlarmKit system alarms and countdown timers, Lock Screen, Dynamic Island, Live Activities
app-clipsApp Clips, invocation URLs, NFC, QR, App Clip Codes, App Group handoff
app-intentsApp Intents for Siri, Shortcuts, Spotlight, widgets, and Apple Intelligence
avkitAVPlayerViewController, VideoPlayer, Picture-in-Picture, AirPlay, subtitles
carplayCarPlay templates, navigation, audio, communication, EV charging apps
mapkitMapKit, CoreLocation, annotations, geocoding, directions, geofencing
paperkitPaperMarkupViewController, markup editing, drawing, shapes (iOS 26)
pdfkitPDFView, PDFDocument, annotations, text search, form filling, thumbnails
photokitPhotosPicker, AVCaptureSession, photo library, video recording, media permissions
push-notificationsUNUserNotificationCenter, APNs, rich notifications, silent push, service extensions
storekitStoreKit 2 purchases, subscriptions, SubscriptionStoreView, transaction verification
tipkitFeature discovery tooltips, contextual tips, tip rules, tip events
widgetkitHome Screen, Lock Screen, and StandBy widgets, Control Center controls, timeline providers

Data & Service Frameworks

SkillWhat it covers
cloudkitCKContainer, CKRecord, subscriptions, sharing, CKSyncEngine, SwiftData sync
contacts-frameworkCNContactStore, fetch requests, key descriptors, CNContactPickerViewController, save requests
eventkitEKEventStore, EKEvent, EKReminder, recurrence rules, EventKitUI editors and choosers
financekitApple Card, Apple Cash, Wallet orders, transaction queries, account balances
healthkitHKHealthStore, queries, statistics, workout sessions, background delivery
musickitMusicKit authorization, catalog search, ApplicationMusicPlayer, MPRemoteCommandCenter
passkitApple Pay, PKPaymentRequest, PKPaymentAuthorizationController, Wallet passes
weatherkitWeatherService, current/hourly/daily forecasts, alerts, attribution requirements

AI & Machine Learning

SkillWhat it covers
apple-on-device-aiFoundation Models framework, Core ML, MLX Swift, on-device LLM inference
coremlCore ML model loading, prediction, MLTensor, compute unit configuration, VNCoreMLRequest, MLComputePlan
natural-languageNLTokenizer, NLTagger, sentiment analysis, language identification, embeddings, Translation
speech-recognitionSpeechAnalyzer, SpeechTranscriber, SFSpeechRecognizer, on-device recognition, audio buffer processing
vision-frameworkVision text recognition, face/barcode detection, image segmentation, VisionKit DataScannerViewController

iOS Engineering

SkillWhat it covers
app-store-optimizationASO keyword strategy, description writing, screenshot optimization, Custom Product Pages, A/B testing
app-store-reviewApp Review guidelines, rejection prevention, privacy manifests, ATT, HIG compliance
authenticationSign in with Apple, ASAuthorizationController, passkeys, biometric auth (LAContext), credential management
background-processingBGTaskScheduler, background refresh, URLSession background transfers
cryptokitSHA-2/SHA-3, HMAC, AES-GCM, ChaChaPoly, HPKE, ML-KEM/ML-DSA, P256/Curve25519 signing, ECDH, Secure Enclave
debugging-instrumentsXcode debugger, Instruments, os_signpost, MetricKit, crash symbolication
device-integrityDeviceCheck (DCDevice per-device bits), App Attest (DCAppAttestService attestation and assertion flows)
ios-accessibilityVoiceOver, Dynamic Type, custom rotors, accessibility focus, assistive-technology support
ios-ettrace-performanceETTrace launch/runtime capture, exact-build dSYM matching, processed flamegraph JSON, comparable verification
ios-localizationString Catalogs, pluralization, FormatStyle, right-to-left layout
ios-memgraph-analysisSimulator memgraph capture, leak ownership paths, reachable heap growth, raw evidence preservation
ios-networkingURLSession async/await, REST APIs, downloads/uploads, WebSockets, pagination, retry, caching
swift-securityKeychain Services, CryptoKit symmetric/asymmetric, biometric authentication, Secure Enclave, certificate trust, credential storage, OWASP compliance · Based on ivan-magda/swift-security-skill
ios-simulatorxcrun simctl commands, device lifecycle, push/location/privacy simulation, log streaming, simulator limitations
metrickitMetricManager async reports, hang/crash diagnostics, production performance telemetry
swiftlintSwiftLint setup, .swiftlint.yml, build tool plugin, rule selection, baselines, suppressions, CI integration

Hardware & Device Integration

SkillWhat it covers
accessorysetupkitPrivacy-preserving BLE/Wi-Fi accessory discovery, ASAccessorySession, picker UI
core-bluetoothCBCentralManager, CBPeripheral, BLE scanning/connecting, services, characteristics, background modes
core-motionCMMotionManager, CMPedometer, accelerometer, gyroscope, activity recognition, altitude
core-nfcNFCNDEFReaderSession, NFCTagReaderSession, NDEF reading/writing, background tag reading
dockkitDockAccessoryManager, camera subject tracking, motor control, framing
pencilkitPKCanvasView, PKDrawing, PKToolPicker, Apple Pencil drawing and annotation
realitykitRealityView, entities, anchors, ARKit world tracking, raycasting, scene understanding
sensorkitResearch-grade sensor data, ambient light, keyboard metrics, device usage (approved studies)

Platform Integration

SkillWhat it covers
appmigrationkitCross-platform data transfer, AppMigrationExtension export/import (iOS 26)
audioaccessorykitAudio accessory features, automatic switching, device placement (iOS 26.4)
browserenginekitAlternative browser engines (EU), process management, web content extensions
callkitCXProvider, CXCallController, PushKit VoIP registration, call directory extensions
cryptotokenkitTKTokenDriver, TKSmartCard, iOS 26 NFC smart cards, certificate-based auth
energykitElectricityGuidance, EnergyVenue, grid forecasts, load event submission, electricity insights
homekitHMHomeManager, accessories, rooms, actions, triggers, MatterSupport commissioning
permissionkitAskCenter, PermissionQuestion, child communication safety, CommunicationLimits
relevancekitWidget relevance signals, time/location-based relevance providers (watchOS 26)
shareplay-activitiesGroupActivity, GroupSession, GroupSessionMessenger, coordinated media playback

Gaming

SkillWhat it covers
gamekitGame Center, GKLocalPlayer, leaderboards, achievements, real-time and turn-based multiplayer
scenekitSCNView, SCNScene, 3D geometry, materials, lighting, physics, SceneView
spritekitSKScene, SKSpriteNode, SKAction, physics simulation, particle effects, SpriteView
tabletopkitMultiplayer spatial board games, pieces, cards, dice, Group Activities (visionOS)

Structure

Each skill follows the open Agent Skills standard:

skills/
  skill-name/
    SKILL.md              # Required — instructions and metadata
    references/           # Optional — detailed reference material
      some-topic.md

SKILL.md contains YAML frontmatter (name, description) and markdown instructions. The references/ folder holds longer examples, advanced patterns, and lookup tables that the main file points to.

This repository contains original instructional content and examples for Apple platform development. Where Apple frameworks, APIs, documentation, WWDC sessions, or trademarks are referenced, those materials remain the property of Apple Inc. The license for this repository applies to this project's original content only and does not claim ownership of or relicense Apple's documentation, trademarks, sample code, or other third-party materials.

Compatibility

These skills work with any agent that supports the Agent Skills standard, including:

Upgrading from v2.x

v3.0 is a major release. If you previously installed v2.x skills, note the following changes:

  • Skill count: 57 skills in v2.2.0, 76 skills in v3.0.0.

  • Skill renames: 12 existing skills renamed to use Apple Kit framework names. Old skill paths no longer resolve. Uninstall all skills and reinstall to upgrade.

    v2.x namev3.0 name
    live-activitiesactivitykit
    mapkit-locationmapkit
    photos-camera-mediaphotokit
    homekit-matterhomekit
    callkit-voipcallkit
    metrickit-diagnosticsmetrickit
    pencilkit-drawingpencilkit
    passkit-walletpasskit
    musickit-audiomusickit
    cloudkit-synccloudkit
    eventkit-calendareventkit
    realitykit-arrealitykit
  • 19 new Kit framework skills: avkit, gamekit, cryptokit, pdfkit, paperkit, spritekit, scenekit, financekit, accessorysetupkit, adattributionkit, carplay, appmigrationkit, browserenginekit, dockkit, sensorkit, tabletopkit, relevancekit, audioaccessorykit, cryptotokenkit.

  • New bundles: apple-kit-skills (all 39 Apple Kit framework skills) and ios-gaming-skills (GameKit, SpriteKit, SceneKit, TabletopKit).

  • PaperKit standalone: PaperKit content removed from pencilkit and is now its own paperkit skill.

  • Beta frameworks: permissionkit, energykit, paperkit, relevancekit, appmigrationkit, and audioaccessorykit require iOS/watchOS 26 beta and are subject to API changes before GM.

  • All skills remain self-contained: No skill references or depends on another.

To upgrade via the skills CLI:

npx skills add dpearson2699/swift-ios-skills

To upgrade Claude Code bundles, reinstall the bundles you use (old skill paths will no longer resolve).

Support

If these skills save you time or improve your workflow, you can support ongoing maintenance through GitHub Sponsors.

Support helps keep the collection current with new Apple releases, evolving framework APIs, updated examples, and compatibility work across Claude Code, Codex, Cursor, Copilot, and other agents.

Sponsors

Thanks to the following people for supporting this project:

Anthony Jr.

License

PolyForm Perimeter 1.0.0 -- see LICENSE

What this means in practice:

  • Using these skills to build your iOS app -- allowed
  • Using these skills inside a closed-source commercial workflow -- allowed
  • Forking the repo and contributing back -- allowed
  • Sharing the skills with a teammate -- allowed
  • Taking the skills, rebranding them as "Premium iOS Agent Skills," and selling them -- not allowed (that's a competing product)

This project is not affiliated with, endorsed by, or sponsored by Apple Inc.

其他

中风险

  • 来源需自行核对维护者身份。
  • 未检测到明显脚本安装指令。
  • 未检测到明显外部权限要求。
  • 未检测到高风险命令。
  • 扫描发现:1 条。

Codex — Git Clone 安装

  1. 安装前请先查看来源仓库和风险报告。
  2. 克隆仓库:git clone https://github.com/dpearson2699/swift-ios-skills.git
  3. 将 "skills/alarmkit" 文件夹复制到 Codex 的 skills 目录中。
  4. 重启 Codex 让新的 skill 生效。

Codex — 手动复制安装

  1. 安装前请先查看来源仓库和风险报告。
  2. 从源仓库下载 SKILL.md 及相关文件。
  3. 在 Codex 的 skills 目录中创建新文件夹。
  4. 将所有 skill 文件复制到新文件夹中。
  5. 重启 Codex 让新的 skill 生效。

Claude Code — Git Clone 安装

  1. 安装前请先查看来源仓库和风险报告。
  2. 克隆仓库:git clone https://github.com/dpearson2699/swift-ios-skills.git
  3. 将 "skills/alarmkit" 文件夹复制到 Claude Code 的 skills 目录中。
  4. 重启 Claude Code 让新的 skill 生效。

Claude Code — 手动复制安装

  1. 安装前请先查看来源仓库和风险报告。
  2. 从源仓库下载 SKILL.md 及相关文件。
  3. 在 Claude Code 的 skills 目录中创建新文件夹。
  4. 将所有 skill 文件复制到新文件夹中。
  5. 重启 Claude Code 让新的 skill 生效。

Cursor — Git Clone 安装

  1. 安装前请先查看来源仓库和风险报告。
  2. 克隆仓库:git clone https://github.com/dpearson2699/swift-ios-skills.git
  3. 将 "skills/alarmkit" 文件夹复制到 Cursor 的 skills 目录中。
  4. 重启 Cursor 让新的 skill 生效。

Cursor — 手动复制安装

  1. 安装前请先查看来源仓库和风险报告。
  2. 从源仓库下载 SKILL.md 及相关文件。
  3. 在 Cursor 的 skills 目录中创建新文件夹。
  4. 将所有 skill 文件复制到新文件夹中。
  5. 重启 Cursor 让新的 skill 生效。

GitHub Copilot — Git Clone 安装

  1. 安装前请先查看来源仓库和风险报告。
  2. 克隆仓库:git clone https://github.com/dpearson2699/swift-ios-skills.git
  3. 将 "skills/alarmkit" 文件夹复制到 GitHub Copilot 的 skills 目录中。
  4. 重启 GitHub Copilot 让新的 skill 生效。

GitHub Copilot — 手动复制安装

  1. 安装前请先查看来源仓库和风险报告。
  2. 从源仓库下载 SKILL.md 及相关文件。
  3. 在 GitHub Copilot 的 skills 目录中创建新文件夹。
  4. 将所有 skill 文件复制到新文件夹中。
  5. 重启 GitHub Copilot 让新的 skill 生效。

Windsurf — Git Clone 安装

  1. 安装前请先查看来源仓库和风险报告。
  2. 克隆仓库:git clone https://github.com/dpearson2699/swift-ios-skills.git
  3. 将 "skills/alarmkit" 文件夹复制到 Windsurf 的 skills 目录中。
  4. 重启 Windsurf 让新的 skill 生效。

Windsurf — 手动复制安装

  1. 安装前请先查看来源仓库和风险报告。
  2. 从源仓库下载 SKILL.md 及相关文件。
  3. 在 Windsurf 的 skills 目录中创建新文件夹。
  4. 将所有 skill 文件复制到新文件夹中。
  5. 重启 Windsurf 让新的 skill 生效。
查看 SKILL.md 原文
name: alarmkit
description: "Implement AlarmKit alarms and countdown timers for iOS and iPadOS with Lock Screen, Dynamic Island, StandBy, and paired Apple Watch system UI. Covers AlarmManager scheduling, AlarmAttributes and AlarmPresentation, system Stop and AlarmButton secondary actions, authorization, state observation, countdown widget-extension handoff, and Live Activity integration. Use when building wake-up alarms, countdown timers, or alarm-style alerts that need Apple's system alarm experience."

AlarmKit

Schedule prominent alarms and countdown timers that surface on the Lock Screen, Dynamic Island, StandBy, and a paired Apple Watch when the alarm fires. AlarmKit requires iOS 26+ / iPadOS 26+. Alarms can break through Focus and Silent mode.

AlarmKit uses ActivityKit data models for its Live Activity, but the firing alert is system-managed alarm UI, not a general custom notification UI surface. Custom UI belongs only to countdown and paused Live Activity states rendered by a Widget Extension with the same AlarmAttributes<Metadata> and AlarmPresentationState used when scheduling.

See references/alarmkit-patterns.md for complete code patterns including authorization, scheduling, countdown timers, snooze handling, and widget setup.

import AlarmKit

Contents

Workflow

1. Create a new alarm or timer

  1. Add NSAlarmKitUsageDescription to Info.plist with a user-facing string.
  2. Request authorization with AlarmManager.shared.requestAuthorization() when the app can explain the value, or handle the first-schedule system prompt.
  3. If authorization is .denied or not .authorized, show recovery UI instead of scheduling.
  4. Configure AlarmPresentation (alert, countdown, paused states).
  5. Create AlarmAttributes with the presentation, optional metadata, and tint color.
  6. Build an AlarmManager.AlarmConfiguration (.alarm or .timer).
  7. Schedule with AlarmManager.shared.schedule(id:configuration:).
  8. Observe alarmManager.alarmUpdates and confirm the scheduled ID reaches the expected state.
  9. If using countdown, add a Widget Extension target with an ActivityConfiguration for the same AlarmAttributes<Metadata> type.

2. Review existing alarm code

Run through the Review Checklist at the end of this document.

Authorization

AlarmKit requires user authorization. Request early when the app can explain the value, or let AlarmKit prompt automatically on first schedule. If authorization is not granted after the explicit or automatic prompt, alarms are not scheduled and will not alert.

let manager = AlarmManager.shared

// Request authorization explicitly
let state = try await manager.requestAuthorization()
guard state == .authorized else { return }

// Check current state synchronously
let current = manager.authorizationState // .authorized, .denied, .notDetermined

// Observe authorization changes
for await state in manager.authorizationUpdates {
    switch state {
    case .authorized: print("Alarms enabled")
    case .denied:     print("Alarms disabled")
    case .notDetermined: break
    @unknown default: break
    }
}

Alarm vs Timer Decision

FeatureAlarm (.alarm)Timer (.timer)
Fires atSpecific time (schedule)After duration elapses
Countdown UIOptionalAlways shown
RecurringYes (weekly days)No
Use caseWake-up, scheduled remindersCooking, workout intervals

Use .alarm(schedule:...) when firing at a clock time. Use .timer(duration:...) when firing after a duration from now.

Scheduling Alarms

Alarm.Schedule

Use .fixed(date) for a one-time absolute date or .relative for a local clock time with .never or .weekly repetition. Load Recurring Alarm Patterns for daily, weekday, weekend, and fixed-date variants.

Schedule and Configure

let id = UUID()

let alert = AlarmPresentation.Alert(
    title: "Wake Up",
    secondaryButton: AlarmButton(
        text: "Snooze", textColor: .white, systemImageName: "bell.slash"
    ),
    secondaryButtonBehavior: .countdown
)
let presentation = AlarmPresentation(alert: alert)
struct EmptyAlarmMetadata: AlarmMetadata {}
let attributes = AlarmAttributes<EmptyAlarmMetadata>(
    presentation: presentation,
    metadata: nil,
    tintColor: .indigo
)

let snooze = Alarm.CountdownDuration(preAlert: nil, postAlert: 300)
let configuration = AlarmManager.AlarmConfiguration(
    countdownDuration: snooze,
    schedule: .relative(.init(
        time: .init(hour: 7, minute: 0),
        repeats: .never
    )),
    attributes: attributes,
    sound: .default
)

let alarm = try await AlarmManager.shared.schedule(
    id: id,
    configuration: configuration
)

For an authorization-gated function and metadata-bearing variant, load Complete Alarm Scheduling Flow.

stopIntent and secondaryIntent default to nil. Omit stopIntent for AlarmKit's standard system Stop behavior; provide it only when Stop must run app cleanup, custom stop behavior, or other side effects. Omit secondaryIntent for ordinary Snooze/Repeat with secondaryButtonBehavior: .countdown and Alarm.CountdownDuration.postAlert; provide it only for .custom secondary behavior or app cleanup/custom behavior.

Alarm State Transitions

cancel(id:)
    |
scheduled --> countdown --> alerting
    |             |             |
    |         pause(id:)    stop(id:) / countdown(id:)
    |             |
    |         paused ----> countdown (via resume(id:))
    |
cancel(id:) removes from system entirely
  • cancel(id:) -- remove the alarm completely, including repeating alarms
  • pause(id:) -- pause a counting-down alarm; throws from other states
  • resume(id:) -- resume a paused alarm; throws from other states
  • stop(id:) -- stop the alarm; one-shot alarms are removed, repeating alarms reschedule
  • countdown(id:) -- restart countdown from alerting state (snooze); throws from other states

Countdown Timers

Timers fire after a duration and always show a countdown UI. Use Alarm.CountdownDuration to control pre-alert and post-alert durations.

CountdownDuration

Alarm.CountdownDuration controls the visible countdown phases:

  • preAlert -- seconds to count down before the alarm fires (the main countdown)
  • postAlert -- seconds for a repeat/snooze countdown after the alarm fires

Load Complete Countdown Timer Flow for the timer factory, pause/resume presentation, metadata, and scheduling gate.

Alarm States

Each Alarm has a state property reflecting its current lifecycle position.

StateMeaning
.scheduledScheduled and ready to alert at the appropriate time
.countdownActively counting down (timer or pre-alert phase)
.pausedCountdown paused by user or app
.alertingAlarm is firing -- sound playing, UI prominent

Observing State Changes

AlarmManager.shared.alarms is a throwing getter for the current daemon snapshot. Use try, and either propagate the error or wrap launch refresh in do/catch before relying on the snapshot.

Observe alarmUpdates rather than maintaining an independent lifecycle. Load State Observation with Async Sequences for the complete store and refresh loop.

An alarm that disappears from alarmUpdates is no longer scheduled with AlarmKit. Compare against app-persisted IDs when you need to distinguish fired, cancelled, and rescheduled alarms.

AlarmAttributes and AlarmPresentation

AlarmAttributes conforms to ActivityAttributes and defines the static data for the alarm's Live Activity. It is generic over a Metadata type conforming to AlarmMetadata, which inherits Decodable, Encodable, Hashable, and Sendable. The metadata value itself is optional and defaults to nil.

AlarmPresentation supplies the required alerting content and optional countdown/paused content. The system renders alerting UI; a widget extension can customize countdown and paused Live Activity views with the same attributes and presentation state. Keep metadata lightweight, use nil when it is unnecessary, and share its type with the widget extension.

AlarmPresentationState

AlarmPresentationState is the system-managed ContentState of the alarm Live Activity. It contains the alarm ID and a Mode enum:

  • .alert(Alert) -- alarm is firing, includes the scheduled time
  • .countdown(Countdown) -- actively counting down, includes fire date and durations
  • .paused(Paused) -- countdown paused, includes elapsed and total durations

The widget extension reads AlarmPresentationState.mode to decide which UI to render in the Dynamic Island and Lock Screen for non-alerting states.

AlarmButton

AlarmButton defines the text, color, and symbol for an alarm action. The representative scheduling example above shows a standard Snooze button.

Secondary Button Behavior

The secondary button on the alert UI has two behaviors:

BehaviorEffect
.countdownRestarts a countdown using postAlert duration (snooze)
.customTriggers the secondaryIntent (e.g., open app)

Live Activity Integration

AlarmKit alarms appear as Live Activities on the Lock Screen, Dynamic Island, StandBy, and on a paired Apple Watch when the alarm fires. The system manages the alerting UI. For countdown and paused states, add a Widget Extension target whose ActivityConfiguration uses the same AlarmAttributes<Metadata> type used when scheduling the alarm.

A widget extension is expected if your alarm uses countdown presentation. Keep that lightweight metadata type available to both the app and widget extension. Without the extension, alarms may be dismissed unexpectedly or fail to alert, though the system can still show a fallback countdown UI in limited cases such as after a device restart before first unlock.

WorkOwner
Authorization, scheduling/state, presentation, sound, system alarm actionsAlarmKit
Home Screen/Smart Stack widgets, families, timelines, reloadswidgetkit
Non-alarm Live Activity lifecycle, tokens, remote content stateactivitykit
APNs, notification categories/actions, custom notification UIpush-notifications

AlarmKit's alert is system-rendered on Lock Screen, Dynamic Island, StandBy, and paired Apple Watch; only countdown/paused states use the widget extension.

For setup, name Apple-documented NSAlarmKitUsageDescription and AlarmManager authorization. Do not require unsupported AlarmKit setup keys or com.apple.developer.alarmkit unless a current Apple source documents them. Load Live Activity Widget Extension for Alarms for the complete shared-attributes widget implementation.

Common Mistakes

MistakeCorrection
Missing usage string or authorization gateAdd NSAlarmKitUsageDescription; handle denial before scheduling
Timer used for recurrenceUse an alarm with .weekly([...])
App-owned state replaces alarmUpdatesObserve the system sequence and reconcile by ID
Intents added for standard Stop/SnoozeOmit them unless cleanup/custom behavior requires one
Large AlarmMetadata payloadKeep lightweight metadata or reference app data by ID
Deprecated stopButton initializerUse init(title:secondaryButton:secondaryButtonBehavior:)

Review Checklist

  • Setup and authorization gates pass without unsupported entitlement keys
  • Alarm/timer choice, presentation, metadata, intents, snooze duration, and tint are valid
  • Scheduled IDs are retained and reconciled through alarmUpdates; operation errors are handled
  • Countdown uses the shared Widget Extension attributes and presentation state
  • System-managed alert UI and adjacent-skill ownership follow the routing table
  • Sound, vibration, Stop/Snooze, and state changes pass on-device testing

References

发现问题?提交给管理员复核

评分:

评论 (0)

暂无评论,成为第一个评论者吧!