Как скопировать видео в NSPasteboard в виде файла с локального URL-адреса (macOS)?

#swift #macos #nspasteboard

#swift #macos #nspasteboard

Вопрос:

У меня есть видео mp4, сохраненное в папке.
Как я могу скопировать видео из моего приложения в виде файла, чтобы вставить его на другие платформы, такие как Telegram или Finder, чтобы вставить его как новый файл? На данный момент это функция, которую я написал, но она вставляет видео только в текстовое поле iMessage.

 func copyVideo() {
    guard let url = TaskManager.shared.lastVideoURL else { return }
    do {
        let data = try Data(contentsOf: url)
        let pasteboard = NSPasteboard.general
        pasteboard.declareTypes([kUTTypeMPEG4 as NSPasteboard.PasteboardType], owner: nil)
        print(pasteboard.setData(data, forType: kUTTypeMPEG4 as NSPasteboard.PasteboardType))
    } catch {
        print("error getting data from video (error)")
    }
}
 

Что я делаю не так?

Комментарии:

1. Это действительно плохая идея. Вы пытаетесь загрузить все данные фильма в память. Это приведет к сбою вашего приложения.

2. Что вы предлагаете, как я могу с этим справиться?

Ответ №1:

После некоторого теста я нашел решение.
Этот метод копирует видео в виде файла:

 func copyVideo() {      
    guard let url = TaskManager.shared.lastVideoURL else { return }
    if let fileRefURL = (url as NSURL).fileReferenceURL() as NSURL? {
        print(fileRefURL)
        let pasteboard = NSPasteboard.general
        pasteboard.clearContents()
        pasteboard.writeObjects([fileRefURL])
        pasteboard.setString(fileRefURL.relativeString, forType: .fileURL)
    }
}