Проблемы с разрешениями EventKit для инструмента командной строки Swift в macOS Big Sur

#swift #xcode #sandbox #macos-big-sur #eventkit

Вопрос:

Я пытаюсь создать небольшой инструмент командной строки в Swift с Xcode 12.5.1 на macOS Big Sur для доступа и отображения событий календаря. Я прочитал документацию EKEventStore и создал максимально простой код:

 import Foundation
import EventKit

var store = EKEventStore()
 

Я включил песочницу, добавил право на календарь и право на песочницу.

Я добавил файл Info.plist с заполненным ключом Описания использования календарей конфиденциальности и значением.

В настройках сборки я установил «Создать раздел Info.plist в двоичном формате» на «Да».

Но, несмотря на то, что я прыгаю через все эти обручи, мое приложение one line всегда не загружает 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 Cache
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
 

Появится диалоговое окно «Разрешения отсутствуют». Но если я добавлю права на контакты и Описание использования конфиденциальности контактов, то я получу всплывающее окно с запросом разрешения на доступ к контактам, и приложение появится в моих настройках безопасности и конфиденциальности с доступом к контактам. Но никогда для Календаря.

Вот репо git проекта Xcode.

Есть идеи, что я здесь делаю не так?

Ответ №1:

Вы вручную запрашивали разрешение на доступ к магазину событий? https://developer.apple.com/documentation/eventkit/ekeventstore/1507547-requestaccesstoentitytype

Странность ContactStore, похоже, является ошибкой, и о ней также сообщалось здесь: https://openradar.appspot.com/FB8918491