8

我正准备推出我的一个应用程序的第二个版本。我将在以前版本的新捆绑 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. 打开我的应用程序 1.0。将布尔值“YES”写入键值存储键“InstalledVersion1”。

    NSUbiquitousKeyValueStore* store = [NSUbiquitousKeyValueStore defaultStore];
    [store setBool:YES forKey:@"InstalledVersion1"];
    
  2. 打开 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]调试器中运行后)。

4

1 回答 1

4

答案有点荒谬,但在这里它适用于面临类似问题的任何其他人。

这就是我所做的。

  1. 我的 iCloud 存储中有一个名为 CommonDocuments 的条目。我删除了它。
  2. 我打开了通过蜂窝数据传输 iCloud 文档。

经过三天的尝试,事实证明 iCloud 存储中的一个不起眼的项目和看似无关的设置是解决问题的原因。

如果这两件事不适合你,我祝你好运。神速。

于 2013-04-26T05:16:26.603 回答