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.
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"];
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).