当我将 OS X 升级到 10.9 时,我的 applescript 不再工作

2023-11-27

以下代码尝试打开代理设置对话框,

 NSAppleScript *a = [[NSAppleScript alloc] initWithSource:@"tell application \"System Preferences\"\nset current pane to pane \"com.apple.preference.network\"\nactivate\nend tell\ntell application \"System Events\" to tell process \"System Preferences\" to tell window 1\n click button -3\nclick radio button -2 of tab group 1 of sheet 1\nend tell"];
    [a executeAndReturnError:nil];  

在我将 Mac 操作系统升级到 10.9 之前,它一直运行良好。 applescript 的第二部分,

 tell application \"System Events\" to tell process \"System Preferences\" to tell window 1\n click button -3\nclick radio button -2 of tab group 1 of sheet 1\nend tell 

它不再起作用了。所以如果有人能告诉我原因,我将非常感激。


编辑: 这是我的 .entitlements 文件信息,

  <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>com.apple.security.app-sandbox</key>
    <true/>
    <key>com.apple.security.files.user-selected.read-write</key>
    <true/>
    <key>com.apple.security.network.client</key>
    <true/>
    <key>com.apple.security.network.server</key>
    <true/>
    <key>com.apple.security.scripting-targets</key>
        <dict>
            <key>com.apple.preference</key>
            <array>
                <string>com.apple.preference</string>
                <string>com.apple.systemevents</string>
            </array>
        </dict>
    <key>com.apple.security.temporary-exception.apple-events</key>
        <array>
            <string>com.apple.preference</string>
            <string>com.apple.systemevents</string>
        </array>
</dict>
</plist>


更新答案

好吧,在玩了一下我以前从未使用过的沙箱之后: 我使用了以下选项:

但是,对于专门提供脚本访问的应用程序 组,您可以向这些应用程序发送适当的 Apple 事件(如果您的 应用程序包含脚本目标权利。

对于其他应用程序,通过使用临时例外权利, 您可以启用将 Apple 事件发送到特定应用程序列表 您指定的,如权利密钥参考中所述。

所以在权利文件中。

您需要添加权利:

com.apple.security.temporary-exception.apple-events

将其设置为Array

然后向其中添加两个项目。

com.apple.systempreferences

com.apple.systemevents

这些项目应该是strings

保存文件。

这就是我所做的一切,没有添加其他权利

在我的测试中,系统首选项打开并选择了代理选项卡。

这也向您显示任何应用程序,即使您告诉一个应用程序告诉另一个应用程序/进程..做某事。两个应用程序都必须在列表中


对您的设置进行轻微更改应该可以解决您的问题:

通过这样做,我注意到在您的编辑中您显示您已添加:

com.apple.preferences。

所以你只需要把它改成正确的id即可com.apple.systempreferences


答案原文部分:


如果您阅读了关于AppSandbox我在评论中为您提供的链接。我建议这样做,因为我假设您的应用程序已经被沙箱化了。 您应该已经看到:

在辅助应用程序中使用辅助功能 API 通过 App Sandbox,您可以 并且应该使您的应用程序具有可访问性,如中所述 OS X 的辅助功能概述。但是,您不能将 辅助应用程序,例如屏幕阅读器,并且您无法将应用程序沙箱化 控制另一个应用程序。

(我自己刚刚读过这篇文章)

这意味着对于辅助应用程序中的辅助功能 API 和沙箱处理,您可以执行其中之一,但不能同时执行两者。

然而也有这一点,但你需要调查它的含义

但是,对于专门提供脚本访问的应用程序 组,您可以向这些应用程序发送适当的 Apple 事件(如果您的 应用程序包含脚本目标权利。

对于其他应用程序,通过使用临时例外权利, 您可以启用将 Apple 事件发送到特定应用程序列表 您指定的,如权利密钥参考中所述。

进一步阅读还有另一种可能的方法

最后,您的应用程序可以使用 NSUserScriptTask 类的子类来 从特殊目录运行用户提供的 AppleScript 脚本, NSApplicationScripts目录(~/Library/Application 脚本/代码签名标识符/)。虽然您的应用程序可以读取文件 在该目录下,不能向该目录写入文件;这 用户必须在此处手动放置脚本。有关详细信息,请参阅 NSUserScriptTask 和 WWDC 2012 的文档:安全自动化 OS X 中的技术。


您使用的策略不是我想要的应用程序。我认为像这样使用 GUI 会留下很大的失败空间。要么是因为 GUI 中的元素树变化,要么是用户交互使焦点偏离了系统事件的预期目标。

我认为更好的方法是通知用户自行更改代理。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当我将 OS X 升级到 10.9 时,我的 applescript 不再工作 的相关文章

  • Objective-C 声明的 @property 属性(非原子、复制、强、弱)

    有人可以向我详细解释一下我何时必须使用每个属性 nonatomic copy strong weak等等 对于声明的属性 并解释每个属性的作用是什么 某种例子也很好 我正在使用ARC 非原子的 Nonatomic https stackov
  • NSOpenPanel setAllowedFileTypes

    我有一个 NSOpenPanel 但我想让它只能选择 PDF 文件 我正在寻找类似的东西 NOT WORKING NSOpenPanel panel panel NSOpenPanel openPanel panel setFloating
  • UIWebView webCore 在 iOS7.1 中崩溃(示例:www.latimes.com)

    当我打开 洛杉矶时报 www latimes com 时 我的 iOS 应用程序崩溃了 崩溃发生在 WebCore 的某个地方 但我不知道在哪里 使用 Zombie 或 leaks 进行分析不会针对此 EXE BAD ADDRESS 错误返
  • 在 UIImage 上添加点击手势

    我正在尝试制作可点击的 UIImage 用户可以点击它然后它就会动画 我正在使用 UIScrollVIew 这就是为什么我使用 UITapGesture 而不是 TouchBegan 而且 UIGestureRecognizer 似乎与 U
  • 在 Interface Builder 中设置 UIImageView 的图像

    当我在 IB 中为 UIImageView 设置图像并模拟界面时 按钮和内容会显示 但图像视图不会显示 这是因为 Interface Builder 使用的模拟器独立于您的项目 它只是获取 xib 文件 构建界面并显示它 因此 它找到引用但
  • alloc 和 init 他们实际做了什么

    有人可以向我解释一下 init 和 alloc 在 Obj C 中的作用吗 我正在阅读这本 obj c 书 其中给出了创建对象的示例 但它并没有真正详细介绍它的作用 alloc返回什么 init 返回什么 Animal k Animal a
  • 如何使用自动布局使 UILabel 在屏幕中水平和垂直居中?

    我已经使用自动布局几天了 我试图将 UILabel 在屏幕中垂直和水平居中 但我在使标签居中方面运气不佳 我希望实现如下所示的目标 Label SIGNIN REG 我向 UILabel 添加了以下约束 NSLayoutConstraint
  • 解析 URL 字符串以获取键值的最佳方法?

    我需要解析一个 URL 字符串 如下所示 ad eurl http www youtube com video 4bL4FI1Gz6s hl it IT iv logging level 3 ad flags 0 endscreen mod
  • -performSelector:withObject:afterDelay: 如何工作?

    我目前的工作假设是 performSelector withObject afterDelay 不使用线程 而是安排一个事件在稍后的日期在当前线程上触发 它是否正确 进一步来说 void methodCalledByButtonClick
  • 收到 NSInvalidArguementException 错误

    我想这可能与过度释放有关 它不断崩溃if managedObjectContext save error 就像每三次调用该方法一样 当我添加 3 个练习时 更新 我注意到当我往返于不同的例程实例时会发生这种情况 2011 04 28 04
  • iOS 6.0 Quicklook QLPreviewController 错误:“无法找到已加载代理的预览项目”

    我的应用程序一直使用 QLPreviewController 来显示所有类型的文件 在 iOS 5 x 中 它似乎做得很好 现在 在 iOS 6 0 中 我收到一个错误 它显示了控制器 但带有恒定的加载指示器 并且从未实际加载任何内容 日志
  • 使用 Titanium Mobile 编译应用程序后 JavaScript 代码会发生什么

    我从 appcelerator 安装了 Titanium 并构建了 KitchenSink 示例应用程序 一切正常 我只是想知道 javascript 代码最终在构建的应用程序中的位置 我用 grep 编辑了 Xcode 项目以及结果应用程
  • ASIHTTPRequest 登录页面

    我尝试制作一个 iPhone 应用程序 可以登录到使用 https 保护用户信息的 Web 应用程序 现在我陷入了登录页面 我不知道通过我的应用程序登录时如何检查用户网站中的真实帐户 即使我输入错误的帐户 我也只收到 200 的回复 这是我
  • 目标 C:检测震动

    我正在使用 shake api 如下所示 void motionEnded UIEventSubtype motion withEvent UIEvent event if event subtype UIEventSubtypeMotio
  • 从 UIImageView 的中心对 UIImageView 进行动画处理

    我有一个UIImageView应该从动画size 0 0 gt 93 75 我有以下内容 UIView animateWithDuration 0 5 delay 0 options UIViewAnimationOptionTransit
  • 更改 UIDocumentInteractionController 图标

    我想知道如何更改表视图中显示的图标 我查看了文档UIDocumentInteractionController on 苹果网站但我没有成功编辑我的 plist 如果有人知道如何执行此操作 请提供帮助 Thank you 注册您的应用程序支持
  • iOS 7 仅横向应用程序无法访问照片库

    我有一个仅限风景的应用程序 每当我访问照片库时 应用程序就会崩溃 因为UIImagePickerViewController正在尝试以纵向模式加载 应用程序在 iOS 5 和 6 中运行良好 我收到以下错误 由于未捕获的异常而终止应用程序
  • LocalNotifications 的振动和声音

    如何向本地通知添加振动和声音 code UILocalNotification notification UILocalNotification alloc init NSDate firedate settime date notific
  • 从故事板向 UILabel 属性字符串添加下划线失败

    从故事板中我选择有问题的 UILabel 然后在属性检查器 gt 标签 gt 我选择 属性 同样在属性检查器 gt 标签 gt 文本 gt 我选择内容 然后我单击字体图标并选择下划线 基本上 我从弹出的 字体 窗口中选择的任何更改都不会生效
  • iOS 7 导航栏在 viewDidAppear 上跳跃/拉伸

    I am trying to update my app for iOS 7 When my views appear on the screen you can see that there is a gap between the na

随机推荐

  • EncryptedXml DecryptDocument 方法抛出“错误数据”异常

    我为加密 解密流编写了一个代码块 该代码在我的本地机器上运行 但是当我在网络上发布我的代码时 解密函数抛出 错误数据 异常 这是我的加密和解密函数 private static MemoryStream EncryptStream XmlD
  • 通过 Windows 10 控制台 VT-100 转义序列获取光标位置

    我正在尝试 Windows 10 控制台中对 VT 100 转义序列的新 有限 支持 支持的序列记录在https msdn microsoft com en us library windows desktop mt638032 v vs
  • Heroku SSL 端点出现问题

    我正在尝试向 Heroku 添加 SSL 证书 该证书是从 Network Solutions 购买的 我完成了所有步骤并创建了一个 csr 文件 将该文件上传到 NetworkSolutions 下载了他们的 crt 文件包 MYSITE
  • 如何在 JavaScript 中创建可链接函数?

    让我们想象一下这样的函数 function foo x x return x 它的用法如下 var x y x Notepad y foo x console log y Prints Notepad 我正在寻找一种方法来创建可与其他函数链
  • 从标记的枚举中获取描述属性

    我正在尝试创建一个扩展方法 该方法将返回List
  • 如何优雅地检查 Erlang 中的许多条件?

    因此 当用户发送注册帐户的请求时 他们会发送用户名 密码 电子邮件和其他信息 注册功能必须验证其所有数据 一个例子是 验证电子邮件未被使用 验证用户名未被使用 验证用户名是字母数字 验证所有字段的长度都超过 X 个字符 验证所有字段的长度都
  • 启动应用程序,在 C++ 中捕获 stdout 和 stderr

    如何启动应用程序并通过 stdout 或 stderr 捕获输出 我正在编写一个自动构建系统 我需要捕获输出进行分析 我想更新 svn 存储库并获取修订号 以便如果成功的话我可以移动 autobuild revNumber 中的文件 我还想
  • Ant - 仅复制文件而不复制目录

    我需要使用 Ant 脚本复制文件夹中除目录之外的所有文件 我使用下面的脚本来做到这一点
  • 当 单元格中的文本发生更改时,jQuery 事件侦听器?

    jQuery 有没有办法将监听器附加到 td 以便当单元格内的文本发生更改 由 JavaScript 而不是用户 时 会触发该事件 延长姆威的回答 这是一些代码 var td my table tr td eq 1 var tdHtml t
  • 是否有任何理由重写 Java 8 中枚举中的方法

    正如所指出的herelambda 提供了一种非常优雅的方式来指定各个枚举值的行为 在 Java 8 之前 我通常会将其实现为 enum Operator TIMES public int operate int n1 int n2 retu
  • SQLite - 对表进行排序

    我有一个 SQLlite 数据库 我想按字母顺序对表进行排序 我该怎么做 有没有一种方法可以仅使用 SQLite 对条目进行排序 或者我是否必须首先将表读入数组 对其进行排序 然后将其写入数据库 这是我的查询 从表中选择条目 其中 id 我
  • Kubernetes 资源版本太旧

    我正在开发一个为不同 k8s 资源创建监视的操作员 我时不时地可以在日志中看到以下异常 并且应用程序停止 是什么导致了这个问题 我该如何解决这个问题 io fabric8 kubernetes client KubernetesClient
  • 使用 os.walk 读取文件[重复]

    这个问题在这里已经有答案了 我正在尝试访问植根于主目录的子目录中的文件 为此 我正在使用os walk 我能够成功访问文件名并将其存储在列表中 但是 当我尝试使用打开这些文件时open filename r 我收到一条错误消息 告诉我不存在
  • 自动装配不适用于类 @Entity

    我有一堂课叫Menu 注释为 Entity我需要在名为的类中使用一个方法杰斯托 梅萨吉 Component Entity Table name menu public class Menu implements Serializable A
  • 通过 jQuery 添加的脚本标签在 FireBug 中不可见

    我正在添加
  • Spring data JPA 原生查询跳过锁定

    我想执行一个SKIP LOCKED使用 Spring Data JPA 对 Oracle 进行查询 所以我尝试了以下操作 Lock LockModeType PESSIMISTIC WRITE Query value SELECT FROM
  • 更新数据库 Android

    谁能告诉我如何更新android中的数据库 我创建了一个带有嵌入式数据库的应用程序 我更改了清单中数据库的版本并创建了更新方法 我想测试它以查看数据库是否正确更新 但是当我使用 adb 命令时 只有 r 允许我重新安装 但它会保留数据库 有
  • SignalR 2.0.2 创建持久连接

    我使用包管理器控制台将 SignalR 2 0 2 安装到我的 MVC 4 5 应用程序中 我做了连接配置的标准示例 namespace SignalRPersistent public class Startup public void
  • 如何在 C# 中使用 XMLREADER 从 XML 字符串读取特定元素

    我有 XML 字符串
  • 当我将 OS X 升级到 10.9 时,我的 applescript 不再工作

    以下代码尝试打开代理设置对话框 NSAppleScript a NSAppleScript alloc initWithSource tell application System Preferences nset current pane