Подтвердить что ты не робот

При перезагрузке приложения при обнаружении изменений в настройках конфиденциальности

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

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

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

4b9b3361

Ответ 1

Вы неправильно понимаете, что происходит. Ваше приложение не сбой (хотя может показаться, что если вы используете приложение с отладчиком).

При переключении в приложение "Настройки" (и ваше приложение приостановлено в фоновом режиме) и изменении настроек конфиденциальности приостановленные приложения завершаются. Когда вы переключаетесь обратно в приложение, его просто запускают снова. Это ничем не отличается от того, что ваше приложение убито по любой другой причине.

Это зависит от вас, чтобы закодировать ваше приложение, чтобы справиться с этим, восстановив прежнее состояние. Другое приложение, о котором вы говорите, просто возвращает пользователя в предыдущее состояние. Многие приложения делают это. Это не имеет никакого отношения к тому, чтобы быть убитым из-за изменений конфиденциальности. Приложение будет восстанавливать состояние при убийстве по любой причине.

Ответ 2

Вы можете проверить, разрешено ли вам доступ к библиотеке фотографий с помощью метода authorizationStatus в ALAssetsLibrary. Вы должны проверить это значение в каком-то методе, который будет вызываться каждый раз, когда ваше приложение "открывается" и соответствующим образом обновляет ваш интерфейс.