来自Sandboxed应用程序的AppleScript`activate`不会将窗口带到前台

pka*_*amb 5 macos cocoa applescript entitlements appstore-sandbox

我试图从沙盒macOS应用程序打开系统偏好设置,以便用户可以手动启用某个偏好设置.

AppleScript的 activate

将应用程序带到前端,必要时启动它.

我正在运行macOS 10.13.6和Xcode 10.0.部署目标设置为OS X 10.11.

我从沙盒应用程序运行以下AppleScript:

let script = """
             tell application "System Preferences"
                 activate
                 set current pane to pane id "com.apple.preferences.extensions"
             end tell
             """
let appleScript = NSAppleScript(source: script)
var errorInfo: NSDictionary? = nil
appleScript?.executeAndReturnError(&errorInfo)
Run Code Online (Sandbox Code Playgroud)

我还添加了一个脚本目标Sandbox Entitlement,使系统首选项能够显示窗格:

<key>com.apple.security.scripting-targets</key>
<dict>
    <key>com.apple.systempreferences</key>
    <array>
        <string>preferencepane.reveal</string>
    </array>
</dict>
Run Code Online (Sandbox Code Playgroud)

一旦我添加了权利,这有点起作用.如果关闭系统首选项应用程序,则会启动它并打开正确的窗格.

errorInfo词典是零,因此不会造成错误信息.

在控制台中,我看到一条消息,可能是不相关的日志垃圾邮件:

AppleEvents:收到mach msg,它不是getMemoryReference中预期的复杂类型.

但是,该应用程序不会激活."系统偏好设置"窗口未出现在前面.该应用程序导航到正确的选项卡,但不会作为activate状态的文档到达前台.它仍然在任何其他前景窗口后面.

在关闭"系统偏好设置"的情况下,应用程序会启动.但是,在您单击停靠图标之前,窗口不会添加到前景背景中的屏幕上.然后出现窗口,已导航到正确的窗格.

为什么应用程序没有激活?

是否还有其他需要的Sandbox Entitlements可以激活"系统偏好设置"窗口?

jva*_*ela 1

我建议您执行以下操作(这是我在 macOS Mojave 上测试的并且按预期工作)。

  1. 打开Script Editor
  2. 将您的脚本代码粘贴到其中(当然,没有外部引号)
  3. 将其另存为应用程序
  4. 转到 Finder 中保存它的位置,然后使用右键单击“显示包内容”。
  5. 转到 Contents 并在 Xcode 中打开 Info.plist
  6. 检查此应用程序使用的权利,特别是隐私 - AppleEvents 发送使用说明( NSAppleEventsUsageDescription)。
  7. 在您的应用程序中复制该内容,但请不要使用此 Applescript 应用程序默认使用的所有权利,仅使用您真正需要的权利。