automator 无法直接修改 macos 应用的 .icns 图标,但可通过串联 shell 脚本、applescript 与 iconutil 等工具实现批量图标替换全流程:准备 .iconset 并转 .icns、覆盖 appicon.icns、刷新缓存并重启 dock。

Automator 本身不直接支持修改 macOS 应用程序内部的 .icns 图标文件,但它可以高效配合 Shell 脚本、AppleScript 和系统工具(如 sips、iconutil)完成「图标准备→打包→替换→刷新缓存」全流程的批量自动化。关键在于把图标处理和系统级操作拆解为可串联的步骤,而非指望 Automator 单独完成所有事。
准备标准 .icns 图标文件
macOS 应用图标必须是包含多尺寸图元的 .icns 文件,不能只用 PNG 替换。Automator 可调用 iconutil 将图标素材集(.iconset 文件)批量转成 .icns:
- 先用脚本或手动方式把一张 1024×1024 的 PNG 拆解生成标准
.iconset目录(含 icon_16x16.png、icon_32x32@2x.png 等共 10 个文件) - 在 Automator「快速操作」中添加「运行 Shell 脚本」动作,脚本内容为:
for f in "$@"; do iconutil -c icns "${f%.iconset}"; done - 输入源为 .iconset 文件夹,输出即为同名 .icns —— 这步可批量生成多个应用所需的图标资源
批量替换应用内 AppIcon.icns
替换需写入应用包的 Contents/Resources/ 目录,Automator 需结合 AppleScript 或 zsh 实现安全覆盖:
- 新建「快速操作」,接收「应用程序文件」
- 拖入「运行 AppleScript」,脚本示例:
on run {input, parameters}<br>repeat with appPath in input<br> set resPath to (POSIX path of appPath) & "Contents/Resources/"<br> do shell script "cp /path/to/custom.icns '" & resPath & "AppIcon.icns'"<br>end repeat<br>return input<br>end run - 注意:路径需提前设定好,且目标应用必须已退出;若需覆盖受 SIP 保护的应用(如 Finder),此法不适用
刷新图标缓存并重启 Dock
替换后图标不会立即生效,需触发系统重建图标数据库:
- 在上一步 AppleScript 后追加「运行 Shell 脚本」动作,内容为:
for f in "$@"; do sudo touch "$f"; done<br>killall Dock
-
sudo touch触发图标缓存重建(无需密码时可配置免密 sudo) -
killall Dock重启 Dock 以加载新图标;若不想弹出密码框,建议用launchd定时任务或临时提权
封装为拖拽式应用程序(推荐日常使用)
比起右键服务,拖拽执行更直观,适合设计师或开发人员反复使用:
- 新建 Automator 文档,类型选「应用程序」
- 拖入「获取指定的 Finder 项目」→ 设定默认图标文件夹(如 ~/Icons/)
- 再拖入「获取指定的 Finder 项目」→ 设定待替换的应用程序位置
- 插入「运行 Shell 脚本」整合图标转换、复制、刷新三步逻辑(可用一个脚本统一处理)
- 保存为独立 App,直接将图标文件夹和应用拖进窗口即可批量处理











