Я столкнулся с странным случаем с запросом доступа к календарю в iOS 9. Логика отлично работает на всех устройствах iOS 10.EKEventStore requestAccess() не отображает приглашение пользователя в iOS 9
В нашем случае мы добавили кнопку на панели инструментов, которую пользователь нажимает, чтобы добавить событие в свой Календарь.
Таким образом, мы не проверяем разрешение на доступ к календарю до тех пор, пока пользователь не нажмет кнопку «Добавить в календарь». Пример:
@IBAction func addToCalendarPressed(_ sender: UIBarButtonItem) {
eventStore.requestAccess(to: .event, completion: { (granted, error) in
if (granted) && (error == nil) {
// Present the EKEventEditViewController
} else {
// Do something else (show an alert)
}
})
}
В iOS 10 приложение отображает приглашение для доступа к Календарю, как и следовало ожидать. В iOS 9.x приглашение не отображается, обработчик завершения немедленно запускается и получает false.
Хуже того, хотя проверка «Разрешение календаря» завершена, вы не можете войти в «Настройки» и вручную включить доступ к календарю. Что касается устройства, приложение никогда не делало проверку разрешения, поэтому приложение никогда не появляется в меню «Настройки»> «Конфиденциальность»> «Календарь».
Я попытался переместить чек в viewWillAppear или viewDidLoad вместо того, чтобы ждать нажатия кнопки, и он все еще не работает. Я вытащил некоторые примеры приложений с проверкой событий, и они работают в iOS 9. Мне просто не удалось выяснить, почему запрос не работает в этом случае.
Приложение также проверяет место (но не на этом экране), и эти работы правильно прошивкой 9.