首页 > 解决方案 > NSUserAutomatorTask 变量数组/列表值不能被 Automator 操作解析

问题描述

我正在使用NSUserAutomatorTask从 macOS 应用程序启动 Automator 工作流程。

我通过variables属性传递变量: https ://developer.apple.com/documentation/foundation/nsuserautomatortask/1418099-variables

在 Automator 工作流程中,我将使用Get Value of Variable操作来获取在 上设置的NSUserAutomatorTask变量并将变量传递给后续 Automator 操作:

获取变量的值


代码如下所示:(简化;我还检查了工作流中是否存在变量

let workflow = try! NSUserAutomatorTask(url: url)
workflow.variables = [
    "singleFilePath": "/image1.png",
    "multipleFilePaths": ["/image1.png", "/image2.png"],
]
workflow.execute(withInput: nil)

我可以通过一个Ask for Confirmation动作打印出警报中的变量值:

可变字符串值。

变量的String值是一个简单的字符串:/image1.png

数组变量的[String]值用括号括起来,每一项都被引用:

(
  "/image1.png",
  "/image2.png"
)

我现在运行如图所示的 Automator 工作流程,它首先获取变量的值,然后尝试打开这些 Finder 项目。

singleFilePathvar 有效。它被传递给 Open Finder Items 操作,并且该文件由默认应用程序打开。

以同样的方式通过multipleFilePaths是行不通的。没有文件被打开。Automator 显示错误:

“打开查找器项目”操作未提供所需数据。


该动作是“Open Finder Item s ”,因此必须有某种方法可以将多个文件路径传递给该动作。

我的问题和解决方案按优先顺序排列如下:

  1. 为什么默认变量数组/列表格式在传递给后续操作时不起作用?有没有办法以兼容的格式传递或解析数组变量?

  2. 我们可以使用单个 Run AppleScript操作将数组变量重新格式化为可以传递给后续 Automator 操作的格式吗?(我想继续链接 Automator 操作而不是运行纯 AppleScript)。

标签: macoscocoaapplescriptworkflowautomator

解决方案


Open Finder Items如果在正常的非变量工作流中使用,操作可以打开一组项目。它似乎采用完全相同的格式。

作为对此进行测试的控件,而不是变量,我正在使用该Get Specified Finder Items操作。

然后我使用一个View Results动作来检查发送到的内容Open Finder Items

结果似乎与我解析变量时完全相同:

(
  "/image1.png",
  "/image2.png"
)

获取指定的查找器项目

此工作流程确实正确运行最终操作并打开文件。

所以Open Finder Items应该使用我在变量中设置的数据。我不确定为什么无法打开可变数据但手动选择的文件可以。


我为此问题打开了 DTS 票证并收到以下回复:

很遗憾,从事此工作的工程师已经确认,是的,这是一个错误,不,没有沙盒应用程序的解决方法。他们还指出,这不是以前版本的行为回归。


推荐阅读