macOS Big Sur上Swift命令行工具的EventKit权限问题

hfyxw5xn  于 2023-03-22  发布在  Swift
关注(0)|答案(2)|浏览(155)

我试图在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 .
你知道我哪里做错了吗?

aiazj4mn

aiazj4mn1#

您是否手动请求访问EventStore的权限?https://developer.apple.com/documentation/eventkit/ekeventstore/1507547-requestaccesstoentitytype
ContactStore的怪异似乎是一个bug,这里也有报道:https://openradar.appspot.com/FB8918491

bz4sfanl

bz4sfanl2#

我不知道你是否仍然有这个问题,但只要将RunLoop.main.run()添加到swift代码的底部,它就会提示我进行位置访问。
(Came在此期间,我试图为CoreLocation解决一个类似的问题,@TheNextman为我的问题提出了这个建议;不幸的是,这似乎对我的情况没有帮助)。

相关问题