我想知道这是否是最佳解决方案:
osacompile
但是还有.scptd
目录。或者我可以将.applescript
和.scpt
文件置于版本控制下?
什么是最佳解决方案?
答案 0 :(得分:25)
我喜欢@DanielTrebbien's solution,但是我希望人们为了使用我的github项目而实现它有点太复杂了。一个更简单的选项,只是让你看到差异中的文本更改是告诉diff进程使用osadecompile textconv。
*.scpt diff=scpt
[diff "scpt"]
textconv = osadecompile
binary=true
$ git diff
--- a/AppleScript-droplet.app/Contents/Resources/Scripts/main.scpt
+++ b/AppleScript-droplet.app/Contents/Resources/Scripts/main.scpt
@@ -1,3 +1,3 @@
-on open filelist
- ## Set useTerminal to true to run the script in a terminal
- set useTerminal to true
+on open file_list
+ ## Set use_terminal to true to run the script in a terminal
+ set use_terminal to true
非常感谢@DanielTrebbien的回答让我看到osadecompile。
答案 1 :(得分:17)
如果使用git,您可以使用filter driver透明地(1)反编译SCPT文件,以便只提交AppleScript源代码(称为“清理”二进制SCPT)和(2)重新编译回SCPT签出时(称为“涂抹”AppleScript源代码)。
首先将以下名为git-ascr-filter
的shell脚本添加到/usr/local/bin
:
#!/bin/sh
if [ $# -ne 2 ]; then
echo "Usage: $0 --clean/--smudge FILE">&2
exit 1
else
if [ "$1" = "--clean" ]; then
osadecompile "$2" | sed 's/[[:space:]]*$//'
elif [ "$1" = "--smudge" ]; then
TMPFILE=`mktemp -t tempXXXXXX`
if [ $? -ne 0 ]; then
echo "Error: \`mktemp' failed to create a temporary file.">&2
exit 3
fi
if ! mv "$TMPFILE" "$TMPFILE.scpt" ; then
echo "Error: Failed to create a temporary SCPT file.">&2
rm "$TMPFILE"
exit 4
fi
TMPFILE="$TMPFILE.scpt"
# Compile the AppleScript source on stdin.
if ! osacompile -l AppleScript -o "$TMPFILE" ; then
rm "$TMPFILE"
exit 5
fi
cat "$TMPFILE" && rm "$TMPFILE"
else
echo "Error: Unknown mode '$1'">&2
exit 2
fi
fi
确保chmod a+x
脚本。
运行以下命令配置'ascr'过滤器:
git config filter.ascr.clean "git-ascr-filter --clean %f" git config filter.ascr.smudge "git-ascr-filter --smudge %f"
然后添加到.gitattributes
:
*.scpt filter=ascr
现在每当您对SCPT文件进行更改并git add
时,反编译的AppleScript源将被暂存而不是二进制SCPT。此外,每当您签出一个SCPT文件(实际存储为存储库中的AppleScript blob)时,都会在磁盘上重新创建SCPT文件。
答案 2 :(得分:6)
我总是把.applescript(纯文本文件)放在版本控制中(SVN)。通过这种方式,我可以轻松地在不同版本之间进行比较,对于多用户来说也很容易。您可以突出显示其他用户所做的更改。对于二进制文件,例如编译的脚本文件,这是不可能的。
答案 3 :(得分:2)
我将纯文本.applescript文件保存在Git中,并且我有一个简单的Bash脚本,每次我想构建应用程序时都会运行该脚本,它负责编译AppleScript。这是我的剧本:
#!/usr/bin/env bash
APPNAME="My Awesome App"
# make sure we're in the right place
if [ ! -d ".git" ]; then
echo "ERROR: This script must be run from the root of the repository."
exit
fi
# clear out old build
rm -r dist/*
mkdir -p "dist/$APPNAME.app/"
# copy files
cp -r app/* "dist/$APPNAME.app/"
# compile all applescript
cd "dist/$APPNAME.app/Contents/Resources/Scripts/"
for f in *.applescript
do
osacompile -o "`basename -s .applescript "$f"`.scpt" "$f"
rm "$f"
done
此脚本假定您的整个应用程序(即Contents/
文件夹及其中的所有内容)位于Git存储库根目录中的文件夹app/
内。它将所有内容复制到dist/
中的应用程序的新副本,然后编译新副本的Contents/Resources/Scripts/
文件夹中的所有AppleScript文件。
要自己使用,我建议将我的脚本复制到存储库根目录中的bin/build.sh
,运行chmod +x bin/build.sh
以使其可执行,然后随时运行./bin/build.sh
您的应用的新版本。