如何在MacOS屏幕保护程序中访问日历?



是否可以在屏幕保护程序中访问日历事件?我可以在申请中请求许可。但是有些API在屏保的情况下没有提示。

我没有找到任何相关的文档。

我使用以下代码来请求日历事件:

func requestPermissionForCalendar()
{
var eventStore = EKEventStore()

eventStore.requestAccess(to: EKEntityType.event) { granted, error in

if granted{
print("Permission granted")
}else{
print("The app is not permitted to access reminders, make sure to grant permission in the settings and try again")
}
}
}

说明几点,首先,屏幕保护程序在macOS中是完全被动的。当它全屏运行时,任何提示符都将被忽略,作为屏幕保护程序。

一般来说,使用屏保的正确方法是在配置表(屏保选项)中请求许可。用户将在那里得到提示,并可以允许或拒绝您。例如,我使用它来请求用户位置。

一旦在系统偏好设置中允许,您的屏幕保护程序在屏幕保护程序模式下运行时将获得访问权限。我建议你先在配置表中测试你的代码,因为这更容易。

附加说明,自Catalina以来macOS上的屏幕保护程序由苹果提供的应用程序扩展沙盒,并且该扩展具有有限的权利列表(见这里的列表https://github.com/glouel/ScreenSaverMinimal)。

我不是特别熟悉EKEventStore,但如果它需要特定的授权才能使其工作,你会被卡住,因为你不能自己添加任何授权,一切都取决于legacyScreenSaver.appex

最新更新