【问题标题】:NSAppleScript execution fails in sandboxed app沙盒应用程序中的 NSAppleScript 执行失败
【发布时间】:2012-09-20 10:09:50
【问题描述】:

我有一个针对 Mac OS X 10.7 的沙盒应用,并且想要执行这个 AppleScript:

tell application "Safari" to add reading list item "http://www.apple.com"

我已经在 AppleScript 编辑器中测试了这个脚本,它可以正确执行。

在 Cocoa 应用程序中,我设置了适当的临时权利,并使用以下脚本对其进行了测试,该脚本可以正常执行:

tell application "Safari" to activate

但是当我在我的 Cocoa 应用程序中插入第一个脚本时,我得到了一个错误。这是我正在使用的代码

    NSString *url = [post.url absoluteString];
    NSString *source = [NSString stringWithFormat:@"tell application \"Safari\" to add reading list item \"%@\"", url];

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

    if ( ![script executeAndReturnError:&errorDictionary] ) {
        NSLog(@"Error while saving to Safari Reading List: %@", errorDictionary);
    }

错误是

2012-09-20 10:30:29.370 Cream[2752:303] Error while saving to Safari Reading List: {
NSAppleScriptErrorBriefMessage = "A identifier can\U2019t go after this identifier.";
NSAppleScriptErrorMessage = "A identifier can\U2019t go after this identifier.";
NSAppleScriptErrorNumber = "-2740";
NSAppleScriptErrorRange = "NSRange: {29, 11}";
}

该错误似乎与“阅读”一词有关。就好像它没有加载 Safari 脚本字典,并且不明白“阅读列表项”是什么意思。

如果我在禁用沙盒的情况下运行应用程序,它可以完美地使用完全相同的脚本。

有人知道会发生什么吗?我需要在沙箱的某个地方再打一个洞吗?

【问题讨论】:

  • 也许您的权利没有您想象的那么合适...?它们是什么?
  • 权利是 com.apple.security.temporary-exception.apple-events 是一个带有 com.apple.Safari 的数组。请注意,激活脚本在沙盒应用程序中确实有效,所以我认为权利必须是好的,至少部分是好的。
  • 哦,你的脚本是一个字符串。您是否尝试过运行预编译/标记化脚本 (.scpt)?那应该不需要字典。
  • 发现问题。 bundle id 在权利中必须是 com.apple.safari,而不是 com.apple.Safari。 :(
  • 你需要 10.8 吗?如果是这样,您也许可以使用 NSUserScriptTask 类而不是 NSAppleScript:developer.apple.com/library/mac/documentation/Foundation/…

标签: cocoa applescript sandbox


【解决方案1】:

沙盒应用无法将 AppleEvents 发送给其他应用,因此它们无法使用 AppleScript 与其他应用进行通信。

【讨论】:

  • 如果您请求苹果事件的临时例外,它应该可以工作。请注意,我可以在沙盒应用程序中运行“激活”脚本。只是阅读列表脚本失败了。
  • activate 事件可能由系统内部处理,因此它不是发送到应用程序本身的事件,因此它可能不受其他 AppleEvents 直接针对应用程序的限制。
【解决方案2】:

原来问题是在权利中使用捆绑 ID com.apple.Safari,而不是 com.apple.safari。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-06
    • 1970-01-01
    • 1970-01-01
    • 2018-12-15
    • 1970-01-01
    • 1970-01-01
    • 2017-08-16
    • 2013-08-02
    相关资源
    最近更新 更多