¿Cargando files de video mientras la aplicación iOS está en segundo plano?

Actualmente estoy trabajando en una aplicación de iOS que implica grabar y upload videos (desde la camera incorporada) a un server.

Todo funciona razonablemente bien y dandy, pero para una nueva versión, el cliente ha solicitado una nueva característica: continuar este process sin necesitar la aplicación en la pantalla y activa.

En la actualidad, graba un video, se almacena como un MP4 en el sistema de files y un subprocess de background carga el file en el server. Todo esto sucede mientras la aplicación está abierta, culminando en una pantalla que básicamente le indica que espere hasta que el process haya finalizado.

Si presiona el button de inicio para "minimizar" la aplicación (no domino la terminología de iOS, perdóneme), actualmente todos los processs de carga están en pausa. El cliente quiere tenerlo para que pueda minimizar y hacer algo completamente diferente a medida que este process continúa, con una notificación que se muestra una vez que se completan las cargas.

Mi entendimiento es que iOS ofrece algunos casos especiales para download , transmitir música y localizar cosas.

Supuestamente, una vez se podía get diez minutos de time de background mientras se minimizaba la aplicación para terminar las tareas, después de lo cual iOS detenía forzosamente todo hasta que la aplicación volvía a estar activa y de nuevo. Aparentemente, esto ha cambiado en las versiones más nuevas de iOS, lo que significa que ya no puedes confiar en una figura específica, pero de todos modos, diez minutos no fueron lo suficientemente buenos.

Puedo pensar en forms hacky de abusar de las funciones anteriores, pero estoy medio preocupado de que Apple pueda descubrir esto durante el process de envío de iTunes. Realmente estoy buscando un método más limpio: ¿cómo sigo subiendo videos mientras se minimiza la aplicación?

Estoy asumiendo que hay una solución: ¿Dropbox puede manejar esta situación?

Sorprendentemente llegué a algún lado con esto, a pesar de que algunas guías sugirieron que era prácticamente imposible e incluso Dropbox admitió que tenía que hacer una cosa hacky basada en la location .

El código estaba utilizando la class NSURLSession, y para cargar, utiliza su método uploadTaskWithStreamedRequest (), pasando una request HTTP y obteniendo una instancia de NSURLSessionUploadTask a cambio.

Sin embargo, lo que no me quedó claro de inmediato fue que la "reanudación" de esa tarea llevó a que los files se cargaran independientemente del rest de la aplicación, es decir, cuando la aplicación se networkinguce al mínimo, esta tarea continúa hasta que se completa o iOS lo obliga a pausa.

En cierto sentido, ya había logrado lo que pedí sin darme count, sin embargo, esta tarea aún puede ser interrumpida por iOS después de unos segundos. El rest de la aplicación también está en pausa, por lo que la comunicación se ve obstaculizada hasta que la aplicación vuelve al frente nuevamente.

El truco es estos dos methods:

uploadTaskID = UIApplication.shanetworkingApplication().beginBackgroundTaskWithExpirationHandler({})

y

UIApplication().shanetworkingApplication().endBackgroundTask(uploadTaskID)

con estos en su lugar, cualquier código después de la function "comenzar" se ejecutará independientemente de si la aplicación está minimizada, y lo hará hasta que se llame a la function "final". Con un poco de ajustes, he podido hacer que los files se carguen secuencialmente y publicar una notificación cuando el process está hecho.

No he visto esta solución insinuada, así que podría ser una mala idea, pero aparentemente funciona.