2017-04-13 116 views
1

我希望能够使用脚本定义(sdef)反编译和编译AppleScript脚本库(scptd),因此我可以将文本源代码版本控制。如何使用脚本定义(sdef)编译AppleScript脚本库(scptd)

这个问题的背景是把我的AppleScript源码放在git。我的大部分问题已被this stackoverflow question/answer回答,但我在这里描述的问题仍然阻止我将所有脚本放在git中。

在这个库test.scptd我有名字say it loud的处理程序,并在sdef文件test.sdef它被声明为与代码SAYTLOUD的命令。

当使用osadecompile,我得到一个AppleScript文本文件test.applescript

on say it loud whatToSay 
    do shell script "say " & quoted form of whatToSay 
end on say it loud 

然而,这个源不能与osacompile编译,因为对sdef文件的链接已被打破,say it loud不是有效标识符。

幸运的是,我找到了二进制文件compile_assource here),它是优秀的编辑器TextMate的一部分。当,反编译,我得到以下源文件test_raw.applescript

on «event SAYTLOUD» whatToSay 
    do shell script "say " & quoted form of whatToSay 
end «event SAYTLOUD» 

这就是我想要的,因为代码仍然是有效的AppleScript,它是可运行的。唯一的区别是你不能通过名称来调用处理程序,但是你需要使用原始代码。这里没有问题。

我的问题:我怎么编译的AppleScript的文件test_raw.applescript(与原码),结合test.sdef文件为test.scptd

一个明显的答案是用Objective-C和OSAKit创建我自己的decompile_as(如果可能的话),但我不具备涉及的技能。

回答

0

理想的解决方案是将您的.scptd包直接放入您的git存储库,然后放火烧掉。

第二好的解决方案是将你的.scptd包直接放到你的git仓库中,然后在你的git客户端和你的实际diff命令(example)之间编写你自己的'diff'shell脚本。当shim脚本收到后缀为.scptd的文件时,将它们传递给osadecompile并将输出写入临时文本文件,然后将这些文件路径传递给diff工具。这将为您提供人类可读的差异,而不必破坏AppleScript(固有的scm-hostile)文件格式。显然,如果你想要合并也无济于事,但那是在你和你的上古之神之间。

+0

是的。我现在把'.scptd'包直接放在git中。 diff处理程序在命令行上有帮助,但不在像GitHub Desktop这样的GUI应用程序中。对于'.scpt'文件和'.scptd'(不带'.sdef'),我有一个构建脚本。我在'.applescript'文本版本中进行了开发(大量编译)。也许我会改变工作流程。然而,'sdef'-sciped' scptd'是一个难以解决的难题...... – doekman