Platypus是一款根据脚本来创建macOS本地应用程序的开发工具。因此,脚本被转换成可以在窗口环境(如Finder、Dock等)下启动的常规应用程序,而不需要使用命令行来运行。
Platypus首次发布于2003年,并且经历了多次重要的更新。它是用Object-C/Cocoa编写的,是在BSD许可下发布的免费开源软件。这意味着源代码是免费的,您可以随意修改和发布它。
尽管Platypus是一款免费的开源软件,但它是十多年来投入了无数个小时的产物。所以如果Platypus让你的生活更轻松,请捐款支持进一步发展。
常规的macOS应用程序 是一个包(bundle) :具有特定目录结构的特殊文件夹
可执行的二进制文件、资源和配置文件一同存放在包中
当在用户界面打开包时,二进制可执行文件将会运行
Platypus使用一个特殊的二进制可执行文件来启动脚本并且捕获到该脚本的输出以此来创建应用程序包
该二进制文件可以配置为以不同方式显示脚本的文本输出,例如显示进度条、文本视图、状态项菜单或基于WebKit的Web视图。
Platypus不是将macOS本地API和脚本语言进行绑定,它不是一个完整的GUI开发环境,所以不适合去创建复杂和有动态用户交互的实质性应用程序(substantial applications)。
如果你想要创建更高级的macOS应用程序,您应该学会使用Cocoa api进行编程。
Platypus不是也永远不会取代 学习使用(大多数优秀的)本地应用程序编程接口
Platypus和它生成的应用程序都需要macOS 10.8 以上的版本,并且提供64位英特尔二进制
如果你想使用10.6或者32位系统,可以使用Platypus 4.9 版本
如果想使用10.4或者更早以前的 PowerPC用户,请使用 Platypus 4.4版本
Platypus是由Sveinbjorn Thordarson 构思和实现的。
它的应用图标是由 Drífa Líftóra 所设计的
在此致谢
Troy Stephens: IconFamily类的原作者,用于处理Platypus中的图标
Bryan D K Jones: VDKQueue的作者
Gianni Ceccarelli:负责为经过身份验证的脚本提供代码
**Matt Gallagher :负责临时文件安全代码
** Andy Matuschak:负责更新框架
这数十年来 Stack Overflow 和 OmniGroup Mac开发邮件列表 也起着非常重要的作用。
最后,非常感激 Wilfredo Sanchez,DropScript项目的作者,一开始激励我完成Platypus的概念证明项目。
Platypus的主界面比较直白明了,一旦启动Platypus应用程序,就会看到如下所示的窗口:
你应用程序的名称
要创建应用程序的脚本的路径。或者使用选择按钮可选择脚本,或在Platypus窗口中拖动脚本文件。您还可以手动输入路径(文本字段支持shell样式 按tab键自动填充)。
一旦选择了脚本,就可以按下编辑按钮在默认文本编辑器中打开它。Platypus 默认使用一个非常基本的内置文本编辑器。如果您想使用功能更丰富的外部编辑器,您可以在Preferences 中进行修改。
New按钮会在Platypus 应用程序文件夹中创建脚本文件,并在默认编辑器中打开它。Reveal按钮显示Finder中的脚本文件。
使用Script Type 为您的脚本指定一个脚本解释器。从弹出菜单中选择一种预定义的脚本语言,或者手动输入解释器二进制文件的路径。
大多数情况下,您不需要手动指定。每当打开脚本文件时,Platypus都会根据文件后缀以及shebang行(#!)自动确定其脚本类型。如果您已经在脚本文件中指明了,那么Platypus通常是足够聪明去解决这个问题的。
请注意,解释器必须存在于运行应用程序的系统上。所有预设的脚本语言解释器(Node.js除外)都是所有MacOS安装的标准部分。
Args让您能够向脚本或其解释器添加参数。
Interface设置应用程序的用户界面。Platypus提供了六种不同的界面风格:
不提供图形反馈的无窗口应用程序。所有脚本输出都重定向到STDERR.
在脚本执行过程中,会出现一个带有不确定进度条和取消按钮的小窗口。脚本输出逐行输入到进度栏上方的文本域中。Details按钮显示一个包含完整脚本输出的小文本视图。
显示包含脚本输出的文本视图的窗口。请注意,此文本视图不是一个完整的交互式终端会话,不能用于提示用户通过STDIN输入。它不支持任何标准终端命令,也不能用于显示基于ncurses的界面。
文本视图的样式可以Text Settings中设置
脚本的输出在WebView窗口中呈现为HTML。这允许您使用HTML格式和其他Web技术向用户显示脚本输出。
浏览器实例的根目录是应用程序包的资源目录,因此可以通过将图像和其他支持文件添加到捆绑文件列表并然后从该目录引用它们。
在启动应用程序时,在菜单栏中创建一个状态项。每次点击状态项时,脚本都会被执行,其文本输出将在菜单中逐行显示。如果选择了菜单项,将再次执行脚本,并将选定项的标题作为参数传递给脚本。
状态项的属性(图标、标题等)可以在Status Item Settings按钮中设置。
创建一个正方形窗口,指示用户将文件放在上面运行。在运行过程中,脚本输出将逐行显示,并带有一个不确定的循环进度指示符。
Platypus允许你为你的应用程序设置一个图标。您可以从预置的图标中选择,粘贴自己的图像或选择image或icns文件。
请注意,Platypus从一个普通的图像文件中创建图标时,通常效果不太理想。因此要获得最佳效果,请使用专业的图标编辑软件进行编辑,并通过Select .icns file 选项导入精心制作的.icns文件。
这个Identifier文本域 指定应用程序的唯一标识符。如果您已经设置了应用程序名称,这将默认为“org.用户名.应用程序名”。
每个MacOS应用程序都有一个称为包标识符的唯一字符串,该字符串的形式是反向DNS名称(例如“com.apple.iTunes”或“org.sveinbjorn.Platypus”)。Platypus使用应用程序名称和默认用户名自动格式化包标识符,但您可以将其设置为任何您想要的。默认的包标识符前缀可以在Preferences中进行修改.
你也可以设置Author和Version元数据。此信息将出现在Finder中你应用程序的“GET Info”窗口和通过应用程序菜单栏可访问的“关于”窗口中。
如果选中,应用程序将提示输入管理员密码,并使用Apple的安全框架以升级(根)权限执行脚本。这并不完全等同于root权限用户运行脚本。有关详细信息,请参阅MacOS安全框架文档.
Platypus脚本不能使用“sudo”命令…这将导致脚本提示用户输入STDIN,由于没有输入,应用程序将无限期挂起。
请注意,如果选择了此选项,由于SecurityAPI中的限制,无法捕获STDERR输出。这可以通过使用shell脚本执行另一个脚本来规避,通过管道将STDERR传输到STDOUT(如:perl myScript.pl 2>&1).
如果被选中,应用程序将自己注册为用户界面元素(LSUIElement),并且在启动时不会出现在Dock中。
此选项告诉应用程序在脚本执行后保持打开状态。
Bundled Files包含应当被拷贝到 应用程序包的Resources文件夹的文件
然后,在同一文件目录下运行的脚本可以使用这些文件
勾选Accept dropped items使得应用程序包能够接受拖入的文件或者文本片段。
您可以通过下拉设置 来指定 应用程序包 能够接受哪些类型的文件和可拖动数据。