自动操作

自动操作文件分类

使用 mac 自带的app /Application/Automator.app (自动操作), 可以创建自动工作流.

用此app新建文件, 会创建到 /Users/<username>/Library/Services/ 目录, 创建文件格式有好几种, 如下图所.

image-20201118181847738

以下简要介绍其中的一些文件格式及其用法:

工作流程

默认图标为 image-20201118190053854

在访达张扩展名为 .workflow, 用 Automator.app 上打开 显示的扩展名 也是 .workflow.

image-20201118201408081

无法绑定快捷键, 无法在右键菜单中出现出现

应用程序

扩展名为 .app, 默认图标为 image-20201118201119255

无法绑定快捷键, 无法在右键菜单中出现出现

有以下即用用法:

设为开机自启app

image-20201118195201923

设为开文件的默认app

image-20201118195958622 image-20201118200308369

iShot2020-11-18 20.06.06

image-20201118200349909

image-20201118200945959

快速操作

"快速操作” 又名 ”服务”, 默认图标为image-20201118185716458, 也可在Automator.app中自选图标.

image-20201118185944072

"快速操作"在访达中文件扩展名为 .workflow, 而"工作流程”也显示为 .workflow.

用 Automator.app 打开后, “快速操作"会显示为”.workflow (快速操作)”, 而"工作流程”显示为”.workflow”, 这二者不同.

有以下即用用法: 以下用法仅对 /Users/<username>/Library/Services/ 中的"快速操作”有效.

绑定快捷键

所有服务, 都会出现在"系统偏好设置-键盘-快捷键-服务” 中, 如下图所示.

image-20201118183054420

右键菜单-快速操作

若一个服务 是位于访达.app的, 不论是否在"系统偏好设置-键盘-快捷键-服务”菜单中被勾选, 都会在"系统偏好设置-扩展-访达”里出现.

image-20201118184042137

image-20201118185112810

若在此菜单中勾选此服务, 则在访达的"右键菜单-快速操作”看见它

image-20201118185016570

右键菜单-服务

若一个服务, 是位于访达.app的, 在"系统偏好设置-键盘-快捷键-服务”菜单中被勾选, 不论是否绑定了快捷键, 则在访达的"右键菜单-服务"也会出现它

image-20201118184328895 image-20201118183534692

授权原理

授权的原理

mac的automator运行内核, 从用如下授权的原则:

app A (-> 快速操作) -> app B

若当前某app A, 触发一个快速操作, 它令app B (B≠A) 去执行某个需要授权的操作,

或者用Automator写的一个 app A, 直接令令app B (B≠A) 去执行某个需要授权的操作,

需要授权的操作例如按按键/关闭窗口/退出app,

则需要把app A添加到”安全性与隐私-辅助功能”, 并在"”安全性与隐私-自动化”中允许app A控制app B. 具体步骤如下:

”安全性与隐私-辅助功能”

若App A, 或中介的快速操作的代码里, 用到了"System Events”, 则必须把App A添加到”安全性与隐私-辅助功能”

注: System Events.app 是app A令app B执行快捷键的中介应用.

image-20201118182150048

否则会有如下报错:

image-20201118182237257
”安全性与隐私-自动化”

在把App A添加到”安全性与隐私-辅助功能”后, 首次允许时, 会弹出弹窗, 要求用户授权app A控制app B:

iShot2020-11-18 18.11.02

若授权, 则之后再次执行此workflow, 无需再次授权, 且在”系统偏好设置-安全性与隐私-自动化”中, 会看见

iShot2020-11-16 01.36.40

若未授权, 则会如下报错, 解决方法是在上图的”系统偏好设置-安全性与隐私-自动化”中, 允许app A控制app B.

image-20201118182451788

全局授权

根据上述的授权原理可知, 如果写一个快速操作, 要授权一切app A, 去经由此快捷操作xxx.workflow, 令某个app B执行特定的操作, 则需要对每个app A 去一一授权, 十分麻烦.

解决办法是:

step 1: 转换为应用程序

将此快速操作用automator.app打开, 点文件-转换为, 选”应用程序”, 然后在自动新建的副本中, 按⌘S, 钻则保存为”应用程序”, 得到xxx.app.

然后对xxx.app授权:

”安全性与隐私-辅助功能”:

若xxx.app的代码里, 用到了"System Events”, 则必须把xxx.app添加到”安全性与隐私-辅助功能”

iShot2020-11-16 01.55.30
修改 xxx.app 后重添加 xxx.app

每当修改 xxx.app 后, 必需从上图中选中 xxx.app-删掉, 再点+重新加上 xxx.app . 不然在”辅助功能”与”自动化”中的 xxx.app 是旧的 xxx.app , 新的 xxx.app 无法得到此二者授权, 运行时会分别报此二者所致的错.

”安全性与隐私-自动化”

在finder里, 双击xxx.app, 初次运行它, 在弹出授权窗口(例如下)时点”好”:

iShot2020-11-18 18.11.02的副本

则在”系统偏好设置-安全性与隐私-自动化”里会看见xxx.app对B.app有了权限

iShot2020-11-16 01.36.40

step 2: 另写一个快速操作

另写一个 xxx.workflow (快速操作), 其内容如下, 仅调用xxx.app. 这样, 则可以在将 xxx.workflow (快速操作) 绑定快捷键, 并添加到右键菜单, 具体做法详见上文.

iShot2020-11-18 22.03.52