macos networking nsurlsession

macos - NSURLSession con extensión compartida devuelve-995 en OSX



networking (1)

(Tenga paciencia, todavía no tengo un representante para hacer un comentario, así que tengo que responder y, a pesar de la posibilidad de que haya encontrado un error, la última parte que agrego podría ayudar a otros)

Cuando utilice una sesión NSURLSession, cualquier carga / descarga en segundo plano que finalice iniciará su aplicación principal. Esto se detalla en la página Escenarios comunes .

Como muestra que lo ha hecho, debe configurar NSURLSessionConfiguration con sharedContainerIdentifier :

let configuration = NSURLSessionConfiguration.backgroundSessionConfigurationWithIdentifier(uniqueId) configuration.sharedContainerIdentifier = Config.appGroupName urlSession = NSURLSession.init(configuration: configuration, delegate: self, delegateQueue: nil)

También debes asegurarte de que tanto la extensión de tu aplicación como la de tu aplicación principal estén triplemente marcadas en la opción ''Grupos de aplicaciones'' en Xcode (estoy viendo Xcode 8.1), lo que significa:

  • El nombre del grupo de aplicaciones es el mismo tanto para la aplicación como para la extensión ( ! )
  • la marca al lado de Add the App Group entitlements in the entitlement file
  • la marca al lado de Add the App Groups feature to your App ID
  • la marca al lado de Add App Groups to your App ID

Y los cheques deben estar allí tanto en la aplicación como en la extensión.

Estoy un poco oxidado al agregar estos, pero mi recuerdo es que estos no están listados en el orden correcto, por ejemplo, tienes que ''Agregar grupos de aplicaciones a tu ID'' antes de poder consultarlos en la aplicación y la extensión, pero podría ser incorrecto.

Avanzado : bibliotecas de terceros en extensiones de aplicaciones.

En cuanto al proyecto github nst/STTwitter , una biblioteca de REST de Twitter de terceros, necesitaron agregar una identificación de grupo configurable para permitir establecer NSURLSessionConfiguration sharedContainerIdentifier a la ID de grupo del usuario de la biblioteca.

De nuevo puedo estar equivocado, pero parece que sería un problema general cuando utilizo bibliotecas de terceros en una extensión de aplicación. Por ejemplo, acabo de enterarme de este error cuando trato de usar el SDK de ChromeCast y esta podría ser la patada en los pantalones .

Estoy tratando de cargar datos usando NSURLSession con una tarea de fondo desde una extensión de compartir OSX.

Tan pronto como empiezo la tarea, se vuelve a llamar al delegado con el mensaje de error menos útil del mundo:

The operation couldn’t be completed. (NSURLErrorDomain error -995.)

No hay otra información en el objeto NSError, ni en la consola.

Después de buscar en Internet, la única pista que tengo es para asegurarme de haber configurado el configuration.sharedContainerIdentifier correctamente, sin embargo, ya lo he hecho:

let configuration = NSURLSessionConfiguration.backgroundSessionConfigurationWithIdentifier(uniqueId) configuration.sharedContainerIdentifier = Config.appGroupName urlSession = NSURLSession.init(configuration: configuration, delegate: self, delegateQueue: nil)

Luego preparo la solicitud y creo la tarea:

let task = self.urlSession!.dataTaskWithRequest(request) self.tasks.append(task) task.resume()

Tenga en cuenta que todo funciona perfectamente desde mi aplicación principal. Es solo la extensión de intercambio que falla.

¿Qué otros problemas podrían causar el error -995?