Импорт документов из iMessage в приложение - удаление временных файлов, помещенных в «Входящие» - PullRequest
0 голосов
/ 18 июня 2019

Я определил UTI для пользовательского формата документа. Я могу экспортировать файлы из своего приложения и добавлять их в текстовые сообщения, электронную почту и т. Д. Я могу импортировать файлы в свое приложение, нажав на значок документа в iMessage. Нажав на значок документа, я могу скопировать в свое приложение. Это вызывает вызов в моем AppDelegate для обработки входящего файла.

Меня беспокоит то, что URL для входящего файла:

Файл: /// частный / вар / мобильный / Контейнеры / Data / Application / 21377C94-1C3C-4766-A62A-0116B369140C / Документы / Входящие / ...

Принимая во внимание, что при сохранении документов в каталоге .documents я использую этот URL:

Файл: ///var/mobile/Containers/Data/Application/21377C94-1C3C-4766-A62A-0116B369140C/Documents/...

Разница заключается в компонентах пути /private/ и /Inbox/.

Вопрос: как я могу удалить путь /private/.../Inbox/ файлов, которые были скопированы в мое приложение из iMessage? Я заметил это при тестировании моего приложения, и когда я нажал на тот же значок документа в iMessage, он начал генерировать копии файлов с тем же именем, но с добавлением -1, затем -2, затем -3 к имени файла документа из Шеззаде. Похоже, что копии создаются по этому пути /private/.../Inbox/.

Это что-то, что стирается само по себе, или я могу получить доступ к этому каталогу, чтобы удалить эти файлы? Это также раздражает, поскольку в зависимости от имени файла он выглядит как другой файл, что позволяет импортировать несколько копий одного и того же файла с немного другим именем файла.

1 Ответ

0 голосов
/ 18 июня 2019

Хорошо, это заняло немало времени, но я опубликую свое решение, которое пока работает, если кто-нибудь столкнется с той же проблемой.

let fileManager = FileManager.default
// get the URL for the "Inbox"
let tmpDirURL = fileManager.urls(for: .documentDirectory, in: .userDomainMask)[0].appendingPathComponent("Inbox")
// get all the files in the "Inbox" directory
let anythingThere = try? fileManager.contentsOfDirectory(at: tmpDirURL, includingPropertiesForKeys: nil)
if anythingThere?.count ?? 0 > 0 {
   for eachURL in anythingThere! {
       // for each url pointing to a file in that directory, get its path extension
       let pathExtension = eachURL.pathExtension
       // test to see if it's a UTI that you're interested in deleting
       // in my case, the three "OCC" strings are the relevant UTI extensions
       if pathExtension == "OCCrcf" || pathExtension == "OCCrdi" || pathExtension == "OCCsrf" {
            // attempt to delete the temporary file that was copied to the 
            // "Inbox" directory from importing via email, iMessage, etc.
            try fileManager.removeItem(at: eachURL)
       }
   }
}

Если у кого-то есть более элегантное решение, пожалуйста, ответьте. Спасибо.

...