Что ж, уже много лет я использую этот простой трюк, чтобы иметь сценарии bash в приложении (и действительно не понимаю, почему все люди пробуют такие сложные решения, как создание папок «Содержание», info.plist или использование Automator или Platypus или что-то в этом роде. .???).
Вот и все ! Он работает на Mac OS X, начиная со Snow Leopard и заканчивая Mavericks. Если кто может попробовать на более новых версиях ОС и подскажите.
Примечание . Скрипт должен иметь размер не менее 28 байт, иначе он не будет выполнен. Он может быть дополнен пустыми строками для достижения минимального размера. Кроме того, первая строка скрипта должна быть шебангом; например #!/bin/bash
или #!/bin/perl
.
[ОБНОВИТЬ]
Отвечая на вопрос, к чему относится комментарий @DenisHowe, при использовании этого трюка, если вы хотите иметь путь к текущему выполнению, вы можете добавить эти строки в начало скрипта:
abspath ()
{
case "${1}" in
[./]*)
local ABSPATH="$(cd ${1%/*}; pwd)/"
echo "${ABSPATH/\/\///}"
;;
*)
echo "${PWD}/"
;;
esac
}
CURRENTPATH=`abspath ${0}`
PATH=$PATH:$CURRENTPATH
#!/bin/bash
sudo
требуется запустить скрипт? Что можно сделать, чтобы скрипт запрашивал у пользователя пароль?YourApplication.app
должно быть cerated в/Applications
--args
работает. но, например, открытие документа с созданным приложением дает ошибку в окне терминала: Unknown command: \Xca\Xfe\Xba\Xbe
(я также получаю эту ошибку, если просто добавляю местоположение файла к команде)abspath ${0}
ПУТЬ=$ПУТЬ:$ТЕКУЩИЙПУТЬ:pkgbuild: error: Path “<path x>/TestApplication.app" is not a valid bundle component (using destination path “<path x>”)
Это не слишком важно, я просто хотел бы иметь минимальный pkg для тестирования.Принятый в настоящее время ответ не совсем работает для меня. Я получаю маленькую сломанную иконку приложения.
Следующее работает для меня под OSX 10.15.7 (Catalina). Вы можете свободно менять YourApplication
во всех следующих инструкциях имя, которое вам действительно нужно.
mkdir каталог с .app
расширением в /Applications
папке с Contents
а затем MacOS
подкаталоги.
mkdir -p /Applications/YourApplication.app/Contents/MacOS
Переместите свой скрипт в этот каталог и назовите его так же, как верхнюю папку приложения, но без .app
расширения и без расширения сценария оболочки:
mv yourscript.sh /Applications/YourApplication.app/Contents/MacOS/YourApplication
Убедитесь, что ваш скрипт является исполняемым:
chmod +x /Applications/YourApplication.app/Contents/MacOS/YourApplication
Вот пример приложения, чтобы попробовать:
#!/bin/sh
result=`osascript -e 'display dialog "Should I beep?" buttons {"Yes", "No"}'`
if [[ "$result" = "button returned:Yes" ]]; then
osascript -e 'beep'
fi
Теперь ваше приложение должно быть готово, и скрипт должен запускаться при двойном щелчке по нему. Важно отметить, что если вы переименуете приложение, вам нужно будет переименовать базовый скрипт.
Было сложнее понять, что ваше приложение может увидеть LaunchPad. Следующее, похоже, сработало. Вам нужно добавить что-то вроде следующего в /Applications/YourApplication.app/Contents/Info.plist
файл. Вам также может потребоваться переместить его в файл DMG и обратно в Applications for LaunchPad, чтобы заметить его. См.: https://stackoverflow.com/a/71342335/179850 .
<?xml version="1.0" encoding="UTF-8" standalone="no"?><plist version="1.0">
<dict>
<key>CFBundleExecutable</key>
<string>My App</string>
<key>CFBundleGetInfoString</key>
<string>My App 1.0</string>
<key>CFBundleVersion</key>
<string>1.0</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
</dict>
</plist>
Чтобы добавить значок в ваше новое приложение, вам необходимо сделать следующее:
Найдите или создайте PNG, который вы хотите использовать в качестве значка.
Откройте изображение в приложении Preview — другие графические приложения также могут работать.
Нажмите command-a, чтобы выбрать все, а затем command-c, чтобы скопировать его в буфер обмена.
Выберите свое приложение в Finder и нажмите command-i, чтобы открыть окно «Информация».
Нажмите на значок в верхнем левом углу информационного окна, чтобы выбрать его:
Вставьте изображение из буфера обмена, которое должно изменить значок.
Вы также можете открыть окно «Информация» в другом приложении, выбрать его значок и скопировать его, чтобы вставить в новое приложение. После того, как вы назначите любой значок, если вы посмотрите в свой .app
каталог, вы должны увидеть имя файла, начинающееся с Icon
.
Если это простой сценарий оболочки, вам не нужно оборачивать его в пакет приложения; вы можете дважды щелкнуть сам сценарий. Однако у вас не будет возможности иметь собственный значок или другие подобные вещи.
Я думаю, что есть несколько помощников, которые могут оборачивать простые скрипты, но единственный, с которым у меня есть опыт, это Platypus , который позволяет вам запускать скрипты shell/python/perl/ruby/etc как обычные приложения с иконками, я/ O перенаправления и т.д.
Отличие Platypus в том, что вы МОЖЕТЕ получить STDIN/STDOUT с помощью нескольких различных механизмов, а также через интерактивность строки меню. Таким образом, вы получаете окно, в котором вы можете взаимодействовать с любым запущенным скриптом.
Platypus, по-видимому, нельзя использовать из командной строки (вероятнее всего, там, где находится ваш сценарий оболочки).
Этот скрипт https://github.com/andrewp-as-is/mac-appify , который можно установить с помощью pip для пользователей python ( pip install mac-appify
), похоже, выполняет шаги , описанные в ответе выше .
Это может быть полезно так
pip install mac-appify
appify script.sh /Applications/$NAME.app
без холма
Вспышка кота
#!/bin/bash ; say "Hi" ; exit 0
(с каждой из команд в разных строках и без точки с запятой).пользователь3439894
Вспышка кота
Вспышка кота
пользователь3439894
Вспышка кота
пользователь3439894
Вспышка кота
Вспышка кота