appS 是不是需要授权才能执行启动应用程序的 AppleScript?
Posted
技术标签:
【中文标题】appS 是不是需要授权才能执行启动应用程序的 AppleScript?【英文标题】:Are entitlements required to for appA to execute an AppleScript that launches appB?appS 是否需要授权才能执行启动应用程序的 AppleScript? 【发布时间】:2013-04-18 22:55:46 【问题描述】:我们有两个签名的 Mac OS X 应用程序(我们开发的——非“应用商店”应用程序)。 appA 运行一个 Applescript(来自 .scpt 文件),它向 appB 发送一条消息以启动和搜索一些文本。
这在 OS X 10.6 上完美运行。
在 OS X 10.7 和 10.8 上,我得到不同的行为:当 appA 运行 Applescript 时,appB 不会启动。但是,如果 appB 已在运行,则 appB 会收到 appA 的消息并处理请求的搜索。
这似乎是一个沙盒问题:当我们向终端发出此命令时:
sudo spctl --master-disable
……重启,Applescript在10.8上启动appB也没有问题。在 10.7 上,appB 仍然不会启动。
我们是否需要临时授权才能执行 AppleScript 脚本(或发送 AppleEvents)到我们的其他应用程序?这两个应用程序都是使用 codesign 手动签名的。这些权利是否从开发者关系中获得并通过协同设计应用?
appA 获取 AppleScript 并通过以下函数执行:
OpenDefaultComponent(), OSALoad(), AEBuildAppleEvent(), OSAExecuteEvent()
正在执行的 AppleScript 是:
on lookup(search_phrase)
tell application "appB"
activate
lookup (search_phrase)
end tell
end lookup
property ASDScriptUniqueIdentifier : "Lookup.scpt"
【问题讨论】:
您不会说您的应用程序是否被沙盒化。如果它们没有被沙盒化,那么权利就不是问题。我将首先在执行 AppleScript 脚本的代码中查找报告的错误 (a),以及 (b) 在系统控制台中报告的错误。我的猜测是 AppleScript 代码找不到“appB”。您可以尝试在 tell 语句中使用捆绑 ID 而不是应用名称,以使应用查找更加健壮。 @MarkAlldritt -- 会尝试,但它仍然没有解释为什么它在 10.7 和 10.8 上失败了 -- 或者为什么关闭网守可以完全解决 10.8 上的问题。 @MarkAlldritt -- 在“appB”中编辑 Tell 应用程序以将其更改为其捆绑 ID(“com.writebros.appB”)会导致 AppleScript 编辑器在我去时要求解析捆绑 ID保存更改。我注意到另一个问题是,在 10.8 上,一旦 appB 启动,它就会立即消失(隐藏)。但是,如果我执行第二次激活(在查找之后),那么 appB 将被提前。 【参考方案1】:我不知道,但如果 appB 是 Applescript(真的是 脚本,而不是应用程序),您可以。
那么你可以使用(在 AppA 中):
set AppB to load script alias "path:to:app:B"
set scriptResult to AppB's theaction() --Change theaction to your needs
这样,您会将 appB 加载到 appA 中,从而导致 appA 实际执行操作。
【讨论】:
appA 和 appB 都是 Carbon Mach-O 可执行应用程序。以上是关于appS 是不是需要授权才能执行启动应用程序的 AppleScript?的主要内容,如果未能解决你的问题,请参考以下文章
iOS15系统App Tracking Transparency提审被拒
为啥我的 Create React App Dev Server 需要这么长时间才能启动?