Я пытаюсь получить .eml
файлы электронных писем с помощью перетаскивания из mail.app Apple. Mail.app дает вам файловые обещания через перетаскивающий монтажный щит для их получения Вот мой код для обработки этих обещаний:
override func performDragOperation(_ sender: NSDraggingInfo) -> Bool {
let pasteboard: NSPasteboard = sender.draggingPasteboard
guard
let filePromises = pasteboard.readObjects(
forClasses: [NSFilePromiseReceiver.self], options: nil) as? [NSFilePromiseReceiver]
else {
return false
}
print("Files dropped")
let operationQueue = OperationQueue()
print("Destination URL: \(destinationURL)")
filePromises.forEach({ filePromiseReceiver in
filePromiseReceiver.receivePromisedFiles(
atDestination: destinationURL,
options: [:],
operationQueue: operationQueue,
reader: { (url, error) in
if let error = error {
dump(error)
} else {
print("Received file at url \(url)")
}
print(filePromiseReceiver.fileNames, filePromiseReceiver.fileTypes)
})
})
return true
}
(и вот пример проекта, который демонстрирует проблему - https://github.com/svenewers/DropTestArticle)
Дело в том, что это работает просто отлично когда я перетаскиваю почту из любого другого приложения электронной почты (например, Outlook), но когда письма приходят из Apple Mail, происходит что-то странное:
Файлы eml записываются в мой destinationURL, и я вижу, что они Вы находитесь в Finder, но блок кода reader: { (url, error) in
в моем коде никогда не получает их URL. Вместо этого он сидит в ожидании примерно ровно 60 секунд, а затем выдает мне следующую ошибку:
- Error Domain=NSURLErrorDomain Code=-1001 "(null)" #0
Что, очевидно, означает, что время ожидания экземпляра NSURL истекло.
Кто-нибудь знает, что это вызывает и как я могу решить это? Это проблема, вызванная моим кодом или неправильным поведением почтового приложения Apple?