3

我想從Objective-C使用NSAppleScript執行一些AppleScript ...但是,我嘗試的代碼是在優勝美地自動化的新JavaScript。它運行時似乎沒有做任何事情,但是,正常的AppleScript工作正常。如何從可可app運行JavaScript/AppleScript?

[NSApp activateIgnoringOtherApps:YES]; 
NSAppleScript *scriptObject = [[NSAppleScript alloc] initWithSource: 
           @"\n\ 
            iCal = Application(\"Calendar\");\n\ 
            iCal.includeStandardAdditions = true;\n\ 
            iCal.activate();\n\ 
            iCal.displayAlert(\"testing\");\n\ 
           "]; 

[scriptObject executeAndReturnError: nil]; 

我怎樣才能讓它運行?

謝謝

回答

4

NSAppleScript被硬連線編譯爲AppleScript源代碼。您需要使用OSAKit,而不是僞造的,但至少允許您指定從源編譯時使用哪種語言。或者,您可以通過將您的源代碼管道輸入到osacompile -l JavaScript,然後將生成的編譯後的.scpt文件加載到NSAppleScript中來解決此問題。

但是,從您的示例中不清楚您爲什麼使用NSAppleScript。如果你想執行用戶提供的腳本,你應該看看NSUserAppleScriptTask:它比NSAppleScript更令人煩惱,但它被設計爲在應用程序沙箱外的子進程中運行腳本。 (NSAppleScript運行腳本進程,在沙盒應用程序中防止用戶腳本與任意應用程序交談)。

OTOH,如果您只使用NSAppleScript來運行自己的代碼,那麼使用Scripting Bridge (如果你的需求不大,可能就足夠了),或者use AppleScript via the AppleScript-ObjC bridge,它允許你的ObjC代碼使用基於AppleScript的'classes',就好像它們是原生的Cocoa類一樣。鑑於AppleScript是唯一支持知道如何正確說出Apple事件的支持解決方案(JXA也充滿了漏洞),我推薦後者。

相關問題