Как сделать, чтобы мое приложение macOS могло открывать файлы PDF? - PullRequest
0 голосов
/ 16 мая 2019

(см. EDIT2 ниже)

Я написал macOS в Swift 5, который, помимо прочего, может отображать PDF-файлы.Теперь я хотел бы иметь возможность открывать файлы PDF с помощью раскрывающегося меню «Открыть с помощью» -> «Другие» -> «MyApp». Но при выборе файла PDF появляется окно с сообщением об ошибке:

The document "my document.pdf" could not be opened. 
MyApp cannot open files in the "PDF" format.

Итак, я попытался добавить следующий метод в AppDelegate

func application(_ sender: NSApplication, openFile filename: String) -> Bool {
    Swift.print("\(filename)")
    return true
}

и зарегистрировать тип документа и импортированный UTI (см. Рисунок).Я все еще получаю то же сообщение об ошибке.Что я делаю не так?

PS.возможно, излишне объявлять как тип документа, так и импортированный UTI, но я пробую все.

enter image description here

РЕДАКТИРОВАТЬ :Я немного прогрессировал.Очистка и перестройка проекта позволили MyApp появиться в раскрывающемся меню «Открыть с помощью» в Finder, но я все равно получаю то же сообщение об ошибке.Чтобы вызвать ошибку, я также могу использовать терминальную команду

open -a /path/to/MyApp.app /path/to/a.pdf

Я попробовал грубую силу, добавив в AppDelegate все методы, содержащие open в своем имени или аргументах, но теметоды никогда не вызываются, и я все еще получаю ту же ошибку.А именно, методы:

func application(_ sender: NSApplication, openFile filename: String) -> Bool {
    Swift.print("\(filename)")
    return true
}

func application(_ application: NSApplication, open urls: [URL]) {
    Swift.print("\(urls)")
}

func applicationOpenUntitledFile(_ sender: NSApplication) -> Bool {
    return true
}

func application(_ sender: NSApplication, openFiles filenames: [String]) {
    Swift.print("\(filenames)")
}

func application(_ sender: Any, openFileWithoutUI filename: String) -> Bool {
    Swift.print("\(filename)")
    return true
}

func application(_ sender: NSApplication, openTempFile filename: String) -> Bool {
    Swift.print("\(filename)")
    return true
}

func applicationShouldOpenUntitledFile(_ sender: NSApplication) -> Bool {
    return true
}

EDIT2 : я создал новый проект и даже без указания типа документа работает приведенный выше код, и этот метод называется:

func application(_ application: NSApplication, open urls: [URL])

Итак, в моем проекте должна быть настройка или фрагмент кода, который препятствует правильному поведению.Ты хоть представляешь, что это может быть?

...