Приложение аварийно завершает работу при включении доступа к камере из настроек iOS 8

Я разрабатываю приложение для iPhone, оно использует камеру для сканирования штрих-кодов и фотографирования. Когда у нас нет доступа к камере, а пользователь включает доступ к камере, приложение аварийно завершает работу и снова открывается.

Можете ли вы, люди, помочь мне исправить это?

Заранее спасибо.


person Nuraiz    schedule 30.09.2014    source источник
comment
У меня возникает та же проблема. Приложение аварийно завершает работу, когда пользователь переключает кнопку доступа к камере на странице настроек приложения в iOS8 (включение-›отключение или отключение-›включение)   -  person ken    schedule 31.10.2014
comment
У меня тоже такая же проблема..   -  person Mohit    schedule 05.02.2015
comment
Вы нашли какое-нибудь решение... у меня тоже такая же проблема... я думаю, что это связано с ОС, а не с нашим кодированием..   -  person RJV Kumar    schedule 20.03.2015
comment
Он падает, когда вы запускаете приложение в режиме отладки. Обычно он не вылетает, а просто перезагружает приложение.   -  person Kaptain    schedule 08.04.2015
comment
Произошло то же самое со мной. Вы нашли какое-нибудь решение?   -  person Pooja Shah    schedule 15.04.2015
comment
Без кода этот вопрос может быть не по теме: вопросы, требующие помощи в отладке (почему этот код не работает так, как я хочу?), должны включать: • желаемое поведение, • конкретную проблему или ошибку. и •самый короткий код, необходимый для его воспроизведения в самом вопросе. Вопросы без четкого формулирования проблемы бесполезны для других читателей. См.: Как создать минимальный, полный и проверяемый пример, О каких темах я могу здесь спросить? и Как спросить.   -  person Makyen♦    schedule 16.04.2015
comment
Начиная с iOS 10 ключ NSCameraUsageDescription должен быть установлен в файле info.plist приложения. Ключ: NSCameraUsageDescription Значение: Объясните, зачем вам нужен доступ к камере.   -  person Mithra Singam    schedule 11.04.2017


Ответы (2)


При первом доступе к камере ОС автоматически отобразит запрос на разрешение. Независимо от того, разрешает ли пользователь приглашение или отклоняет, ваше приложение будет продолжать работать. Если пользователь в какой-то момент изменит разрешения для адресной книги, календарей, напоминаний, камеры или фотографий, iOS SIGKILL удалит приложение. Он предпринимает это действие, чтобы убедиться, что в распоряжении приложения больше нет ранее авторизованных данных. Когда пользователь переходит из приложения «Настройки» обратно в стороннее приложение, оно запускается с нуля и теперь имеет статус «Отказано в авторизации». В результате такого поведения у меня есть две рекомендации:

  1. Определите, когда в разрешении отказано, и представьте некоторый пользовательский интерфейс, объясняющий, что пользователю необходимо переключить разрешение приложения «Настройки». В iOS 8 вы можете перенести их прямо в запись вашего приложения с помощью [[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]].

  2. Реализуйте своего рода восстановление состояния, чтобы при закрытии и перезапуске приложения оно возвращало пользователя к представлению/функции, которое было видно ранее.

Источник (требуется учетная запись разработчика)

person jszumski    schedule 17.04.2015
comment
Просто чтобы уточнить, вы бы порекомендовали, чтобы этот тип изменения настроек выполнялся не из самого приложения iOS, а из части настроек пользовательского интерфейса? Я заинтересованная третья сторона, и из ОП неясно, где происходит изменение настроек. - person Steve Mitcham; 17.04.2015
comment
При первом доступе к камере ОС автоматически отобразит запрос на разрешение. Независимо от того, разрешает ли пользователь приглашение или отклоняет, ваше приложение будет продолжать работать. Если пользователь в какой-то момент изменит разрешение через приложение «Настройки» во время работы приложения, оно будет SIGKILLed. - person jszumski; 17.04.2015
comment
Я бы порекомендовал определить, когда в разрешении отказано, и представить некоторый пользовательский интерфейс, который объясняет, что пользователю необходимо переключить разрешение приложения «Настройки». В iOS 8 вы можете перенести их прямо в запись вашего приложения с помощью [[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]] - person jszumski; 17.04.2015
comment
Спасибо. Комментарии могут быть непостоянными, поэтому скопируйте эту информацию в свой ответ, чтобы она не потерялась. - person Steve Mitcham; 17.04.2015
comment
Теперь, когда iOS 9+ поддерживает глубокие ссылки и пользователи могут вернуться прямо в ваше приложение с экрана настроек, как можно решить эту проблему? При возврате с экрана настроек (с помощью кнопки «Назад» в строке состояния) приложение аварийно завершает работу, и пользовательский интерфейс не отвечает... - person cph2117; 16.10.2015
comment
@ cph2117 Я вижу, что приложение перезапускается соответствующим образом при использовании кнопки «Назад» в строке состояния. Если вы запускаете приложение в отладчике, оно, вероятно, останавливается в точке останова в main(). - person jszumski; 16.10.2015
comment
@jszumski Я захожу в настройки. Разрешить доступ к фотографиям. Затем получите ошибку SIGKILL, как и ожидалось от приложения Apple, убивающего после изменения разрешения, затем я возвращаюсь к приложению с помощью кнопки «Назад» в строке состояния, а PHAuthorizationStatus не обновляется... - person cph2117; 16.10.2015
comment
@ cph2117 Можете ли вы добавить новый вопрос со своим кодом и связать его здесь? - person jszumski; 16.10.2015

Ваши рекомендации верны. Я представляю предупреждение, предлагающее пользователю перейти в приложение «Настройки», чтобы изменить разрешение камеры и контактов, если они ранее отказали им. Проблема для меня с вашей рекомендацией № 2. Я глубоко погружен в процесс регистрации и собрал регистрационную информацию, такую ​​как имя, адрес электронной почты, дата рождения. Затем у меня появляется экран «Запрос разрешений». Когда приложение перезапускается после того, как оно было убито, у меня больше нет этой регистрационной информации. Я думаю, я могу сохранить информацию о регистрации (на телефон) перед представлением предупреждения, а затем после перезапуска приложения проверить, есть ли ранее сохраненная информация о регистрации. Если это так, вернитесь к экрану, который запрашивал разрешения, а затем удалите сохраненную информацию о регистрации.

person Sidd Rajput    schedule 20.04.2018