iCloud权利被拒绝

时间:2012-04-19 18:17:40

标签: ios core-data ios5 icloud entitlements

我已经在我的(现有)应用程序上工作了一段时间,以添加对iCloud同步的支持。总的来说,我有3个版本的应用程序:

a)常规iPhone版本
b)lite(免费)iPhone版本
c)iPad版

我想使用iCloud在所有3个版本/设备之间进行核心数据存储同步。我已经实现了,我在设备上的开发版本运行得很好。

昨天我决定提交iPhone版本,但他们被拒绝了:

  

无效的代码签名权利 - 应用包的签名包含不受支持的权利值。对于com.apple.developer.ubiquity-container-identifiers权利,数组中的第一个值必须包含Apple在配置文件中提供的前缀,后跟一个包标识符后缀。捆绑包标识符必须与您的某个应用程序或允许用作iCloud容器标识符的其他应用程序的捆绑包标识符匹配。

     

具体而言,不支持[我的应用]中关键“com.apple.developer.ubiquity-container-identifiers”的值“[teamid] .com。[我自己。[somename]”。

我真的不知道这些标识符应该是什么样子。在这个页面上:https://developer.apple.com/library/ios/#documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/iCloud/iCloud.html#//apple_ref/doc/uid/TP40007072-CH5-SW1他们说我的其他应用程序的容器...我是否必须为我的应用程序的3个版本添加3个容器?到目前为止,我在project / targets / summary / entitlements下配置:

[x] iCloud Key-Value Store:com。[我自己]。[somename]
iCloud Containers:com。[我自己]。[somename]

适用于所有3个版本(相同的标识符)。我需要准确配置什么,以便所有3个版本将通过iCloud同步其核心数据存储数据库?

3 个答案:

答案 0 :(得分:2)

根据iCloud Design Guide: iCloud Fundamentals,您共享iCloud容器的所有应用都可以使用单个iCloud容器(如果这是您所希望的)。这里的问题是主要(第一个)容器ID必须是正在开发的当前应用 Bundle ID ,或者 Bundle ID 您之前提交的任何应用(共享相同的团队ID )。

我将举例,

让我们假设您的应用常规iPhone应用(a)有一个 Bundle ID com.yourteam.iphoneapp ,它是您首先提交的并且可用的在App Store上。然后,您必须为所有其他版本提供与主iCloud容器ID相同的ID。

以上是上述文件中的相关部分:

  

在Xcode目标编辑器的摘要选项卡中,您可以请求访问as   您的应用程序所需的许多无处不在的容器。例如,说   您提供应用的免费和付费版本。你想要用户,谁   升级,以保留对其iCloud文档的访问权限。或者,也许你   提供两个互操作且需要相互访问的应用程序   文件。在这两个示例中,您都可以获得所需的访问权限   指定一个普通的普遍容器,然后请求访问   它来自每个应用程序。

     
      
  1. 选择一个启用iCloud的应用程序作为普通ubiquity容器的主要应用程序。您选择的应用程序可以是当前的   您正在开发的,或您提交的其他应用程序   在App Store中分发,其权利使用同一个团队   ID。
  2.   

答案 1 :(得分:1)

您现在可能已经解决了这个问题,但答案是您只需在所有应用中使用相同的普遍容器标识符。你只需要一个,它不依赖于应用程序名称:通知Apple告诉你使用“[teamid] .com。[我自己]。[ somename ]”not“[teamid] .com [自己]。[应用程序名称]”。使用应用程序之间一致的“某个名称”,而不是“应用程序名称”。

答案 2 :(得分:0)

enter image description here您需要创建3个启用iCloud的临时配置文件。运行相同版本应用的设备可以在同一个iCloud容器上共享数据。但是,如果您希望任何设备运行应用程序的这三个版本中的任何一个以共享数据,那么您需要在每个版本的“权利”部分中添加这些标识符。

来自http://www.raywenderlich.com/6015/beginning-icloud-in-ios-5-tutorial-part-1

的iCloud有很好的教程

编辑:

我为你的案例添加了一张示例图片。此外,以下文本摘自该网站上的教程:

这里我们使用一种你还没见过的新方法URLForUbiquityContainerIdentifier。此方法允许您传入容器标识符(就像您之前在iCloud容器部分中设置的那样),它将返回一个用于访问iCloud存储中文件的URL。

您需要在启动时为要访问的每个容器调用此选项,以授予您的应用访问该URL的权限。如果您将nil传递给方法(就像我们这样做),它会自动返回为项目设置的第一个iCloud容器。由于我们只有一个容器,因此它非常简单。