1

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

这个问题的背景是将我的 AppleScript 源代码放在git. 这个 stackoverflow question/answer已经回答了我的大部分问题,但是我在此处描述的问题仍然阻止我将所有脚本放入 git。

在这个库test.scptd中,我有一个名为 的处理程序,say it loudsdef文件中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_as来源在这里),它是优秀编辑器 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的,但我不具备相关技能。

4

1 回答 1

0

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

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

于 2017-04-13T20:56:30.763 回答