Хотя информация Тони верна - также объяснено здесь - (что при перетаскивании 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 не вызывается при запуске