NSUrlSessionDownloadTask – didCompleteWithError cuando entra en segundo plano

Cuando forzo mi dispositivo para que entre en modo de reposo al presionar el button de encendido, mi tarea de background se detiene al llamar al método de delegado didCompleteWithError con el error:

La operación no se pudo completar. operación no permitida

¿Cómo puedo configurar mi NSURLSession para continuar la descarga incluso en modo de suspensión?

¿Es incluso posible? Si no, ¿qué opciones tengo? Necesito download un file de 300 Mb, por lo que con una connection baja, la aplicación pasará al modo de suspensión antes de que finalice la descarga.

Aquí está la creación de mi session:

 static NSURLSession *backgroundSession; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ backgroundSession = [NSURLSession sessionWithConfiguration: [NSURLSessionConfiguration backgroundSessionConfiguration: @"com.myapp.mytask"] delegate:self. myDelegate delegateQueue:self.myQueue]; }); NSURLSessionDownloadTask *task = [backgroundSession downloadTaskWithRequest: self.urlRequest]; [task resume]; 

El problema es que la capacidad de protección de datos está activada. Con eso habilitado, todos los files se almacenan con NSFileProtectionComplete por defecto, incluso el file temporal que se utiliza para download por NSURLSession :

El nivel de protección pnetworkingeterminado es la protección completa, en la que los files están encriptados e inaccesibles cuando el dispositivo está bloqueado. Puede establecer mediante progtwigción el nivel de protección para los files creados por su aplicación, como se describe en "Protección de datos mediante el encryption en disco" en la Guía de progtwigción de la aplicación iOS.

Con NSFileProtectionComplete activado en ese file, no puede acceder a él cuando el dispositivo está bloqueado.

No estoy seguro de si el file de descarga temporal se puede configurar para no utilizar la protección de datos, parece que NSURLSession no lo expone.

Fuente: Guía de distribución de aplicaciones