Comunicarse con / abrir Conteniendo aplicación desde la extensión Compartir

Aquí es lo que he intentado que NO ha funcionado:

  • Usando openURL para intentar abrir la aplicación contenedora

Esto es lo que pensé que no funcionaría:

  • Usando notifications locales para proporcionar un enlace a la aplicación contenedora (creando la notificación local desde la extensión)

Aquí hay opciones que estoy considerando:

  • Utilizando un UIDocumentInteractionController y un tipo de extensión de file personalizado para proporcionar un enlace a mi aplicación contenedora (y solo a mi aplicación contenedora)
  • Iniciar una session NSURL "falsa" para get la siguiente funcionalidad: en iOS, si su extensión no se ejecuta cuando se completa una tarea en segundo plano, el sistema inicia su aplicación contenedora en segundo plano y llama a la aplicación: handleEventsForBackgroundURLSession: completionHandler: método de delegado de la aplicación .

Se confirma que UIDocumentInteractionController funciona en Xcode 6.5, pero el flujo es un poco raro. La cosa de NSURL debería funcionar también, pero también es un poco sospechosa. ¿Alguien tiene alguna otra idea para que mi aplicación contenedora se abra desde una extensión compartida, o una idea para comunicarse con ella desde una extensión compartida?

He confirmado que la forma NSURLSession (segunda viñeta bajo las opciones "considerando" arriba) realmente funciona. Todavía estoy resolviendo algunos problemas, pero aquí están los conceptos básicos. Usando este método, de hecho, puedes abrir tu aplicación desde una extensión compartida.

Este método requiere 3 pasos principales, como sigue:

  1. Realice un NSURLSession de background en una extensión de acciones.
  2. Inicie una tarea de descarga.
  3. Salida de llamada (0).

Asegúrese de que lo que está descargando toma el time suficiente para que la extensión finalice antes de que finalice la tarea de descarga.

 NSString *address = @"https://googledrive.com/host/0B5zObXR9UzgmbFpob2J5eXpjNXc/file3m"; self.mySession = [self configureMySession]; NSURL *url = [NSURL URLWithString:address]; NSURLSessionTask *myTask = [self.mySession downloadTaskWithURL:url]; [myTask resume]; exit(0); 

Luego, en la class UIApplicationDelegate de la aplicación contenedora, implementa

 application:handleEventsForBackgroundURLSession:completionHandler: 

método. Este método se invoca cuando la tarea de descarga finaliza después de que su extensión haya finalizado. Luego, en este método, puede llamar

 [[UIApplication shanetworkingApplication] openURL:url]; 

o hacer algunas otras cosas en su aplicación contenedora.

El principal problema con este método es que hay un retraso entre el momento en que termina la extensión y el momento en que la aplicación que contiene se inicia. La principal ventaja de este método sobre el método UIDocumentInteractionController es que no se necesita una interacción extra del usuario. Más detalles vendrán a medida que continúe experimentando.