Документы iCloud Drive, не включенные в результаты NSMetadataQuery

У меня есть базовое приложение для iOS 8, которое перечисляет документы пользователя в контейнере iCloud приложения, а также в iCloud Drive.

Моя проблема заключается в том, что документы, которые находятся непосредственно в iCloud Drive (Finder → Go → iCloud Drive), не включаются в результаты запроса метаданных. Запрос только возвращает результаты в контейнере iCloud приложения Documents папка.

Я инициализирую запрос следующим образом:

self.query = [NSMetadataQuery new];
self.query.searchScopes = @[NSMetadataQueryUbiquitousDataScope,
   NSMetadataQueryUbiquitousDocumentsScope,
   NSMetadataQueryAccessibleUbiquitousExternalDocumentsScope]; // iCloud Drive

Права выглядят так:

<key>com.apple.developer.ubiquity-container-identifiers</key>
<array>
    <string>$(TeamIdentifierPrefix)com.my.app</string>
    <string>iCloud.com.my.app</string>
</array>

Еще более странно: некоторые документы в iCloud Drive иногда отображаются, но если я переместу их из iCloud Drive и вернусь обратно, они больше не будут отображаться.

2 ответа

Решение

Догадаться. Документы iCloud Drive не находятся в контейнере приложения и, следовательно, не включаются в результаты запроса метаданных, поскольку приложение не имеет доступа к внешним файлам.

Как только документ был открыт с помощью средства выбора документов, приложение получает доступ к этому документу, и с тех пор оно будет частью результатов запроса метаданных (пока пользователь не удалит его из iCloud Drive).

Еще одна вещь, которую я заметил: если пользователь перемещает документ из iCloud Drive на Mac, запрос метаданных не получит обновление для iOS. Попытка открыть документ на iOS просто приводит к ошибке (файл не найден).

Я также хочу получить файлы и каталоги, которые находятся непосредственно на диске iCloud. Я обнаружил, что приложение, названное "Document 5", сделало это. Это мой вопрос: список каталогов и файлов iCloud Drive через NSMetadataQuery.

Другие вопросы по тегам