沙盒化后辅助功能 API 停止工作

Posted

技术标签:

【中文标题】沙盒化后辅助功能 API 停止工作【英文标题】:Accessibility API stops working after sandboxing 【发布时间】:2012-01-15 16:16:56 【问题描述】:

我的 Mac 应用程序使用辅助功能 API 来移动(其他应用程序的)调整大小窗口。

我想将我的应用程序提交到 MAS(Mac App Store)。我已经读过,必须向 MAS 提交应用程序才能打开沙盒。

当我打开沙盒时,我的代码无法通过辅助功能 API 找到焦点窗口(始终返回 NULL)。问题是:可访问性 API 不能与沙盒一起使用?

我注意到 Mac App Store 中有使用辅助功能 API 的应用程序,现在不是强制沙盒吗?

提前致谢。

【问题讨论】:

【参考方案1】:

首先,根据我发现的研究,到 2012 年 6 月 3 月 之前,Mac Apple Store 上的所有应用都需要进行沙盒化。不是沙盒不会让您的应用适应未来。

其次,我发现了 3 种策略,您可以考虑:

    Look up the list of entitlements 和 see if you can grant your app access via the Entitlements(Apple 允许应用程序特权访问他们需要的关键功能的方式)。 Here's a walk-through via Apple's documentation on how you can stack-trace through which entitlements you're missing and might need。 就您想要访问的特定功能向 Apple 提交错误请求。谁知道呢,他们实际上可能会更新他们的代码库以允许您访问。 考虑将应用程序作为产品在电子商务网站上销售,而不是在 Mac Apple Store 上销售。人们仍然可以在常规网站上购买和安装您的应用(正如 Versions、TextMate 和其他出色的应用在进入 MAS 之前所做的那样),尤其是当您的应用执行在 MAS 上找不到的事情时。

如果您查看文档,您会发现它明确声明您不能对辅助应用进行沙箱处理。

这是excerpt from their documentation on preparing an App for Sandbox:

在辅助应用中使用无障碍 API

使用 App Sandbox,您可以并且应该启用您的应用的可访问性,如中所述 可访问性概述。但是,您不能将辅助应用程序沙箱化 例如屏幕阅读器,并且您不能将控制的应用程序沙箱化 另一个应用程序。

这是excerpt from their documentation on Accesibility in Cocoa:

注意:使用 App Sandbox,您可以并且应该启用您的应用 可访问性,如本文档中所述。但是,您不能 将屏幕阅读器等辅助应用程序沙箱化,您不能 沙盒控制另一个应用的应用。

这听起来有点像双关语:您应该让您的应用可访问,但是您不能沙箱化助手应用...

【讨论】:

感谢您的回答多米尼克。所以我不能沙箱我的应用程序,因为它控制其他应用程序的窗口?如果我想将它提交给 MAS,我必须对我的应用程序进行沙箱处理吗?如果沙盒是强制性的,那么 MAS 中的应用程序(例如 Divvy 或 Breeze)怎么可能使用无障碍 API? 再次感谢 Dominic,您的回复非常快。我试过激活所有权利,但它不起作用。我明天会尝试联系 Apple 支持寻求解决方案... 我想知道 MAS 中无法在 2012 年 3 月 1 日进行沙盒化的应用会发生什么... 阿斯皮里没问题。我会检查那些应用程序,我不熟悉它们。我的第一印象是他们必须使用权利。 关于激活权利,您是否找到了特定于您的应用程序要求的权利?这可能是一个单独的 SO 问题。

以上是关于沙盒化后辅助功能 API 停止工作的主要内容,如果未能解决你的问题,请参考以下文章

由于辅助功能设置未检测到 iOS 手势

从 osx 中的任何应用程序获取选定文本的辅助功能 API 替代方案

沙盒化容器:是容器还是虚拟机

如何通过辅助功能 API 获取当前选定文本的全局屏幕坐标。

匹配辅助功能大文本字体大小

iOS 13 语音控制辅助功能 - 有没有办法执行更多自定义操作(而不仅仅是链接到辅助功能标签)?