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

Приложение, убитое SIGKILL при изменении настроек конфиденциальности

Мое приложение iOS обращается к пользователю с фотографиями с помощью ALAssetsLibrary. Когда я изменяю настройки конфиденциальности для приложения (Настройки → Конфиденциальность → Фотографии), приложение будет убито системой (SIGKILL). Это ошибка?

4b9b3361

Ответ 1

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

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

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

Ответ 2

Это также происходит при использовании UIImagePickerController. Последовательность выглядит следующим образом:

  • Вы показываете UIImagePickerController. В первый раз небольшое предупреждение запрашивает у пользователя разрешение на использование библиотеки фотографий. Скажем, пользователь говорит "нет".

  • Все, что пользователь может сделать с контроллером выбора в этот момент, отменяют, поэтому давайте предположим, что произойдет.

  • Позже вы увидите UIImagePickerController. В нем теперь содержится непривычное сообщение о том, что доступ к библиотеке фотографий отсутствует, но пользователь может разрешить доступ в настройках.

  • Пользователь переключается на Настройки и предоставляет доступ к библиотеке фотографий для этого приложения.

  • Приложение аварийно завершает работу в фоновом режиме. Не имеет значения, отменил ли пользователь сборщик или оставил его.

Я написал об этом ошибку, и я предлагаю вам сделать то же самое, для вашей ситуации. Apple представила новую систему конфиденциальности в iOS 6, и, очевидно, изломы не были разработаны.

Ответ 3

Найдите слово "убить" в этом PDF файле: http://adcdownload.apple.com/wwdc_2012/wwdc_2012_session_pdfs/session_710__privacy_support_in_ios_and_os_x.pdf

iOS убивает приложения при изменении определенных разрешений.

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

Ответ 4

Несколько раз ошибка SIGKILL работает как ошибка прерывания, она дает сигнал iOS, что вы должны перезапустить приложение и в то же время мы управляем задачами приложения, и в этом случае способ отправки сообщения прерывания не обрабатывается приложением.

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

Ответ 5

Когда вы тестируете свое приложение с помощью симулятора. Изменение разрешений приложения дает вам точку останова. Вы можете ввести "c" в консоли, чтобы приложение продолжало работать и возвращалось к исходному состоянию. Но в вашем реальном устройство, это не история. Просто перезагрузите приложение.

Ответ 6

ОК, мой первый раз, чтобы написать ответ. Надеюсь, я прав:)

Вы получаете доступ к библиотеке активов с помощью assetForURL: resultBlock: failureBlock:?

Если вы тогда, скорее всего, вы не обрабатываете блок сбоев ALAssetLibrary.

Вы можете сделать что-то вроде

ALAssetsLibraryAccessFailureBlock failureBlock = ^(NSError *error)
{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Access to Photo Library is Denied "
                                                            message:@"Please allow <YOUR APP NAME> to access your Photo library from Privacy Settings"
                                                           delegate:nil
                                                  cancelButtonTitle:@"OK"
                                                  otherButtonTitles:nil];
            [alert show];
            [alert release];
}

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