una permitir permisos origenes fuentes fiables desconocidos desconocidas desarrolladores dar como camara apps aplicaciones aplicacion activar acceso abrir ios cocoa-touch ios6 abaddressbook

ios - permitir - iphone permisos de aplicaciones



La aplicación se bloqueó en iOS 6 cuando el usuario cambia los permisos de acceso a Contactos (2)

Lo he visto en mi propia aplicación. Y he visto a otros informar esto también. Estoy bastante seguro de que esto es un comportamiento deliberado. El sistema operativo mata todas las aplicaciones en segundo plano que reaccionan a los cambios en los permisos de privacidad. Apple parece haber tomado un enfoque mazo a esto. No es un bloqueo (aunque puede aparecer así cuando se ejecuta en el depurador). Las aplicaciones se terminan por varias otras razones. Agregue esto a la lista de razones. Esto nos da más razones para hacer un buen trabajo al restaurar el estado de la aplicación tras un reinicio completo de nuestras aplicaciones.

Tenga en cuenta que este comportamiento se aplica a todas las diversas configuraciones de privacidad, como contactos, fotos, micrófono, calendario y cámara.

Tengo una aplicación que usa la libreta de direcciones. Cuando se ejecuta en iOS 6 ejecuta este código cuando el usuario hace algo que requiere acceso a la libreta de direcciones.

if (ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusNotDetermined) { ABAddressBookRef addressBookRef = ABAddressBookCreateWithOptions(NULL, NULL); ABAddressBookRequestAccessWithCompletion(addressBookRef, ^(bool granted, CFErrorRef error) { if (granted) { showContactChooser(); } }); CFRelease(addressBookRef); } else if (ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusAuthorized) { showContactChooser(); } else { showAccessDeniedAlert(); }

Esto funciona perfectamente: puedo leer la información de los contactos y cuando el usuario denegó el acceso, la aplicación reacciona en consecuencia.

Sin embargo, si el usuario:

  1. Permite el acceso de Contactos en la aplicación,
  2. Sale de la aplicación,
  3. Accede a Configuración-> Privacidad-> Contactos y deshabilita el acceso a Contactos para la aplicación,
  4. Ejecuta la aplicación,
  5. Mientras la aplicación se ejecuta en segundo plano, va a la configuración y habilita el acceso de contacto para la aplicación,

la aplicación se bloquea inmediatamente dentro de main() sin información de excepción o un seguimiento de pila significativo. Traté de activar el punto de interrupción "todas las excepciones" y [NSException raise] , pero eso no me dio más información.

El bloqueo puede reproducirse incluso si la aplicación no ejecuta el código anterior durante el lanzamiento.

¿Que esta pasando aqui? ¿Hay una devolución de llamada a la que me debería suscribir?


Usualmente, cuando una aplicación regresa de ser suspendida, debe llamar a la aplicación: didEnterForeground desde su AppDelegate. En mi opinión, ese sería un buen lugar para reajustar los permisos de su libreta de direcciones.