Используйте идентификатор пакета целевого приложения (более гибкий)
Вы планируете держать делать только одну копию из MyApp.app
на всю систему?
Если да, то вы можете воспользоваться MyApp.app
«s идентификатор пакета, и есть Launch Services выяснить все мельчайшие детали для вас.
Это решение довольно гибкое; у него есть то преимущество, что вы можете разместить рабочий процесс Automator там, где вам нужно - он не обязательно должен находиться в том же месте, где он находится MyApp.app
, или в каком-либо фиксированном месте относительно него.
меры
Вот шаги, которые вы хотите предпринять:
Откройте Terminal.app и выполните следующую команду:
osascript -e 'id of app "'"$(mdfind MyApp.app)"'"'
Предыдущий шаг должен был распечатать одну строку в результате. Обратите внимание, что говорит эта строка (например, com.example.MyApp
).
Откройте свой рабочий процесс в Automator.
Добавьте действие Run Shell Script с содержимым:
open -b com.example.MyApp
Сохраните рабочий процесс Automator в любой папке на ваше усмотрение - нет необходимости размещать его в фиксированном месте относительно MyApp.app
.
Запустите рабочий процесс Automator; оно должно запуститься MyApp.app
.
объяснение
Услуги запуска
Это решение использует часть macOS, называемую Launch Services, которая поддерживает общесистемную базу данных приложений и их свойств :
Всякий раз, когда новое приложение становится известным системе (например, когда пользователь перетаскивает его с установочного диска в папку «Приложения»), приложение регистрируется в Launch Services, которая копирует необходимую информацию о приложении в свою базу данных. Сервисы запуска могут затем использовать эту информацию для определения предпочтительного приложения для открытия данного файла документа или URL-адреса.
План
Интересующая нас информация - это идентификатор пакета или идентификатор пакета.
Разработчик приложения обычно присваивает каждому из своих приложений (надеюсь) глобально уникальный идентификатор пакета. Мы можем воспользоваться этой уникальностью тогда и только тогда, когда в нашей системе не будет более одного приложения с одинаковым идентификатором пакета и только одна копия этого приложения. Нет дубликатов.
Выяснить путь
Команда
mdfind MyApp.app
это просто модный способ запустить поиск Spotlight в виде одноразового ярлыка, чтобы выяснить путь приложения на данный момент. Нам нужен путь только один раз, чтобы извлечь идентификатор пакета приложения.
Прожектор (надеюсь) вернется с чем-то вроде этого:
/Users/watermelon/foo/MyApp.app
Извлечение CFBundleIdentifier
Перенос текущего пути приложения в следующую команду AppleScript:
id of app "/Users/watermelon/foo/MyApp.app"
это просто удобный способ ** извлечь CFBundleIdentifier
** из MyApp.app
пакета.
(Вы также можете вручную просмотреть идентификатор пакета, щелкнув правой кнопкой мыши приложение в Finder, выбрав « Показать содержимое пакета» , перейдя к Contents
подпапке и открыв его Contents/Info.plist
в TextEdit, найдите ключ, который говорит, CFBundleIdentifier
и найдите его String
значение на одну строку ниже. I думаю, что это утомительно, поэтому я всегда предпочитаю использовать AppleScript / mdfind
фрагмент кода.)
Запуск приложения по идентификатору пакета
Наконец, давайте посмотрим на команду, которую вы фактически собираетесь использовать в рабочем процессе Automator:
open -b com.example.MyApp
Эта команда - просто технический способ сказать: «Эй, macOS, с тобой хорошие друзья launchd
, верно? Вы можете запустить это приложение для меня? О, кстати, я никогда не удосужился найти полный путь к нему. Что я знаю, хотя это его CFBundleIdentifier
, который есть com.example.MyApp
; просто зайдите в Launch Services, и они определят путь ».
/Applications
и защищен им . Вы можете проверить это, запустив , или . Так почему бы не просто жесткий код ?grep Automator /System/Library/Sandbox/rootless.conf
ls -ldAO@ /Applications/Automator.app
/Applications