2015-09-18 14 views
7

Ho creato un'applicazione WatchKit con il modello XCode predefinito. Ho aggiunto un diritto al gruppo app per la destinazione iOS, alla destinazione app Watchkit e alla destinazione estensione app Watchkit. (Questo è il nome del gruppo app: group.com.lombax.fiveminutes) Poi, ho provato ad accedere all'URL cartella condivisa sia con l'App iOS e l'estensione WatchKit:containerURLForSecurityApplicationGroupIdentifier: fornisce risultati diversi su simulatore iPhone e Watch

Estensione:

@implementation ExtensionDelegate 

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

iOS App:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    // Override point for customization after application launch. 

    NSURL *test = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:@"group.com.lombax.fiveminutes"]; 
// ... 
} 

Tuttavia, il test NSURL è diverso:

Su iOS:

01.235.164,106174 millions

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

su Watch:

file: /// Users/Lombardo/Library/Developer/CoreSimulator/Devices/BF52D613-25FF-4092-A5B2-9C3F1B616160/dati/Contenitori/Shared/AppGroup/CECB5EFC-7FBD-4C84-A878-1314CB7CF211/

E per questo motivo non sono in grado di condividere i dati tra l'app iOS e l'estensione WatchKit.

I cannon provano su un dispositivo reale poiché non ho WatchOS 2.0 sul mio Apple Watch. Qualche consiglio? Grazie

UPDATE Ho fatto alcuni altri test:

  • installata watchos 2, il problema persiste su dispositivi reali.

Questo è l'URL negozio per il mio iPhone:

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

E questa è l'url serbo per mia selezione:

NSURL * @" file: /// privat e/var/mobile/Contenitori/Shared/AppGroup/F1E89377-F456-4FC2-BAAC-3DD705EF381A/FiveMinutes.sqlite"

Le due applicazioni di leggere e scrivere due diversi .sqlite i file-da.

  • sul simulatore, se mi codificare uno degli URL, sia simulatore di iOS e Guarda il simulatore sono in grado di leggere-scrivere lo stesso file di .sqlite e condividere il contenuto. Tuttavia, questo non è possibile su dispositivi reali poiché l'estensione della vigilanza non può scrivere al percorso iOS:

URL: file: /// private/var/mobile/Contenitori/Shared/AppGroup/3D05D159-94D6 -409C-9A38-90E0830D0C3F/FiveMinutes.sqlite opzioni: (null) ... errore restituito Errore Domain = NSCocoaErrorDomain Code = 512 "Impossibile salvare il file." UserInfo = {reason = Impossibile creare il file; code = 2} con dizionario userInfo { reason = "Impossibile creare il file; code = 2"; }

+0

Ma hai provato a mettere effettivamente i file e accedervi? Dio sa come funziona il simulatore e quali cartelle usa. Parlando di watchOS 2.0. Quelle sono app native ora. Non dovresti aggiungere anche la titolarità per guardare l'app? – Yaroslav

+0

Sì, ho provato a scrivere file e sono collocati in posizioni diverse, iOS non può accedere al file di orologio e guardare non può accedere al file iOS. Ho aggiunto le autorizzazioni all'app per iOS, l'app di controllo e l'estensione dell'orologio. Il diritto sembra essere aggiunto bene, dal momento che se modifico la stringa di autorizzazione su qualcosa di diverso, NSURL restituito diventa nullo – LombaX

risposta

12

Ok, penso di aver trovato la mia risposta. Mi sono ricordato che con il passaggio a Watch OS 2 il codice di estensione ora viene eseguito direttamente su Apple Watch e non più sull'app iPhone abbinato. Quindi sembra ovvio che i due dispositivi non condividano lo stesso spazio di archiviazione.

La prima cosa che ho fatto è stato creare un nuovo progetto, partendo da un progetto iOS di base, e quindi aggiungendo un obiettivo app di Watch OS 1 (versione precedente). In questo caso, le directory erano identici e potrebbero comunicare:

Guarda Percorso: file: /// Users/Lombardo/Library/Developer/CoreSimulator/Devices/BF52D613-25FF-4092-A5B2-9C3F1B616160/dati/Contenitori/Shared/AppGroup/30B39103-CEEB-4C64-9531-FB27DC40180D/

iOS percorso file: /// Users/Lombardo/Library/Developer/CoreSimulator/Devices/BF52D613-25FF-4092-A5B2-9C3F1B616160/dati/Contenitori/Shared/AppGroup/30B39103-CEEB-4C64-9531-FB27DC40180D/

Poi, ho fatto la prima cosa che ogni programmatore dovrebbe do: leggi i documenti. Nel PRIMA PAGINA della guida di transizione watchos 2 c'è questa frase:

tua estensione ora memorizza i file e dati su Apple Watch. Tutti i dati che non fanno parte dell'app Watch o del bundle di estensioni di WatchKit devono essere recuperati dalla rete o dall'app iOS compatibile in esecuzione sull'iPhone dell'utente. Non puoi fare affidamento su un contenitore di gruppo condiviso per scambiare file con la tua app iOS. Il recupero dei file implica il loro trasferimento wireless a Apple Watch.

Problemi correlati