iOS - Swift - Проблемы с вставкой в ​​файлы (pdf, docx) с помощью UIPasteboard из почтового вложения Apple

Я работаю над приложением, которое позволяет пользователю вставлять файлы (например,.pdf и.docx) в приложение. У меня он работает хорошо, за исключением случаев, когда файл копируется долгим нажатием вложения в собственном приложении Mail.

Я знаю, что проблема не в файле, потому что если я долго нажимаю одно и то же вложение в том же электронном письме и вместо того, чтобы выбирать "копировать", я выбираю "Поделиться", а затем "копировать" из общего листа, я могу вставить файл успешно.

При наклеивании работаю с UIPasteboard.general.itemProviders.first. В обоих сценариях, описанных выше, есть только 1 элемент в UIPasteboard.general.itemProviders, однако распечатав описание UIPasteboard.general.itemProviders[0] Я вижу следующее:

Для файлов PDF: при копировании непосредственно после длительного нажатия (неудачный сценарий):

<UIItemProvider: 0x28255a290> {types = (
    "com.apple.mobilemail.attachment",
    "com.adobe.pdf",
    "public.url"
)}

При копировании из того же PDF-файла из того же электронного письма и долгого нажатия с последующим нажатием "Поделиться", а затем "копировать" (успешный сценарий):

<UIItemProvider: 0x28255b2c0> {types = (
    "com.adobe.pdf"
)}

Для файлов docx: при копировании напрямую из длительного нажатия (неудачный сценарий):

<UIItemProvider: 0x28055d6c0> {types = (
    "com.apple.mobilemail.attachment",
    "com.apple.WebKit.custom-pasteboard-data",
    "Apple Web Archive pasteboard type",
    "org.openxmlformats.wordprocessingml.document"
)}

При копировании с помощью длительного нажатия с последующим нажатием "Поделиться", затем "Копировать" (успешный сценарий) для того же файла docx из того же электронного письма:

<UIItemProvider: 0x28055c8c0> {types = (
    "org.openxmlformats.wordprocessingml.document"
)}

Мне нужна помощь с двумя проблемами, с которыми я столкнулся:

  1. UIPasteboard.general.itemProviders.first?.suggestedName возвращает неправильное имя файла для PDF-файлов, но в успешном сценарии тот же код возвращает правильное имя файла.

  2. При работе с файлами docx данные из self.data(forPasteboardType: "org.openxmlformats.wordprocessingml.document") в расширении UIPasteboard различается в двух сценариях (распечатка данных показывает, что количество байтов разное), и в неудачном сценарии этот файл нельзя открыть с помощью QLPreviewItem, но может в успешном сценарии.

Ясно, что мне не хватает чего-то при обработке почтовых вложений (и возможных других сценариев), что вызывает эти проблемы, но я не уверен, что именно. Любая помощь будет принята с благодарностью!!!

0 ответов

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