Как связать тип файла с MacOS X App, не запуская его сначала? - PullRequest
7 голосов
/ 12 января 2009

Я бы хотел связать последнюю установленную версию моего приложения Mac OS X с определенным типом файла. Небольшой эксперимент показывает, что файл info.plist , похоже, читается и интерпретируется операционной системой при запуске приложения, а не при перетаскивании пакета приложения на диск. Документация Apple по конфигурации во время выполнения не говорит много по этой теме.

Есть ли способ, используя простой .dmg образ в качестве установочного носителя, чтобы убедиться, что система ассоциирует этот конкретный тип файла с моим недавно установленным приложением без необходимости запуска его сначала?

Я должен уточнить, что я хочу, чтобы это делалось автоматически во время установки (я не хочу, чтобы мои пользователи сами делали это).

Ответы [ 3 ]

6 голосов
/ 12 января 2009

Когда пользователь перетаскивает приложение в папку «Приложения», система должна автоматически зарегистрировать его в Launch Services. См. Регистрация приложения в Руководстве по службам запуска.

1 голос
/ 07 марта 2016

Хотя информация Тони верна - также объяснено здесь - (что при перетаскивании MyApp.app на Applications будет автоматически регистрироваться в Launch Services с использованием информации из Info.plist файла xml и ассоциаций файла установки ), он не полностью отвечает на вопрос об ассоциации файлов.

Если люди следуют этим инструкциям, у них будет открыто приложение, но не будет открыто никакого конкретного файла.

[...] убедитесь, что система связывает определенный тип файла с моим недавно установленным приложением

Файловая ассоциация немного отличается на Mac по сравнению с другими платформами. На большинстве платформ, когда *.foo зарегистрирован с myapp, когда на MyFile.foo делается двойной щелчок, он отправляет что-то вроде:

/path/to/myapp MyFile.foo

И хотя вы можете свободно использовать эту технику в командной строке на Mac с успехом, она просто не будет работать через Finder и также не будет работать при двойном щелчке на соответствующем файле на рабочий стол.

На вопрос и ответ здесь:

https://stackoverflow.com/a/19702342/3196753

Некоторые утверждают, что этот подход имеет преимущество перед консервативной обработкой документов и открытых файлов в main(), поскольку он «открывает только один экземпляр приложения». Независимо от причин, лежащих в основе этого решения, оно еще более усложняет ситуацию с точки зрения C ++.

  • Доступен 108-страничный PDF здесь (предупреждение, это помечено как "устаревшее", может произойти ссылка).
  • Доступна соответствующая документация с портала разработчика Apple здесь .
  • Подход Qt задокументирован здесь .

От qt.io:

Когда пользователь дважды щелкает файл в Finder, Finder отправляет событие Apple приложению, связанному с файлом, и просит его открыть файл. Если приложение не запущено, оно запускается, а затем выполняется запрос. Преимущество этого подхода заключается в том, что запущен только один экземпляр приложения.

В Windows это обычно делается путем запуска приложения и передачи имени файла в качестве аргумента командной строки. Просмотр множества файлов приводит к запуску множества экземпляров одного и того же приложения. (Компонент QtSingleApplication, доступный как решение Qt, решает эту проблему.)

Qt 3 не предоставляет абстракцию для обработки событий Apple, но просто добавить поддержку для них в ваше приложение, используя Carbon API для Mac. Предположим, у нас есть приложение под названием XpmViewer, которое отображает файлы XPM (формат изображения X11). Ниже следует объявление класса главного окна: [фрагмент кода удален]

(BOOL)application:(NSApplication *)theApplication
       openFile:(NSString *)filename

Обработка события открытия файла Mac OS X ДО выполнения C ++ main () выполняется Обработчик AEInstallEventHandler не вызывается при запуске

1 голос
/ 12 января 2009

Вы можете сделать это, набрав apple-I в файле, с которым вы хотите связать приложение, воспользовавшись небольшим полем под названием «Открыть с помощью ...» и выберите свое приложение. Вы можете установить флажок «Изменить все ...», чтобы внести изменения для всех похожих файлов.

...