我可以授予我的应用程序对用户 iCloud 中所有数据的权利吗?

Posted

技术标签:

【中文标题】我可以授予我的应用程序对用户 iCloud 中所有数据的权利吗?【英文标题】:Can I give my app entitlements to all data in a user's iCloud? 【发布时间】:2012-07-09 18:02:04 【问题描述】:

例如,权利字典中的存储容器键是否可能接受“*”或“/”,从而允许我访问该用户的 iCloud 中的所有数据?

我不担心这个应用会被应用商店接受。

【问题讨论】:

我确信 Apple 有 iCloud API 的参考。你应该在那里检查。 我还没有苹果 ios/osx 开发人员帐户来访问 api 文档大声笑。希望很快能得到一个^.^ 你不应该需要一个。据我所知,these 所有人都可以访问。 嗯,是的,看来我看错了文档,谢谢 Michael 【参考方案1】:

没有。

而且,即使可以,也没有任何方法可以枚举这些数据。 -[NSFileManager URLForUbiquityContainerIdentifier:] 和朋友要求你知道你要访问的容器。 (你可以传递 nil,但这只是返回你可以访问的第一个容器,而不是所有容器的某个父容器。)

这是故意的。出于很好的理由,公共 API 并不意味着让您的应用程序干扰其他应用程序的存储(共享团队的相关应用程序除外)。您可能想阅读 Mac App Programming Guide 中的iCloud Storage(无需付费会员即可访问)。

那么,iCloud 偏好设置面板是如何做到的呢?嗯,这是个秘密。据推测,它要么使用私有 API,要么只是以 API 无法做到的方式直接与 iCloud Web 服务对话。您大概可以对其进行逆向工程,但这是您能够做到这一点的唯一方法。

【讨论】:

只是好奇,是不是可以通过查看我 Mac 上的“~/library/Mobile Documents”文件夹并遵循那里的命名方案来发现我想要访问哪些容器? 那么,如何从捆绑 ID 'com.melodis.soundhound-free' 获取容器 ID '356QY8883U~com~melodis~soundhound~free'? 更不用说这只会显示所有从 iOS 设备同步到 Mac 的容器,这与从 iOS 同步到 iCloud 或所有容器的所有容器不同从 Mac 同步到 iCloud(实际上可能几乎没有重叠)。 嗯,在我看来,到目前为止,我在我的 mac 上的每个启用了 iCloud 的应用程序(尽管不是很多)都会在 Mobile Docs 中创建一个容器,无论它是否在那里存储数据或不是。同样,虽然我没有看到 Apple 自己的应用程序(邮件、笔记、预览等)的捆绑种子 ID,但我确实看到了 Bloop 备忘录的捆绑 ID,因为它们在 Mobile Docs 中的容器是“2E337YPCZY~it~ bloop~memo”,除非这恰好是它们的捆绑包 ID 的一部分,看起来非常像种子 ID 此时,您似乎对逆向工程 iCloud 在 Lion(或 iOS 中?您同时拥有 iphone 和 osx 标签)中的工作方式感兴趣,而不是使用 iCloud API。这当然是一个有趣的项目,所以我不想阻止你尽可能地学习(和分享)。除非这在您的管辖范围内是非法的并且 IANAL 不保护我,在这种情况下,我确实想劝阻您。 :)

以上是关于我可以授予我的应用程序对用户 iCloud 中所有数据的权利吗?的主要内容,如果未能解决你的问题,请参考以下文章

授予用户对数据库中所有存储过程的执行权限?

授予对 SQL 数据库的权限

当用户未登录 iCloud 时,我可以使用 CloudKit 在我的应用程序中使用订阅吗?

iCloud 是不是会将 Documents 目录中的所有文件上传到云服务器?

我如何检查用户是不是切换了 iCloud 帐户?

授予用户对 db.* 的所有权限?