2013-04-23 10 views
8

Przygotowuję się do uruchomienia drugiej wersji jednej z moich aplikacji. Mam zamiar wydać tę nową wersję pod nowym identyfikatorem pakietu z poprzedniej wersji. W poprzedniej wersji użyłem magazynu klucz-wartość iCloud, aby zapisać niektóre ustawienia i inne różne informacje. Oto złożyć moje uprawnienia do V1:Wspólne przechowywanie kluczy i wartości między wieloma aplikacjami, które nie działają

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

Po zgodnie z instrukcjami http://developer.apple.com/library/mac/#documentation/General/Conceptual/iCloudDesignGuide/Chapters/iCloudFundametals.html pod „Konfigurowanie wspólny klucz-wartość do przechowywania wielu aplikacji”, oto co mój plik uprawnienia v2 wygląda następująco:

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

Według do dokumentów, v2 powinien teraz zostać odczytany z tego samego magazynu klucz-wartość jak v1. Jednak podczas wykonywania prostego testu nie powiedzie się. Oto jak się rozmnażam.

  1. Otwórz MyApp 1.0. Wpisz wartość bool "TAK", aby wprowadzić klucz "InstalledVersion1" do magazynu kluczy.

    NSUbiquitousKeyValueStore* store = [NSUbiquitousKeyValueStore defaultStore]; 
    [store setBool:YES forKey:@"InstalledVersion1"]; 
    
  2. Otwórz MyApp 2.0 i odczytaj tę wartość ze sklepu.

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

Drukuje {}.

Należy wydrukować coś podobnego { "InstalledVersion1" = 1; }

... ale tak nie jest.

Co robię źle? Czy po prostu muszę być trochę bardziej cierpliwy, aby sklep mógł się zsynchronizować?

Logi urządzeń, jeśli jesteś zainteresowany: https://gist.github.com/dlo/688f187c75fd1b1fdc78 (po uruchomieniu p (void)[[NSUbiquitousKeyValueStore defaultStore] _printDebugDescription] w debugerze).

Odpowiedz

4

Odpowiedź jest dość absurdalna, ale w tym przypadku dotyczy ona każdego, kto ma podobny problem.

Oto co zrobiłem.

  1. Miałem wpis w moim magazynie danych iCloud o nazwie CommonDocuments. Usunąłem to.
  2. Włączono iCloud Przesyłanie dokumentów przez dane komórkowe.

Po trzech dniach próbowania wszystkiego okazuje się, że problem stanowi ukryty przedmiot w magazynie iCloud i pozornie niepowiązane ustawienie.

Jeśli te dwie rzeczy nie zrobią tego za Ciebie, życzę ci szczęścia. Życzenia powodzenia.

Powiązane problemy