Я пытался создать способ сказать моему (работающему) приложению macOS открыть некоторые файлы и предоставить дополнительные аргументы команде.
Для приложений с холодным запуском с помощью
$ open MyApp.app fileA.txt --args --foo-arg
запустит приложение, и я смогу проверить --foo-arg
через UserDefaults
/CommandLine
/ProcessInfo
. Однако, если приложение уже запущено, --foo-arg
отсутствует в UserDefaults
/ProcessInfo
/CommandLine
.
Я изо всех сил пытался найти решение здесь, потому что у меня есть несколько требований, которые немного усложняют ситуацию.
Требования
- Пути к файлам, отправляемые в приложение, должны открываться/сохраняться с разрешениями песочницы.
- Аргументы и пути к файлам должны быть перехвачены приложением одновременно.
Возможные решения
XPC
Некоторые люди предлагали мне использовать XPC, но, прочитав об этом, я не уверен, как это решение может выглядеть?
- Нужно ли мне создавать приложение-компаньон агента запуска, которое всегда работает, чтобы оно могло обнаруживать операции командной строки и передавать их моему приложению?
- Как это работает с песочницей, потому что у каждого процесса есть свои собственные разрешения?
Сценарий Apple
- Должен ли я использовать сценарий Apple, чтобы указать моему приложению открывать эти файлы с аргументами, чтобы обойти функцию песочницы?
- При открытии файлов через AppleScript могу ли я сохранить эти файлы?
Схема URL
Я могу зарегистрировать свое приложение, чтобы иметь собственную схему URL-адресов, но способ, которым NSApplicationDelegate обрабатывает входящие URL-адреса, состоит из двух пакетов. Во-первых, URL-адреса, которые он может открыть, а затем схемы URL-адресов или пути к файлам, которые он не может открыть. то есть:
open -a MyApp.app myapp:foo; open -a MyApp.app file.txt
Я, вероятно, могу сделать эту работу, но это немного безвкусно, и я действительно хочу сделать это правильно.