我面临的特定问题是,我希望两个应用程序使用相同的iCloud容器。XCode为应用程序创建了一个默认容器,该容器基于App ID,但必须在两个应用程序上具有不同的App ID,因为这似乎是苹果的要求 - 即使它们位于不同的平台上,也不能有两个应用程序具有相同的App ID。
因此,我保留了默认创建的容器,并在Mac应用程序和iOS应用程序中添加了另一个容器。应用程序“似乎”工作正常,我可以在正确的位置在两个应用程序中创建新的文件包,但我遇到了两个问题:
1. 容器在iCloud设置管理屏幕上未正确显示。在XCode的权限部分中,我在两个应用程序中将容器命名为`com.mycompany.myapp.mycontainer`。在iOS的设置屏幕中(设置->通用->存储空间->显示全部),我的应用程序列为“mycontainer”,而不是我预期的应用程序实际名称。是否可以在应用程序的Info.plist中提供名称和图标以使其正确列出?
2. 我的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文档应用程序的文章的指针!欢迎提供建议和想法。