web-dev-qa-db-fra.com

App tué par SIGKILL lors de la modification des paramètres de confidentialité

Mon application iOS accède aux photos de l'utilisateur avec ALAssetsLibrary. Lorsque je modifie les paramètres de confidentialité de l'application (Paramètres → Confidentialité → Photos), l'application est tuée par le système (SIGKILL). Est-ce un bug?

44
qiz

Je pense que c'est un bug ou au moins un comportement inattendu et mal documenté. Mais cela ne plante pas, il est juste obligé de redémarrer. Vous obtiendrez un message SIGKILL mais pas de journal des collisions.

Si vous êtes un développeur Apple enregistré, vous pouvez consulter leurs forums pour en savoir plus sur ce problème.

Je ne sais pas comment empêcher ce problème, mais n'hésitez pas à envoyer un rapport de bogue à Apple. Selon la rumeur, ils utiliseraient les doublons de bogues pour mesurer la gravité des bogues ..__ Peut-être que vous pouvez stocker l'état de votre application afin de la restaurer au redémarrage.

33
clauswey

Cela se produit également lors de l’utilisation de UIImagePickerController. La séquence va comme ceci:

  1. Vous affichez le UIImagePickerController. La première fois, la petite alerte demande à l'utilisateur l'autorisation d'utiliser la photothèque. Disons que l'utilisateur dit non.

  2. À ce stade, tout ce que l’utilisateur peut faire avec le contrôleur de sélecteur est annulé, supposons donc que c’est ce qui se produit.

  3. Plus tard, vous montrez le UIImagePickerController. Il contient maintenant un message non personnalisable indiquant qu'il n'y a pas d'accès à la photothèque, mais que l'utilisateur peut activer l'accès dans les paramètres.

  4. L'utilisateur bascule sur Paramètres et permet d'accéder à la photothèque de cette application.

  5. L'application se bloque en arrière-plan. Peu importe si l'utilisateur a annulé le sélecteur ou l'a laissé affiché.

J'ai déposé un bogue à ce sujet et je vous suggère de faire de même pour votre situation. Apple a introduit un nouveau système de confidentialité dans iOS 6 et il est clair que les problèmes n’ont pas été résolus.

10
matt

Recherchez le mot "tuer" dans ce PDF: http://adcdownload.Apple.com/wwdc_2012/wwdc_2012_session_pdfs/session_710__privacy_support_in_ios_and_os_x.pdf

iOS tue les applications lorsque certaines autorisations changent. 

Il est difficile de trouver cette information. Ce n'est dans aucun des «guides» (guide de programmation des préférences, par exemple). 

7
William Power

Lorsque vous testez votre application à l'aide de simulator.Changing les autorisations de l'application vous donne un point d'arrêt. n'est pas l'histoire.Il suffit de redémarrer l'application.

1
tounaobun

Parfois, les erreurs SIGKILL fonctionnent comme une erreur d’interruption, cela indique à iOS que vous devez redémarrer votre application et que nous gérons en même temps les tâches de l’application. Dans ce cas, le mode d’envoi du message d’interruption n’est pas géré par l’app.

Dans mon cas, je n'autorise pas l'accès aux photos et à la caméra dans l'application. Chaque fois que j'autorise l'accès à ces fonctionnalités, je minimise l'application et active ces paramètres. Lorsque j'ai activé ces fonctionnalités, iOS reçoit une interruption et une application reçoit cette information, mais ne peut pas la gérer et entraîne la fermeture ou la fermeture de notre application.

1
Gourav Joshi

OK ma 1ère fois pour écrire une réponse. J'espère que j'ai bien compris :)

Accédez-vous à la bibliothèque d'actifs à l'aide de assetForURL: resultBlock: failureBlock:?

Dans ce cas, le plus probablement, vous ne gérez pas le bloc d’erreur de ALAssetLibrary.

Vous pourriez faire quelque chose comme

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];
}

Ainsi, lorsque votre application n'a pas accès à la photothèque, elle demandera à l'utilisateur de le faire.

0
Ali