2013-04-23 8 views
8

Mi sto preparando a lanciare una seconda versione di una delle mie app. Ho intenzione di rilasciare questa nuova versione con un nuovo ID bundle della versione precedente. Nella versione precedente, ho utilizzato l'archivio dei valori-chiave di iCloud per salvare alcune impostazioni e altre informazioni varie. Ecco il file i miei diritti per v1:Condivisione di uno spazio di valori-chiave comune tra più app non funzionanti

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 
<plist version="1.0"> 
<dict> 
    <key>get-task-allow</key> 
    <true/> 
    <key>com.apple.developer.ubiquity-kvstore-identifier</key> 
    <string>$(AppIdentifierPrefix)$(CFBundleIdentifier)</string> 
    <key>keychain-access-groups</key> 
    <array> 
      <string>$(AppIdentifierPrefix)$(CFBundleIdentifier)</string> 
    </array> 
</dict> 
</plist> 

Dopo aver seguito le istruzioni sul http://developer.apple.com/library/mac/#documentation/General/Conceptual/iCloudDesignGuide/Chapters/iCloudFundametals.html in "Configurazione Common valore-chiave di archiviazione per applicazioni multiple", ecco cosa il mio file di diritti v2 assomiglia:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 
<plist version="1.0"> 
<dict> 
    <key>com.apple.developer.ubiquity-kvstore-identifier</key> 
    <string>$(TeamIdentifierPrefix)com.companyname.MyApp</string> 
    <key>get-task-allow</key> 
    <true/> 
    <key>keychain-access-groups</key> 
    <array> 
      <string>$(AppIdentifierPrefix)$(CFBundleIdentifier)</string> 
    </array> 
</dict> 
</plist> 

Secondo ai documenti, v2 dovrebbe ora leggere dalla stessa memoria valore-chiave della v1. Tuttavia, quando si esegue un test semplice, fallisce. Ecco come riproduco.

  1. Aprire MyApp 1.0. Scrivi un valore bool di "SÌ" per inserire "InstalledVersion1" nell'archivio valore-chiave.

    NSUbiquitousKeyValueStore* store = [NSUbiquitousKeyValueStore defaultStore]; 
    [store setBool:YES forKey:@"InstalledVersion1"]; 
    
  2. Aprire MyApp 2.0 e leggere questo valore dal negozio.

    NSUbiquitousKeyValueStore* store = [NSUbiquitousKeyValueStore defaultStore]; 
    [store synchronize]; 
    NSLog(@"%@", [store dictionaryRepresentation]); 
    

Questo stampa {}.

Si dovrebbe stampare qualcosa come { "InstalledVersion1" = 1; }

... ma non lo è.

Cosa sto sbagliando? Devo essere un po 'più paziente per sincronizzare il negozio?

Registri di dispositivo se sei interessato: https://gist.github.com/dlo/688f187c75fd1b1fdc78 (dopo aver eseguito p (void)[[NSUbiquitousKeyValueStore defaultStore] _printDebugDescription] nel debugger).

risposta

4

La risposta è un po 'ridicola, ma qui va bene per chiunque abbia di fronte un problema simile.

Ecco cosa ho fatto.

  1. Avevo una voce nel mio archivio iCloud denominata CommonDocuments. L'ho cancellato.
  2. Ho attivato il trasferimento di documenti iCloud su dati cellulari.

Dopo tre giorni di tentativi, risulta che un elemento oscuro nello spazio di archiviazione iCloud e in un'impostazione apparentemente non correlata è ciò che ha risolto il problema.

Se queste due cose non lo fanno per te, ti auguro buona fortuna. Godspeed.

Problemi correlati