脚本路径
在AppleScript中,您需要在发出Java命令之前更改当前的工作目录(cwd)。使用AppleScript行执行此操作,例如:
do shell script "cd " & quoted form of (POSIX path of file_path) & " && java -jar app.jar"
该&&
是很重要的。如果cd
成功,java
命令将在正确的cwd内启动。如果cd
失败,该java
命令将不会运行。
您可能会遇到的问题包括:
- 转义传递给的POSIX路径
cd
; 用户将在其路径中具有奇怪命名的文件夹和空格。
- 在
cd
可能会失败; 将AppleScript包装在try块中,以捕获一些错误并警告用户。
佩尔
就个人而言,我将使用简短的perl脚本来代替bash脚本。
#!/usr/bin/env perl
use strict;
use warnings;
use FindBin qw($Bin); # $Bin is a path to the script's parent folder
`cd "$Bin" && java -jar app.jar`;
有很多更好的方法可以编写此perl片段,但这应该可以工作。
自动化应用
最好的方法是使用Automator方法解决问题。@markhunte的答案讨论了如何修复路径和创建应用程序。这应该为您提供大部分帮助。
另请参阅AppleScript相对于脚本位置的路径。
appify-从shell脚本创建最简单的Mac应用程序
另外,您可以使用Thomas Aylott的appify脚本将您的Shell脚本捆绑到OS X应用程序中。Mathias Bynen的文章介绍了如何使用脚本,如何从Shell脚本创建简单的Mac应用程序。
#!/bin/bash
if [ "$1" = "-h" -o "$1" = "--help" -o -z "$1" ]; then cat <<EOF
appify v3.0.1 for Mac OS X - http://mths.be/appify
Creates the simplest possible Mac app from a shell script.
Appify takes a shell script as its first argument:
`basename "$0"` my-script.sh
Note that you cannot rename appified apps. If you want to give your app
a custom name, use the second argument:
`basename "$0"` my-script.sh "My App"
Copyright (c) Thomas Aylott <http://subtlegradient.com/>
Modified by Mathias Bynens <http://mathiasbynens.be/>
EOF
exit; fi
APPNAME=${2:-$(basename "$1" ".sh")}
DIR="$APPNAME.app/Contents/MacOS"
if [ -a "$APPNAME.app" ]; then
echo "$PWD/$APPNAME.app already exists :("
exit 1
fi
mkdir -p "$DIR"
cp "$1" "$DIR/$APPNAME"
chmod +x "$DIR/$APPNAME"
echo "$PWD/$APPNAME.app"
可以为该脚本提供社区贡献的改进:
代码签名
创建应用程序捆绑包后,应该对其进行代码签名。经过代码签名的应用程序将启动,而无需您的客户端禁用Gatekeeper。
使用Apple Developer ID和以下codesign
命令对应用程序进行代码签名:
codesign -s <identity> -v <code-path> …
代码签名是OS X中使用的一种安全技术,它使您可以证明自己创建了一个应用程序。应用程序签名后,系统可以检测到该应用程序的任何更改-无论更改是意外引入还是由恶意代码引入。
在Apple Developer网站上了解有关代码签名的更多信息。