无法从NSString编译applescript

时间:2017-12-05 10:14:26

标签: objective-c applescript

我一直试图弄清楚如何在一个客观的c程序中运行AppleScript,但到目前为止还没有能够。

无论我如何将源加载到NSAppleScript对象中,我都无法将其编译。从文件加载返回nil并从源加载只是简单拒绝编译。

我在任何方面都不是一个客观的程序员,我很难弄清楚这个脑死亡语言是如何工作的。任何和所有问题都可能与我无法理解构造函数根据您提供的参数更改其名称的原因相关。

我多次尝试之一的示例来源:(注意,脚本是正确的,并且在脚本编辑器中正常工作)

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        NSString * source =
        @"to go_home()\n"
        "    tell application \"Finder\" to open \"Home\"\n"
        "end go_home\n"
        "go_home()";

        NSAppleScript * script = [[NSAppleScript alloc] initWithSource: source];

        if ( script == nil)
            NSLog(@"Script is nil");

        NSLog(@"Script source = %@", script.source);

        [script compileAndReturnError: nil];
        [script executeAndReturnError: nil];

        if ([script isCompiled])
            NSLog(@"Script is compiled");
        else
            NSLog(@"Script is not compiled");
    }
    return 0;
}

示例输出:

2017-12-05 11:05:48.249206+0100 applescript[11826:744415] Script source = to go_home()
    tell application "Finder" to open "Home"
end go_home
go_home()
2017-12-05 11:05:48.262797+0100 applescript[11826:744415] Script is not compiled
Program ended with exit code: 0

编辑:问题似乎与XCode有关。当我在终端中编译程序时,一切正常。

1 个答案:

答案 0 :(得分:1)

我正在编译脚本 对于相同的代码,程序以退出代码:0 结束。 您可以通过替换

来检查错误
[script compileAndReturnError: nil];
[script executeAndReturnError: nil];

 NSDictionary *error;
 [script compileAndReturnError: &error];
 [script executeAndReturnError: &error];