Я пытаюсь использовать iCloud Drive для хранения резервных копий данных моего приложения, используя один файл для каждой резервной копии, если это уместно, это простые файлы XML с настраиваемым расширением. Создание и загрузка файлов работают нормально, но поскольку я сейчас пытаюсь позволить пользователю вручную удалять резервные копии, я обнаружил, что не могу удалить файл программно, но могу сделать это, если перейду на iCloud Drive из приложения на iOS или из папки в Finder на macOS.
Чтобы сохранить файлы, я сначала получаю корень для контейнера с помощью
FileManager.default.url(forUbiquityContainerIdentifier: nil)?.appendingPathComponent("Documents")
и создайте папку Document, если она не существует, так как я хочу, чтобы пользователь мог просматривать и редактировать файлы после создания файла локально во временном каталоге, который я загружаю с помощью
let file = FileManager.default
if file.fileExists(atPath: remotePath.path) {
try? file.removeItem(at: remotePath)
}
try? file.setUbiquitous(true, itemAt: localPath, destinationURL: remotePath)
где remotePath
— это ранее полученный путь с добавленным именем файла. Чтобы загрузить файлы, я использую NSMetadataQuery
и получаю путь к каждому файлу с NSMetadataItemURLKey
для каждого возвращаемого элемента, который работает нормально, но когда я пытаюсь
try? FileManager.default.removeItem(at: retrievedPath)
это работает, если это же устройство создало файл, но если он создан с другого, он всегда терпит неудачу, и ошибка говорит, что файл не существует по указанному пути.
Я удалил код обработки ошибок для ясности, но я протестировал это поведение, проверив выданную ошибку.
Как я могу удалить любой файл даже с других устройств, я пропустил какие-то шаги?