Как попросить приложение Cocoa запустить действие из терминала, а затем вернуть результат - PullRequest
1 голос
/ 16 января 2020

В приложении My Cocoa MacOS есть действие, которое изменяет некоторые файлы на диске. Я хочу сделать эти действия доступными для запуска из терминала.

Например, если я запускаю:

$ echo `myApp runAction`

, который откроет приложение, выполнит некоторый код, связанный с «runAction», а затем выведет результат на консоль.

К сожалению, я не могу просто создать инструмент командной строки из-за его ограничений (не могу включать динамические c фреймворки).

Какие-нибудь советы, как это сделать?

Ответы [ 2 ]

3 голосов
/ 16 января 2020

Вы должны сделать свое приложение сценарием с помощью Apple Script. При этом вы «общаетесь» со своим приложением в bash (или zsh) независимо от того, запущено оно или нет:

или сценарием AppleScript, написанным в приложении Script Editor.

Когда приложение не запущено, оно запускается первым.

В Интернете есть несколько примеров / документов, которых достаточно для базовых c таких задач, как выполнение команды и возврат результата:

Ma c Ссылка на Scripter

Создание приложения Ma c Сценарий приложения Учебное пособие (raywenderlich.com) ссылка

В моем случае этих документов было недостаточно для сложных задач, таких как передача параметров в команду, но для простых задач, таких как:

osascript -e ' скажите приложению «myApp» для входа в систему «

osascript -e», скажите приложению «myApp» для выхода из системы «

» - и myApp возвращает литерал «0» или «1», если действие не выполнено для какая-то причина или была успешной -

это сработало. И osascript -e 'сказать приложению "myApp", что нужно выйти ", даже пришел бесплатно.

С уважением, Роберт

1 голос
/ 17 января 2020

Даже если ваше приложение представляет собой пакет .app, его исполняемый файл по-прежнему является бинарным файлом того же типа, что и инструмент командной строки.

Вы можете выполнить его в терминале, передать аргументы, распечатать вывод. Например,

$ ./MyApplication.app/Contents/MacOS/MyApplication - некоторый аргумент

В зависимости от того, для чего предназначено ваше приложение, оно может быть не идеальным решением , но это совершенно правильный способ его использования.

...