iOS 11 文件应用程序未持久存储为工作集中的文件存储的标签元数据

iOS 11 Files App is not persisting Tags metadata stored for Files in working set

我们正在开发 iOS 11 Files App 扩展,我们能够正确显示文件夹、文件和缩略图。但是,在存储元数据时 文件标签(颜色)、文件夹收藏夹等文件的设置,虽然我们正在设置工作集,但这在文件应用程序重新启动期间不会保留。 它会在文件应用程序的最近项目中短暂显示文件标签,但之后会消失。这些标签元数据在文件应用程序重新启动后也不会保留。在 WWDC '17 视频中,我们可以看到人们提到数据库,谁必须创建和维护这个数据库?

每当我重新启动文件应用程序时,我都会看到一些数据库查询正在进行,如下所示。 但是,我们的提供商从未在此数据库查询的结果中列出。

Reusing collector for descriptor with query (((FieldMatch(kMDItemContentTypeTree, "public.item")))) && ((kMDItemIsTrashed != "1")) && ((kMDItemFileProviderID == "*" && _kMDItemBundleID != "com.apple.fileprovider.fileproviderd*")) && (kMDItemUserTags == "*")

是否缺少任何持久性逻辑? 我们的文件提供程序扩展是否必须创建和维护此数据库?或者它只是文件应用程序的一个数据库,扩展程序可以写入其中?

每个文件提供者都应为所有离线文件(最近的文件、标签等)维护自己的数据库。启动文件应用程序时,它会调用 provideURL() 方法,该方法将被文件提供程序覆盖。一旦我们接到这个电话,我们必须查询我们的数据库以查找离线项目并提供相同的 URL。

还应正确维护工作集同步锚点,否则我们不会收到向文件应用程序工作集添加项目的回调。