我希望能夠使用腳本定義(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_as(source 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
(如果可能的話),但我不具備涉及的技能。
是的。我現在把'.scptd'包直接放在git中。 diff處理程序在命令行上有幫助,但不在像GitHub Desktop這樣的GUI應用程序中。對於'.scpt'文件和'.scptd'(不帶'.sdef'),我有一個構建腳本。我在'.applescript'文本版本中進行了開發(大量編譯)。也許我會改變工作流程。然而,'sdef'-sciped' scptd'是一個難以解決的難題...... – doekman