我正在尝试使用NSAppleScript从Objective-C执行一些AppleScript …但是,我正在尝试的代码是Yosemite中用于自动化的新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];
我怎么能让它运行?
谢谢
解决方法:
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的“类”就像它们是本机Cocoa类一样.鉴于AppleScript是唯一支持的解决方案,它知道如何正确地讲Apple事件(JXA也充满了瑕疵),我推荐后者.
原文地址:https://codeday.me/bug/20190609/1206889.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。