(см. 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, но я пробую все.
РЕДАКТИРОВАТЬ :Я немного прогрессировал.Очистка и перестройка проекта позволили 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])
Итак, в моем проекте должна быть настройка или фрагмент кода, который препятствует правильному поведению.Ты хоть представляешь, что это может быть?