2013-04-23 5 views
8

Ich bereite gerade eine zweite Version einer meiner Apps vor. Ich werde diese neue Version unter einer neuen Paket-ID aus der vorherigen Version veröffentlichen. In der vorherigen Version habe ich den iCloud-Schlüsselwertspeicher verwendet, um einige Einstellungen und sonstige Informationen zu speichern. Hier Datei meine Ansprüche für v1:Gemeinsame Schlüsselwertspeicherung zwischen mehreren nicht funktionierenden Apps teilen

<?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> 

Nachdem Sie die Anweisungen auf http://developer.apple.com/library/mac/#documentation/General/Conceptual/iCloudDesignGuide/Chapters/iCloudFundametals.html unter „Konfigurieren von Common Key-Wertspeicherung für mehrere Apps“, hier ist was meine v2 Ansprüche Datei wie folgt aussieht:

<?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> 

Nach für die Dokumentation sollte v2 jetzt aus demselben Schlüsselwertspeicher wie die v1 lesen. Wenn es jedoch einen einfachen Test durchführt, schlägt es fehl. So vervielfältige ich.

  1. Öffnen Sie MyApp 1.0. Schreiben Sie einen bool-Wert von "YES" auf den Schlüssel "InstalledVersion1" in den Schlüsselwertspeicher.

    NSUbiquitousKeyValueStore* store = [NSUbiquitousKeyValueStore defaultStore]; 
    [store setBool:YES forKey:@"InstalledVersion1"]; 
    
  2. Öffnen Sie MyApp 2.0 und lesen Sie diesen Wert aus dem Geschäft.

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

Dieser druckt {}.

Es sollte so etwas wie { "InstalledVersion1" = 1; }

drucken ... aber es ist nicht.

Was mache ich falsch? Muss ich nur etwas geduldiger sein, damit der Laden synchronisiert wird?

Geräteprotokolle, wenn Sie interessiert sind: https://gist.github.com/dlo/688f187c75fd1b1fdc78 (nach dem Ausführen p (void)[[NSUbiquitousKeyValueStore defaultStore] _printDebugDescription] im Debugger).

Antwort

4

Die Antwort ist irgendwie lächerlich, aber hier gilt es für jeden, der ein ähnliches Problem hat.

Hier ist was ich getan habe.

  1. Ich hatte einen Eintrag in meinem iCloud-Speicher namens CommonDocuments. Ich habe es gelöscht.
  2. Ich habe die iCloud Document-Übertragung über Mobilfunkdaten aktiviert.

Nach drei Tagen alles versucht, stellt sich heraus, dass ein obskures Element in iCloud-Speicher und scheinbar unabhängig Einstellung das Problem behoben.

Wenn diese beiden Dinge nicht für Sie tun, wünsche ich Ihnen Glück. Godspeed.