首页 > 解决方案 > 如何在 macOS 应用程序中使用 Swift 中的 EventKit 获取日历权限

问题描述

我正在尝试从我在 Xcode 11.2.1 中使用 Swift 5 开发的 Mac 应用程序将日历事件添加到 macOS 日历。

对于初学者,我在App Sandbox中检查了日历权利。

我正在尝试提示这样的权限:

import EventKit

@IBAction func clickAddToCalendar(_ sender: NSButton){
  let eventStore = EKEventStore()
  eventStore.requestAccess(to: .event){ granted, error in
    print(granted) // returns false
    print("----")
    print(error) // returns nil      
  }
}

...但每次都是,我从来没有看到一个弹出来授予权限grantedfalse在 macOS 上是否需要这样的访问提示?看起来是这样,因为当我尝试像这样直接添加日历事件时:

let event = EKEvent(eventStore: eventStore)

event.title = "My Event"
event.startDate = Date()
event.endDate = Date()
event.calendar = eventStore.defaultCalendarForNewEvents

do {
  try eventStore.save(event, span: .thisEvent)
} catch let error as NSError {
  print(error)
}

...我收到一个错误:

serviceName = "com.apple.CalendarAgent.database"; ...返回错误 NSCocoaErrorDomain(134070) 与 userInfo 字典 { 问题 =“请求失败,权限不足”}

有没有人这样做可以给我一些指示?谢谢!

标签: eventkitekeventekeventstoreekeventkit

解决方案


您是否有隐私 - 日历使用说明的 info.plist 项目?

EventKit 所需的请参阅https://developer.apple.com/documentation/eventkit/accessing_the_event_store


推荐阅读