Итак, проблема: при использовании платформы Event Kit и запросе доступа к базе данных календаря пользователя на OSX панель, запрашивающая у пользователя разрешение, отображается только при первом вызове -requestAccessToEntityType: Completion :. Это затрудняет тестирование ответа приложения, когда пользователь отказывает в разрешении или даже когда пользователь изначально предоставляет разрешение (другими словами, для воссоздания условий первого запуска). Этот пользовательский сценарий можно было бы воспроизвести, если бы существовал способ сбросить EKAuthorizationStatus до EKAuthorizationStatusNotDetermined, но, насколько я могу судить, после принятия первоначального решения о разрешении возврата к состоянию NotDetermined не будет.

Я прочитал опубликованное здесь решение для iOS: Возможно ли сбросить настройки конфиденциальности в iOS? но я не могу найти аналогичное решение для OSX.

Вопрос: есть ли способ смоделировать первый запуск приложения, которое запрашивает доступ к базе данных календаря пользователя, чтобы диалоговое окно разрешения отображалось повторно для целей тестирования?

2
Max Taggart 24 Дек 2015 в 03:11

2 ответа

Лучший ответ

Флаги разрешений хранятся в базе данных SQLite:

~/Library/Application Support/com.apple.TCC/TCC.db

В таблице access вы должны увидеть столбцы service и kTCCServiceAddressBook и т. Д. Вместе с client для всех соответствующих приложений, которые имеют разрешение или когда-то запрашивали его.

Если вы хотите протестировать функциональность для повторного запроса разрешения, нужно удалить строку, содержащую имя приложения - при следующем запуске вы должны снова получить запрос.

Вы можете проверить разрешения:

System Preferences > Security & Privacy > Privacy 
1
l'L'l 24 Дек 2015 в 00:58

Позже в качестве дополнительного решения я нашел это сообщение: Отзыв requestAccessToEntityType: авторизация на Mavericks, чтобы я мог протестировать свое приложение

Это предлагает использовать инструмент командной строки tccutil, чтобы очистить разрешения для календаря db. Команда в этом случае будет

tccutil reset Calendar
1
Community 23 Май 2017 в 10:28