Dhi*_*pta 3 cocoa cocoa-touch ios icloud uidocument
我想构建一个基于 iCloud 的应用程序,可以在 Apple 平台、iOS 和 Mac 上运行。该应用程序将使用 iOS 上的 UIDocument 和 Mac 上的 NSDocument 来拥有基于文档的同步模型 - 在 iOS 上创建的文档将在 Mac 上可用,反之亦然。
我面临的具体问题是我想在两个应用程序上使用相同的 iCloud 容器。XCode 根据 App ID 为应用程序创建一个默认容器,两个应用程序的 ID 必须不同,因为这似乎是 Apple 的要求 - 没有两个应用程序可以具有相同的应用程序 ID,即使它们位于不同的平台上。
因此,我保留了默认创建的容器,并在 Mac 应用程序和 iOS 应用程序上添加了另一个容器。该应用程序似乎工作正常,我可以在两个应用程序中的正确位置创建一个新文件包,但我遇到了两个问题:
该容器未正确显示在 iCloud 设置管理屏幕中。在 XCode 的权利部分中,我将容器命名为com.mycompany.myapp.mycontainer两个应用程序中的容器。在 iOS 的设置屏幕(设置 -> 常规 -> 使用 -> 管理存储 -> 显示全部)中,我的应用程序被列为“mycontainer”,而不是我预期的应用程序的实际名称。是否可以在应用程序的 Info.plist 中提供名称和图标以使其正确列出?
我的 NSMetadataQuery 无法正常工作。我使用空应用程序模板制作了 iOS 应用程序,因此 Info.plist 未使用 CFBundleDocumentTypes 键正确设置,但我发现并修复了它。为了在 iOS 应用程序中触发 NSMetadataQuery,我使用:
[self.queryCloud setPredicate:[NSPredicate predicateWithFormat:@"%K like '*.myextension*'",NSMetadataItemFSNameKey]];
搜索范围设置如下:
[self.queryCloud setSearchScopes:[NSArray arrayWithObjects:NSMetadataQueryUbiquitousDocumentsScope, NSMetadataQueryUbiquitousDataScope, nil]];
我在建立容器的 URL 后运行查询,收到开始和完成收集通知,但从未收到来自NSMetadataQuery. 除非我继续创建一个新文档。如果我创建文档,那么我会收到更新通知,但仅限于该会话。下次我启动应用程序时,相同的设置不会向我提供任何来自 的更新通知NSMetadataQuery。
我究竟做错了什么?任何有关创建针对 Mac 和 iOS 的 iCloud 文档应用程序的文章的指针将不胜感激!欢迎提出建议、想法。
我不知道你的 NSMetadataQuery 问题,但添加共享 iCloud 容器很容易,只要你明白:
选择一个将作为您的共享云容器的应用程序 ID。无论是 iOS 还是 Mac OS X,您都需要发布此应用程序,并且必须获得 Apple 审核团队*的批准,然后您的 iCloud 容器才能可供任何其他应用程序使用。例如
com.company.myawesomeapp
Run Code Online (Sandbox Code Playgroud)请注意,您不得在应用程序 ID ( com.company.myawesomeapp .cloudcontainer ) 之后使用容器名称,只需使用您的应用程序 ID!
选择第二个应用程序 ID(并不重要),然后创建您的第二个应用程序。打开 Xcode 并在功能窗格中启用 iCloud。然后在“iCloud 容器标识符”下,添加您的第一个(已发布并批准!)应用程序的标识符
com.company.myawesomeapp
Run Code Online (Sandbox Code Playgroud)就是这样!只有一个问题,这就是底线:
为了使用容器,应用程序必须可用并获得批准。在批准之前,其他应用程序都不能访问您的容器,因为从技术上讲,它仅在您的应用程序获得批准后才存在。实际上,它不必在 AppStore 中提供,只需要获得批准(可以在开发人员发布的版本中)。
如果您的应用程序已发布并已获得批准,您只能使用(共享)iCloud 容器。
| 归档时间: |
|
| 查看次数: |
1591 次 |
| 最近记录: |