#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
Появится диалоговое окно «Разрешения отсутствуют». Но если я добавлю права на контакты и Описание использования конфиденциальности контактов, то я получу всплывающее окно с запросом разрешения на доступ к контактам, и приложение появится в моих настройках безопасности и конфиденциальности с доступом к контактам. Но никогда для Календаря.
Есть идеи, что я здесь делаю не так?
Ответ №1:
Вы вручную запрашивали разрешение на доступ к магазину событий? https://developer.apple.com/documentation/eventkit/ekeventstore/1507547-requestaccesstoentitytype
Странность ContactStore, похоже, является ошибкой, и о ней также сообщалось здесь: https://openradar.appspot.com/FB8918491