用途
EventKit Calendar 是一个面向 Swift 6.2 / iOS 26+ 的开发技能,用于在 iOS 应用中创建、读取和管理日历事件与提醒事项。它基于 Apple 的 EventKit 与 EventKitUI 框架,适合需要在 App 内集成日历或提醒功能的开发者。
主要能力
- 权限与授权:覆盖 iOS 17+ 的细粒度授权方法,包括
requestFullAccessToEvents()、requestWriteOnlyAccessToEvents()、requestFullAccessToReminders(),以及授权状态检查。 - 事件管理:创建、获取、保存事件,支持指定日历、结构化位置、按标识符获取单个事件。
- 提醒事项:创建、获取未完成提醒、完成提醒。
- 重复规则:使用
EKRecurrenceRule创建简单与复杂的重复事件或提醒,并支持编辑重复事件时指定EKSpan。 - 闹钟:为事件或提醒添加相对时间或绝对时间的
EKAlarm。 - EventKitUI 控制器:提供
EKEventEditViewController、EKEventViewController、EKCalendarChooser的使用示例。 - 变更监听:通过
EKEventStoreChanged通知保持 UI 同步。
使用方式
- 配置 Info.plist:根据所需访问级别添加
NSCalendarsFullAccessUsageDescription、NSCalendarsWriteOnlyAccessUsageDescription、NSRemindersFullAccessUsageDescription;若同时支持 iOS 16 或更早版本,还需包含旧版键。 - 创建事件库:创建单个
EKEventStore实例并复用,不要混用不同事件库的对象。 - 请求授权:使用 iOS 17+ 的异步方法请求所需权限,并在获取或保存前检查授权状态。
- 操作事件与提醒:使用提供的代码示例创建、获取、保存事件和提醒,注意保存到可写日历、批量保存后显式调用
commit()。 - 使用系统界面:通过 EventKitUI 控制器展示系统编辑器、查看器或日历选择器。
- 监听变更:注册
EKEventStoreChanged通知,收到后重新获取事件,避免使用过期对象。
适用场景
- 在 App 内添加事件到用户日历(如预订、预约)。
- 创建和管理提醒事项。
- 需要重复事件、闹钟或系统日历编辑界面的场景。
- 需要与系统日历数据保持同步的 iOS 应用。
限制
- 目标平台为 Swift 6.2 / iOS 26+,部分 API 需要 iOS 17+。
- 需要用户授权才能访问日历或提醒数据。
- 保存事件前需确认目标日历允许修改(
allowsContentModifications)。 - 提醒事项的获取是异步的,通过完成回调返回。
- 重复事件保存时需正确指定
EKSpan(.thisEvent或.futureEvents)。 - 批量保存后必须调用
commit(),否则更改不会持久化。 - 不应跨不同
EKEventStore实例共享EKObject。 - 为特定地点的事件应显式设置时区。
常见错误与审查清单
技能文档列出了常见错误,如使用已弃用的 requestAccess(to:)、保存到只读日历、忽略时区、忘记提交批量保存、混用不同事件库的对象,并提供了审查清单,涵盖 Info.plist 键、授权方法、单一事件库、可写日历、重复事件跨度、批量提交、变更监听、时区设置、对象共享和 EventKitUI 代理回调等检查项。