我准备推出其中一个应用的第二个版本。我将在以前版本的新捆绑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相同的键值存储中读取。但是,在执行简单测试时,它会失败。这是我重现的方式。
打开MyApp 1.0。将键入“InstalledVersion1”的bool值“YES”写入键值存储区。
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]
之后)。
答案 0 :(得分:4)
这个答案有点荒谬,但是对于遇到类似问题的其他人来说也是如此。
这就是我的所作所为。
经过三天的尝试后,事实证明iCloud存储中的一个不起眼的项目和看似无关的设置是解决这个问题的原因。
如果这两件事不适合你,我祝你好运。一帆风顺。