Configuración de la session de background AFNetworking para la extensión iOS 8

Actualmente estoy desarrollando una extensión de la aplicación iOS 8, y estoy teniendo dificultades con esta última pieza. En el rest de mi aplicación, utilizo una subclass AFHTTPSessionManager que ejemplifico así:

+ (MYAPIClient *)shanetworkingClient { static MYAPIClient *_shanetworkingClient = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ _shanetworkingClient = [[MYAPIClient alloc] initWithBaseURL:[NSURL URLWithString:kMYBaseURL]]; _shanetworkingClient.requestSerializer = [[MYAPIRequestSerializer alloc] init]; _shanetworkingClient.responseSerializer = [[MYAPIResponseSerializer alloc] init]; }); return _shanetworkingClient; } 

Cuando acabo de usar este cliente API normal, simplemente publicar algún formulario de text en una extensión compartida funcionó bien, e incluso funciona para las imágenes a veces (normalmente falla), pero sé que necesito usar una configuration de session en segundo plano. Así que hice un cliente API muy similar con una configuration de configuration de background como esta:

 + (MYAPIClient *)shanetworkingBackgroundClient { static MYAPIClient *_shanetworkingClient = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ NSURLSessionConfiguration *sessionConfiguration = [NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier:@"com.me.myapp.backgroundconfiguration"]; _shanetworkingClient = [[MYAPIClient alloc] initWithBaseURL:[NSURL URLWithString:kMYBaseURL] sessionConfiguration:sessionConfiguration]; _shanetworkingClient.requestSerializer = [[MYAPIRequestSerializer alloc] init]; _shanetworkingClient.responseSerializer = [[MYAPIResponseSerializer alloc] init]; }); return _shanetworkingClient; } 

El problema es que, cuando hago mi POST con este cliente, obtengo estos errores cada vez.

 Aug 21 19:19:07 MY-iPhone Share[6290] <Notice>: Attempted to create a task in a session that has been invalidated Aug 21 19:19:07 MY-iPhone Share[6290] <Warning>: *** Assertion failure in -[MYAPIClient setDelegate:forTask:], /Users/me/Documents/myproject/myproduct/Pods/AFNetworking/AFNetworking/AFURLSessionManager.m:337 Aug 21 19:19:07 MY-iPhone Share[6290] <Error>: *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Invalid parameter not satisfying: task' 

¿Algún consejo sobre cómo hacer que esto funcione? Muchas gracias.

De los documentos :

Si la extensión de su aplicación inicia una tarea NSURLSession segundo NSURLSession , también debe configurar un contenedor compartido al que puedan acceder tanto la extensión como su aplicación contenedora. Use la propiedad shanetworkingContainerIdentifier de la class NSURLSessionConfiguration para especificar un identificador para el contenedor compartido para que pueda acceder a él más tarde.

Y:

Si intenta utilizar la creación de una session de URL desde la extensión de su aplicación, pero no puede establecer esta propiedad en un valor válido, la session de URL se invalida al crearla.

Consulte Compartir datos con su aplicación contenedora para get orientación sobre cómo configurar un contenedor compartido.

En su ejemplo, agregaría algo como:

 sessionConfiguration.shanetworkingContainerIdentifier = @“com.me.myapp.containerIdentifier”; 

Necesitará una session en segundo plano para la aplicación contenedora y una para su extensión.

Asegúrese de que shanetworkingContainerIdentifier sea el mismo identificador que el identificador de grupo que registró tanto para la aplicación host como para la aplicación de extensión.

 config.shanetworkingContainerIdentifier = @“com.mycompany.myappgroupidentifier”; 

Puede registrar un identificador de grupo en la pestaña del proyecto Capacidades Xcode.