Связать сценарий оболочки (начиная с Java JAR) с расширением файла в комплекте приложений Ma c - PullRequest
0 голосов
/ 01 апреля 2020

Чтобы запустить архив Java8-JAR на компьютерах Mac с более высокой версией Java, я упаковываю jar в пакет APP (stuff.app) вместе с bash -скриптом,

, назовем его stuff. sh (edit: удален аргумент "-cp", вставлены повторяющиеся аргументы командной строки):

#!/bin/bash
VM_ARGS_A="--add-modules=java.xml.bind"
# Set the working directory
DIR=$(cd "$(dirname "$0")"; pwd)
APP_JAR="some-java-stuff.jar"
APP_NAME="Some Java Stuff"
APP_ICNS="stuff.icns"

#test: set command line args
STUFF_TITLE="Launching $APP_NAME"
STUFF_ARGS="$1"
ARGS_MSG="command line args: $STUFF_ARGS"
osascript \
    -e "set question to display dialog \"$ARGS_MSG\" with title \"$STUFF_TITLE\" buttons {\"Cancel\"} default button 1"
#end test

exec $_java $VM_ARGS_A -Dapple.laf.useScreenMenuBar=true -Dcom.apple.macos.use-file-dialog-packages=true -Xdock:name="$APP_NAME" -Xdock:icon="$DIR/../Resources/$APP_ICNS" -jar "$DIR/$APP_JAR"

Фрагмент из моего Info.plist:

    <key>CFBundleDocumentTypes</key>
        <array>
            <dict>
                <key>CFBundleTypeExtensions</key>
                <array>
                    <string>skktx</string>
                </array>
                <key>CFBundleTypeIconFile</key>
                <string>stuff.icns</string>
                <key>CFBundleTypeName</key>
                <string>Java Stuff calculation</string>
                <key>CFBundleTypeRole</key>
                <string>Viewer</string>
                <key>LSHandlerRank</key>
                <string>Owner</string>
            </dict>
        </array>
    <key>CFBundleExecutable</key>
    <string>stuff.sh</string>

Работает нормально , в принципе.

Что не работает: открытие файлов с помощью этого приложения. Я хотел бы сделать это сделать банку для открытия файлов. Само приложение Java может открыть файл (пользовательский XML тип файла), который назван в качестве аргумента командной строки.

Когда я "щелкаю правой кнопкой мыши" (Ctrl-click) на файле этого типа и выберите открыть с помощью (мое приложение), имя файла не передается в командной строке. Вызванный диалог отображает только «аргументы командной строки:», когда я говорю Finder открыть файл с stuff.app.

Я прочитал в этом вопросе , что это можно сделать с помощью AppleScript, в котором есть раздел «открыть файлы». Или с Automator.

Итак, я попытался написать фрагмент кода AppleScript, который собирает переданные объекты и передает их в сценарий bash

property theApplicationPath : the path to me as text
property theShellScriptPath : theApplicationPath & "Contents:MacOS:stuff.sh"

set arguments to ""
on open theFiles
    repeat with anItem in theFiles
        set arguments to arguments & space & (quoted form of POSIX path of anItem)
    end repeat
end open

do shell script theShellScriptPath & arguments

Я сохранил его в ScriptEditor как материал .scpt и применил изменения к моему Info.plist.

В результате я получаю сообщение об ошибке при попытке открыть пакет, примерно переведенный: «Вы не можете открыть приложение« stuff.app », потому что этот Ma c -Type не поддержать это ". Значок приложения отображается зачеркнутым.

Вкл. apple.stackexchange Я читал, что в LaunchAgent.plist вы можете вставить ключ в список. Это также возможно в Info.plist пакета приложения? И можно ли так же передать путь к файлу?

Спасибо!

...