2017-04-13 121 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