Platypus:把 Shell 和 Python 脚本打包成能双击启动的 macOS 应用
【免费下载链接】PlatypusCreate native macOS applications from command line scripts.项目地址: https://gitcode.com/gh_mirrors/pl/Platypus
每次写完脚本,最后一步往往最闹心:想递给同事,他不会往终端里敲命令;自己又懒得学 GUI 开发。Platypus 解决的就是这一步——把 shell 脚本或 Python、Perl、Ruby 脚本包装成一个可双击启动的 macOS .app 应用,全程不写一行 GUI 代码。
脚本和应用之间,隔着一整套应用包结构
传统做法是把脚本变成"正规 Mac 应用":先搞懂应用包(bundle)的目录结构,手写 Info.plist,再处理可执行文件和窗口,折腾下来一两天就没了,而你的脚本可能只有一屏。
Platypus 把这条路径压缩成一次包装操作。它 2003 年首次发布,维护了二十多年,用 Objective-C/Cocoa 编写,以 BSD 3-Clause 协议开源。你不需要读 Objective-C,也不需要理解 Cocoa,生成的应用却能像其他任何 Mac 应用一样从 Finder 或 Dock 启动。
Platypus 的工作机制:给脚本套一层 .app 壳
原理并不神秘。macOS 的 .app 本质上就是一个有固定结构的文件夹,双击启动时执行的其实是 Contents/MacOS 里的二进制。
Platypus 生成的正是这样一个 bundle,只不过里面的二进制是一个通用的瘦可执行文件:它读取 AppSettings.plist 里的配置,运行你的脚本,再把输出送到你选定的界面上。脚本和随附文件统一放进 Contents/Resources 目录。
所以生成的应用体积小、启动快——它只携带脚本本身和少量界面资源。这个通用二进制的源码在仓库的 ScriptExec/SEController.m 里,通读一遍就能理解生成应用的完整运行过程。
用 Platypus 三步生成第一个应用
不用编译也能用:官方发布版约 3.5 MB,支持 macOS 11 及以上、Apple Silicon 和 Intel 两种架构。如果习惯自己构建,一条命令即可(需要 Xcode 构建工具):
git clone https://gitcode.com/gh_mirrors/pl/Platypus cd Platypus make build_unsigned产物会出现在products目录中。
界面操作只有三步:
- 打开 Platypus,点Select选脚本,也可以直接把脚本文件拖进窗口。打开脚本后,它会根据文件后缀和 shebang 行自动识别解释器。
- 输入应用名称,选择界面类型,按需更换图标、填写标识符和作者信息。
- 点Create,指定目标位置,一个 .app 就生成了。
Platypus 主界面:选好脚本、设置名称与界面后,右侧 Create 即可生成应用
六种界面:给脚本配一张合适的脸 ✨
同一个脚本,配哪种脸比想象中重要。Platypus 提供 6 种界面类型,各自对应一类典型用法:
- None:完全无窗口,纯后台跑,脚本输出重定向到 stderr,适合登录项、定时任务。
- Progress Bar:执行时显示进度条窗口,脚本可以实时更新百分比,适合耗时任务。
- Text Window:把脚本输出逐行显示在窗口里,适合日志、报告类脚本。注意它不是可交互终端。
- Web View:输出按 HTML 渲染。页面基准目录就是应用的 Resources,把图片和样式文件加进 Bundled Files 后可以用相对路径引用。
- Status Menu:在菜单栏放一个图标,每次点击都会运行脚本,输出行变成菜单项;选中某一项后脚本再跑一次,并收到该项的标题作为参数。
- Droplet:一个提示拖放的窗口,文件丢上来后逐个交给脚本处理。
Web View 界面:脚本输出的 HTML 直接在 WebView 窗口中渲染
让脚本驱动界面:拖文件进来、进度走出去
应用跑起来后还有两个问题:输入怎么进,进度怎么出。Platypus 的方案是命令行参数加脚本打印的约定行。
输入方向:勾选Accept dropped items后,应用就能接收拖放到窗口或 Dock 图标上的文件与文本——文件路径作为参数传给脚本,文本片段写入 stdin。Drop Settings里可以按文件后缀或 UTI 限定接受的类型,文件夹就加public.folder。还可以把应用注册成 URI scheme 处理器或系统服务。
Args 面板:给解释器和脚本分别指定参数,例如 bash 加 -l 以登录 shell 方式运行
输出方向:脚本只要打印几行约定文本。PROGRESS:75更新进度条,ALERT:标题|内容弹警告框,NOTIFICATION:标题|内容推送通知中心,REFRESH清空输出缓冲,QUITAPP结束应用。随附资源加进Bundled Files列表即可,它们会被复制进 Resources,脚本从工作目录直接就能取到。
Drop Settings:按 UTI 或后缀限定应用接受的拖放类型
一行终端命令:Platypus 命令行工具
想把应用生成放进构建流水线,就不必点界面。Platypus 附带同名命令行工具,在Settings里一键安装(二进制装到/usr/local/bin/platypus),装完后它完全独立于图形界面运行。
生成一个应用只需一行:
platypus -a "图片压缩器" -o "Droplet" -i icon.icns resize.py更省事的是,图形界面里的Show Shell Command会把当前设置翻译成等价的命令行,直接复制进脚本。你也可以把整套设置存成 .platypus 配置文件,用-P参数加载后批量生成。
命令行工具安装位置:二进制、ScriptExec、nib 与 man 页都放在 /usr/local 下
适用边界:Platypus 做不了什么
官方把边界写得很清楚:它不是 GUI 开发环境,也不能用来做复杂交互的应用。要做后者,还是得学原生 API;Platypus 只负责把"脚本到可双击应用"这一小段路走快。
几个常被问到的问题,直接说:
生成的应用能拿到别的 Mac 上用吗
可以,应用本身只是个 bundle。但脚本在目标机器上必须有对应解释器,Python、Perl、Ruby、shell 这些预置语言在 macOS 上通常都自带。
脚本里能弹输入框问用户要信息吗
不能直接问。文本窗口不是可交互终端,stdin 是断开的,sudo或 Python 的input()会直接挂住。要提问就借osascript弹 AppleScript 对话框,或者让用户通过拖放传参。
首次运行被 GateKeeper 拦住了
生成的应用默认不签名,macOS 会提示确认。可以右键选择"打开"信任它,正式分发前用codesign自己签一遍。
需要 Xcode 才能用吗
不需要。Xcode 构建工具只在从源码编译,或者你想压缩 nib 文件时才用到。
下一步与延伸资源 💡
想继续深入,按顺序做三件事:
- 从 Profiles 菜单的Examples子菜单打开示例。仓库 Examples/ 目录里有 18 个 .platypus 配置,涵盖拖放图片缩放、状态栏菜单、URI scheme 处理器等场景,逐个拆开看最直观。
- 通读 Documentation/Documentation.md,六种界面的全部行为、约定行语法和常见问题都在里面。
- 准备自动化时先装命令行工具,再对照 CLT/platypus_clt.m 的源码,把图形界面里的每一步设置变成可重复执行的命令。
【免费下载链接】PlatypusCreate native macOS applications from command line scripts.项目地址: https://gitcode.com/gh_mirrors/pl/Platypus
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考