我想构建一个基于 iCloud 的应用程序,它可以在 Apple 平台、iOS 和 Mac 上运行。该应用程序将使用 iOS 上的 UIDocument 和 Mac 上的 NSDocument 来建立基于文档的同步模型 - 在 iOS 上创建的文档将在 Mac 上可用,反之亦然。
我面临的特殊问题是我想要两个应用程序上的相同 iCloud 容器。XCode 根据 App ID 为应用程序创建一个默认容器,这在两个应用程序上必须不同,因为这似乎是 Apple 的要求 - 即使它们位于不同的平台上,也没有两个应用程序可以具有相同的应用程序 ID。
所以我单独留下了默认创建的容器,并在 Mac 应用程序和 iOS 应用程序上添加了另一个容器。该应用程序似乎运行良好,我可以在两个应用程序中的正确位置创建一个新文件包,但我遇到了 2 个问题:
容器未正确显示在 iCloud 设置管理屏幕中。在 XCode 的权利部分,我将容器命名为
com.mycompany.myapp.mycontainer
两个应用程序中的名称。在 iOS 的设置屏幕(设置 -> 常规 -> 使用 -> 管理存储 -> 显示全部)中,我的应用程序被列为“mycontainer”,而不是我预期的应用程序的实际名称。是否可以在应用程序的 Info.plist 中提供名称和图标以使其正确列出?我的 NSMetadataQuery 无法正常工作。我使用 Empty Application 模板制作了 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 文档应用程序的文章的指针将不胜感激!建议,想法是最受欢迎的。