我试图在macOS Big Sur上使用Xcode 12.5.1在Swift中创建一个小型命令行工具来访问和显示日历事件。我已经阅读了EKEventStore documentation并创建了最简单的代码:
import Foundation
import EventKit
var store = EKEventStore()
我打开了沙盒,添加了日历权限和沙盒权限。
我已经添加了一个Info.plist文件,并填写了Privacy-CalendarsUsageDescription键和值。
在构建设置中,我将“创建Info.plist二进制部分”设置为“是”。
但是,尽管跳过了所有这些环节,我的一行应用程序总是无法加载EKEventStore(),并出现以下错误:
2021-09-17 23:39:24.609490-0700 nextzoom[51558:6213649] CoreData: XPC: Unable to load metadata: Error Domain=NSCocoaErrorDomain Code=134070 "An error occurred in the persistent store." UserInfo={Problem=request failed, insufficient permission}
2021-09-17 23:39:24.610959-0700 nextzoom[51558:6213649] [error] error: addPersistentStoreWithType:configuration:URL:options:error: returned error NSCocoaErrorDomain (134070)
CoreData: error: addPersistentStoreWithType:configuration:URL:options:error: returned error NSCocoaErrorDomain (134070)
CoreData: annotation: userInfo:
CoreData: annotation: Problem : request failed, insufficient permission
CoreData: annotation: storeType: NSXPCStore
CoreData: annotation: configuration: (null)
CoreData: annotation: URL: file:///Users/%%%%%%/Library/Calendars/Calendar%20Cache
CoreData: annotation: options:
CoreData: annotation: NSMigratePersistentStoresAutomaticallyOption : 1
CoreData: annotation: agentOrDaemon : 1
CoreData: annotation: NSInferMappingModelAutomaticallyOption : 1
CoreData: annotation: serviceName : com.apple.CalendarAgent.database
CoreData: annotation: NSPersistentHistoryTrackingKey : {
NSPersistentHistoryTrackingEntitiesToExclude = (
ChangeRequest
);
}
Program ended with exit code: 0
没有权限对话框弹出。但如果我添加联系人权利和隐私-联系人使用说明,那么我确实会弹出一个询问访问联系人的权限的窗口,并且应用程序会出现在我的安全和隐私设置中,并具有联系人访问权限。但从未用于日历。
Here is a git repo of the Xcode project .
你知道我哪里做错了吗?
2条答案
按热度按时间aiazj4mn1#
您是否手动请求访问EventStore的权限?https://developer.apple.com/documentation/eventkit/ekeventstore/1507547-requestaccesstoentitytype
ContactStore的怪异似乎是一个bug,这里也有报道:https://openradar.appspot.com/FB8918491
bz4sfanl2#
我不知道你是否仍然有这个问题,但只要将
RunLoop.main.run()
添加到swift代码的底部,它就会提示我进行位置访问。(Came在此期间,我试图为CoreLocation解决一个类似的问题,@TheNextman为我的问题提出了这个建议;不幸的是,这似乎对我的情况没有帮助)。