containerURLForSecurityApplicationGroupIdentifier: da diferentes resultados en iPhone y Watch simulator

Creé una aplicación WatchKit con la plantilla XCode pnetworkingeterminada. Agregué un derecho de grupo de aplicaciones para el objective de iOS, el objective de la aplicación Watchkit y el objective de la extensión de la aplicación Watchkit. (este es el nombre del grupo de aplicaciones: group.com.lombax.fiveminutes) Luego, intenté acceder a la URL de la carpeta compartida tanto con la aplicación iOS como con la extensión WatchKit:

Extensión:

@implementation ExtensionDelegate - (void)applicationDidFinishLaunching { // Perform any final initialization of your application. NSURL *test = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:@"group.com.lombax.fiveminutes"]; } 

Aplicación de iOS:

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Override point for customization after application launch. NSURL *test = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:@"group.com.lombax.fiveminutes"]; // ... } 

Sin embargo, la test NSURL es diferente:

En iOS:

file: /// Users / Lombardo / Library / Developer / CoreSimulator / Devices / 38B983DB-342F-4A47-8C26-5D2C92CDB666 / data / Containers / Shanetworking / AppGroup / 8DEE182E-AFE6-47DD-BA2B-6B0520158A8B /

en reloj:

file: /// Usuarios / Lombardo / Biblioteca / Desarrollador / CoreSimulator / Dispositivos / BF52D613-25FF-4092-A5B2-9C3F1B616160 / data / Containers / Shanetworking / AppGroup / CECB5EFC-7FBD-4C84-A878-1314CB7CF211 /

Y por esta razón no puedo compartir datos entre la aplicación iOS y la extensión WatchKit.

Yo cañón bash en un dispositivo real ya que no tengo WatchOS 2.0 en mi Apple Watch. ¿Algún consejo? Gracias

ACTUALIZACIÓN Hice algunas otras testings:

  • Instalado WatchOS 2, el problema aún persiste en dispositivos reales.

Esta es la URL de la tienda para mi iPhone:

NSURL * @ "file: ///private/var/mobile/Containers/Shanetworking/AppGroup/3D05D159-94D6-409C-9A38-90E0830D0C3F/FiveMinutes.sqlite"

Y esta es la URL de la tienda para mi Reloj:

NSURL * @ "file: ///private/var/mobile/Containers/Shanetworking/AppGroup/F1E89377-F456-4FC2-BAAC-3DD705EF381A/FiveMinutes.sqlite"

Las dos aplicaciones leen y escriben a desde dos files .sqlite diferentes.

  • En el simulador, si .sqlite una de las URL, tanto el simulador de iOS como Watch simulator pueden leer y escribir el mismo file .sqlite y compartir el contenido. Sin embargo, esto no es posible en dispositivos reales ya que la extensión Watch no puede escribir en la ruta iOS:

URL: file: ///private/var/mobile/Containers/Shanetworking/AppGroup/3D05D159-94D6-409C-9A38-90E0830D0C3F/FiveMinutes.sqlite opciones: (null) … error devuelto Error Domain = NSCocoaErrorDomain Code = 512 " El file no se pudo save ". UserInfo = {reason = Error al crear el file; code = 2} con el dictionary userInfo {reason = "Error al crear el file; código = 2"; }

Ok, creo que he encontrado mi respuesta. Recordé que con la transición a Watch OS 2, el código de extensión ahora se ejecuta directamente en Apple Watch, y no más en el iPhone emparejado. Entonces parece obvio que los dos dispositivos no comparten el mismo almacenamiento.

Lo primero que hice fue crear un nuevo proyecto, a partir de un proyecto iOS base, y luego agregar un objective de aplicación Watch OS 1 (versión anterior). En este caso, los directorys eran idénticos y podían comunicarse:

Ver Ruta: file: /// Usuarios / Lombardo / Biblioteca / Desarrollador / CoreSimulator / Devices / BF52D613-25FF-4092-A5B2-9C3F1B616160 / data / Containers / Shanetworking / AppGroup / 30B39103-CEEB-4C64-9531-FB27DC40180D /

Archivo de ruta de iOS: /// Usuarios / Lombardo / Biblioteca / Desarrollador / CoreSimulator / Devices / BF52D613-25FF-4092-A5B2-9C3F1B616160 / data / Containers / Shanetworking / AppGroup / 30B39103-CEEB-4C64-9531-FB27DC40180D /

Luego, hice lo primero que cada progtwigdor debería hacer: leer los documentos . En la PRIMERA PÁGINA de la guía de transición de WatchOS 2, hay esta oración:

Su extensión ahora almacena files y datos en Apple Watch. Cualquier dato que no sea parte de su aplicación Watch o el package de la extensión WatchKit debe searchse desde la networking o desde la aplicación iOS asociada que se ejecuta en el iPhone del usuario. No puede confiar en un contenedor de grupo compartido para intercambiar files con su aplicación iOS. Obtener files implica transferirlos de forma inalámbrica a Apple Watch.