我正准备推出我的一个应用程序的第二个版本。我将在以前版本的新捆绑 ID 下发布这个新版本。在之前的版本中,我使用了 iCloud 键值存储来保存一些设置和其他杂项信息。这是我的 v1 权利文件:
<?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>
按照http://developer.apple.com/library/mac/#documentation/General/Conceptual/iCloudDesignGuide/Chapters/iCloudFundametals.html在“为多个应用程序配置通用键值存储”下的说明后,这就是我的 v2权利文件如下所示:
<?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>
根据文档,v2 现在应该从与 v1 相同的键值存储中读取。但是,在执行简单测试时,它会失败。这是我如何复制的。
打开我的应用程序 1.0。将布尔值“YES”写入键值存储键“InstalledVersion1”。
NSUbiquitousKeyValueStore* store = [NSUbiquitousKeyValueStore defaultStore]; [store setBool:YES forKey:@"InstalledVersion1"];
打开 MyApp 2.0 并从商店中读取此值。
NSUbiquitousKeyValueStore* store = [NSUbiquitousKeyValueStore defaultStore]; [store synchronize]; NSLog(@"%@", [store dictionaryRepresentation]);
这打印{}
。
它应该打印类似{ "InstalledVersion1" = 1; }
……但事实并非如此。
我究竟做错了什么?我是否只需要多一点耐心让商店同步?
感兴趣的设备日志:https ://gist.github.com/dlo/688f187c75fd1b1fdc78 (在p (void)[[NSUbiquitousKeyValueStore defaultStore] _printDebugDescription]
调试器中运行后)。