把脚本变成本地的macOS应用程序【Platypus】

4,566 阅读23分钟

一、简介

什么是Platypus?

Platypus是一个开发工具,它可以为脚本创建本地的macOS应用程序包装。脚本因此被转化为普通的应用程序,可以从窗口环境中启动,例如Finder或Dock,而不需要使用命令行界面。

Platypus于2003年首次发布,此后经历了许多重大更新。它是用Objective-C/Cocoa编写的,是在BSD许可证下发布的免费开源软件。

Platypus是如何工作的?

常规的macOS应用程序是bundles - 具有特定目录结构和.app后缀的特殊文件夹。一个可执行的二进制文件与资源和配置文件一起存储在捆绑包中。当应用程序捆绑包在图形用户界面中启动时,这个二进制文件将被运行。

Platypus创建的应用程序捆绑包有一个特殊的可执行二进制文件,可以运行一个脚本并捕获其输出。该二进制文件可以被配置为以各种方式呈现脚本的文本输出,例如,显示一个进度条、一个文本视图、一个状态项菜单或一个基于WebKit的网络视图。

Platypus不是什么?

Platypus不是一套本地macOS APIs和脚本语言之间的绑定。它不是一个完整的GUI开发环境,也不打算用来创建具有复杂和动态用户交互的实质性应用程序。如果你想创建高级macOS应用程序,你应该学习使用Cocoa APIs编程。Platypus不是也永远不会是学习使用本地应用编程接口的替代品。

也就是说,你也许能够使用CocoaDialogPashuaAppleScript添加一些GUI元的交互式素。

系统要求

Platypus和它生成的应用程序都需要macOS 10.11或更高版本,并以64位ARM/Intel二进制文件提供。如果你想针对macOS 10.8-10.10,请使用5.3版。如果你想以10.6和/或32位Intel系统为目标,4.9版仍然可以正常工作。

二、基础知识

基本界面

Platypus的基本界面相对简单。当你启动 Platypus 应用程序时,你会看到一个看起来像这样的窗口。

image.png

应用程序名称

你的应用程序的名称。

脚本路径

你想创建一个应用程序的脚本的路径。可以使用选择按钮来选择一个脚本,或者将一个脚本文件拖到Platypus窗口上。你也可以手动输入一个路径(文本字段支持支持shell风格的tab自动补全)。

image.png

一旦你选择了一个脚本,你可以按下编辑按钮,在你的默认文本编辑器中打开它。Platypus默认使用一个非常基本的内置文本编辑器。如果你想使用一个功能更强的外部编辑器,你可以在**偏好设置中改变它。

新建按钮在 Platypus 应用程序支持文件夹中创建一个脚本文件,并在默认编辑器中打开它。显示按钮在Finder中显示该脚本文件。

解释器

使用脚本类型来为你的脚本指定一个解释器。你可以从弹出的菜单中选择一种预定义的脚本语言,或者输入解释器二进制文件的路径。

大多数情况下,你不需要手动指定。每当你打开一个脚本文件时,Platypus会自动尝试根据文件后缀和Shebang行(#!)来确定其类型。如果你在脚本文件本身中指定了这个元数据,Platypus通常会很聪明地把它找出来。

请注意,解释器必须存在于运行应用程序的系统中。所有预设的脚本语言解释器(除了Node.js)都是所有macOS安装中的标准部分。

Args让你向脚本和/或其解释器添加参数。

image.png

界面

image.png

界面设置应用程序的用户界面。Platypus提供了六种不同的界面类型。

无窗口的应用程序,不提供图形反馈。所有的脚本输出都被重定向到stderr

进度条

在脚本执行过程中出现一个小窗口,上面有一个不确定的进度条和一个 "取消 "按钮。脚本输出被逐行输入进度条上方的文本字段。显示细节 "按钮会显示一个包含完整脚本输出的小文本视图。

image.png

文本窗口

显示一个含有脚本输出的文本视图的窗口。请注意,这个文本视图不是个完整的、交互式的终端会话,不能用来通过stdin提示用户输入。它不支持任何标准的终端命令,不能用来显示基于ncurses的界面。

文本视图的风格可以在文本设置下进行配置。

image.png

Web View

脚本的输出在WebView窗口中被渲染成HTML。这允许你使用HTML格式和其他网络技术来向用户展示脚本输出。

浏览器实例的基础目录是应用程序捆绑的资源目录,因此你可以通过将图像和其他支持文件添加到捆绑的文件列表中,并相对于该目录引用这些文件来包含它们。

image.png

状态菜单

当应用程序启动时,在菜单栏中创建一个状态项。每次点击状态项时,脚本被执行,其文本输出在菜单中逐行显示。如果一个菜单项被选中,脚本会被再次执行,所选项目的标题作为参数传递给脚本。

状态项的属性(图标、标题等)可以在状态项设置按钮下进行配置。

[!](github.com/sveinbjornt…)

Droplet

创建一个方形窗口,指示用户将文件放在上面进行处理。在处理过程中,脚本输出会逐行显示,并有一个不确定的圆形进度指示器。

[!](github.com/sveinbjornt…)

设置图标

Platypus允许你为你的应用程序设置一个图标。你可以从预设的图标中挑选,粘贴你自己的图像或选择一个图像或icns文件。

请注意,让Platypus从一个普通的图像文件中创建图标,通常不会产生一个在小尺寸下看起来不错的图标。为了获得最佳效果,请使用专业的图标编辑软件,并使用选择.icns文件选项导入一个精心制作的.icns文件。

识别符、作者和版本

标识符文本字段指定了应用程序的唯一标识符。如果你已经设置了一个应用程序名称,这将默认为 "org.yourusername.YourAppName "的形式。

每个macOS应用程序都有一个独特的字符串,称为捆绑标识符,它采用反向DNS名称的形式(例如,"com.apple.iTunes "或 "org.sveinbjorn.Platypus")。Platypus自动使用应用程序名称和默认用户名来格式化捆绑标识符,但你可以将其设置为你想要的任何内容。默认的捆绑标识符前缀可以在**偏好中进行配置。

你还可以设置作者版本的元数据。这些信息将出现在你的应用程序的Finder "获取信息 "窗口中,以及通过应用程序菜单访问的 "关于 "窗口中。

特殊选项

**以root权限运行:**如果选择了这个选项,应用程序会提示输入管理员密码,并使用苹果的安全框架以升级的(root)权限执行脚本。这并不严格等同于以根用户身份运行脚本。详情请见macOS安全框架的文档

请注意,由于某些原因,位于/bin/bash的macOS bash shell不能以root权限运行

Platypus脚本不能使用'sudo'命令。这将导致脚本通过 "stdin "提示输入,而由于没有输入,应用程序将无限期地挂起。

请注意,如果选择了这个选项,由于安全API的限制,stderr输出不能被捕获。这可以通过使用一个shell脚本来执行另一个脚本,同时将stderr输送到stdout来规避(例如:python script.py 2>&1)。

**在后台运行:**如果选择,该应用程序在Launch Services注册为用户界面元素(LSUIElement),启动时不会显示菜单栏或出现在Dock中。

完成后继续运行。这个选项告诉应用程序在脚本执行完毕后保持打开。

捆绑文件

捆绑文件包含的文件应该被复制到应用程序捆绑的资源文件夹中。然后,这些文件可以被你的脚本使用,而你的脚本是在同一目录下运行的。

[!](github.com/sveinbjornt…)

另请参见FAQ中的如何在脚本中获得我的应用程序/捆绑文件的路径?

高级选项

接受文件和拖动的项目

勾选接受拖放的项目使应用程序捆绑接受拖放的文件,或拖放的文本片段。你可以在**拖放设置中指定应用程序应该接受哪些文件类型和可拖放数据。

[!](github.com/sveinbjornt…)

接受丢弃的文件意味着丢弃或打开的文件的路径被作为参数传递给脚本。你可以使用UTIs(推荐)或文件名后缀来指定接受哪些文件类型。

要接受拖动的文件夹,请添加UTI public.folder。提示:你可以从Finder中拖动文件到后缀或UTI列表中,添加它们各自的后缀/UTI。

可以选择为你的应用程序 "拥有 "的文件选择一个文件图标(.icns文件)。

选择接受掉落的文本使应用程序接受拖动的文本片段。文本字符串通过stdin传递给脚本。

提供macOS服务使应用程序注册为文本处理的动态服务,可从应用程序菜单的服务子菜单中访问。如果你想让你的应用程序接受在其Dock/Finder图标上的文本片段或URL,你也需要启用它。

注册为URI方案处理程序使应用程序注册为URI方案的处理程序。这些可以是标准的URI方案,如http或你选择的自定义URI方案(如myscheme://)。如果你的应用程序是某个URI方案的默认处理程序,它将在每次打开符合该方案的URL时启动。该URL将作为一个参数传递给脚本。

构建时间选项

Platypus允许你创建你的脚本应用程序的开发版本。通常情况下,脚本和任何捆绑的文件都会被复制到生成的应用程序中。如果在创建应用程序对话框中选择了开发版本,则会创建一个指向原始脚本和捆绑文件的符号链接。这允许你在编辑你的脚本文件的同时,将其作为一个Platypus应用程序进行测试。

优化应用程序。剥离并编译应用程序中的nib文件,以减少其大小。这使得nib不能被编辑。只有在安装了Xcode的情况下才能工作。

内置编辑器

Platypus包括一个非常基本的内置文本编辑器来编辑脚本。按编辑按钮就可以把它调出来。

[!](github.com/sveinbjornt…)

一个功能更强的外部编辑器可以在**首选项中设置。

语法检查

检查脚本语法菜单通过解释器的语法检查器来验证脚本的语法。

这个功能只适用于支持语法检查的解释器(bash, Perl, Python, Ruby, PHP 和 Swift)。

[!](github.com/sveinbjornt…)

显示 Shell 命令

Platypus包括一个与Platypus.app应用程序相对应的命令行工具,platypus,它可以通过偏好**安装到/usr/local/bin/。这个工具的手册页可以从帮助菜单中获得,也可以通过命令行获得。还有一个在线版本可用

一旦 Platypus 应用程序被安装,该命令行工具就不会以任何方式依赖于它。

[!](github.com/sveinbjornt…)

行动菜单中的显示 Shell 命令,显示使用图形界面中选择的所有选项执行 Platypus 命令行工具所需的命令。如果你安装了命令行工具,并想在更大的构建过程中自动创建脚本应用程序,这可能很有帮助。

偏好

鸭嘴兽的首选项应该是不言自明的。你可以选择一个编辑器,设置默认的作者和捆绑标识符设置,设置Platypus在应用程序创建时的行为,以及安装/卸载platypus命令行工具。

[!](github.com/sveinbjornt…)

##配置文件

保存和加载

配置文件允许你保存Platypus应用程序的配置设置。然后可以由Platypus或platypus命令行工具加载这些设置。Profiles菜单用于保存和访问配置文件。配置文件以文件形式存储,通常在Platypus应用支持文件夹的Profiles文件夹中(~/Library/Application Support/Platypus/Profiles)。

你可以通过从菜单中选择加载一个配置文件,它列出了配置文件文件夹中的所有配置文件。要在Finder中显示一个配置文件,按住Command键并选择该配置文件。配置文件有一个.platypus的文件名后缀。

[!](github.com/sveinbjornt…)

在命令行工具中使用配置文件

配置文件可以与platypus命令行工具一起使用。这允许你在图形用户界面中为你的应用程序设置所有的设置,将它们保存为一个配置文件,然后用命令行应用程序加载这些设置。这使得自动化更加方便。下面的命令将用命令行工具加载一个配置文件,并从中创建一个名为MyApp.app的应用程序。

/usr/local/bin/platypus -P myProfile.platypus MyApp.app

更多细节见命令行工具的手册页。该手册页面的HTML版本可在此获得

Platypus配置文件格式

Platypus Profiles是标准的macOS属性列表的XML格式。它们可以用纯文本编辑器或Xcode进行编辑。

从5.2版本开始,Platypus能够理解并解决Profiles中的相对路径。然而,无论是Platypus应用程序还是命令行工具都不能生成*相对路径,所以如果你想在Profile中使用它们,你将不得不手动编辑它。

用脚本输出控制GUI

显示一个警报

如果你的脚本使用下面的语法打印出一行,可以让Platypus应用程序包装器显示一个警报。

ALERT:Title|Text\n

因此, 要显示一个标题为 "Hello "和信息性文本 "World "的警报, 你应该这样做:

ALERT:Hello|World\n

显示通知

如果你的脚本使用以下语法打印出一行,就可以使Platypus应用程序包装器在用户通知中心显示通知。

NOTIFICATION:My title|My text/n

控制进度条

界面类型为**进度条的脚本应用程序可以通过通知进度条的进度来与进度条进行通信。所有格式为 "PROGRESS:\d+\n"(例如:PROGRESS:75)的脚本输出行都会被解析并用于设置进度条的完成百分比。同样,DETAILS:SHOW和DETAILS:HIDE可以用来改变脚本执行过程中Details文本字段的可见性。

终止应用程序

如果你的脚本将字符串 "QUITAPP\n "打印到STDOUT,应用程序就会退出。

清除输出

如果你的脚本向STDOUT打印字符串 "REFRESH\n",文本输出缓冲区将被清除。例如,这可以用来清除一个Web View,为新的HTML输出做准备。

将一个网站加载到一个Web View中

如果界面类型被设置为Web View,并且你的脚本打印出 "LOCATION:some.url.com\n",Web View将加载有关的URL。

用户与CocoaDialog的互动

Platypus应用程序可以使用CocoaDialog来构建脚本,用对话框来提示用户输入。截至发稿时,CocoaDialog项目似乎已经死亡,所以下面的说明可能已经过时。

  • 下载CocoaDialog
  • 将CocoaDialog.app添加到捆绑文件的列表中。

下面的脚本显示了如何使用捆绑的CocoaDialog副本查询输入。

#!/bin/bash

CD="CocoaDialog.app/Contents/MacOS/CocoaDialog"

rv=`$CD yesno-msgbox --string-output`。
$CD ok-msgbox --no-cancel --text "你按了$rv"

这个应用程序将向用户展示一个警报和几个按钮。当用户按下其中一个按钮时,会产生一个反馈对话框,通知用户他按了哪个按钮。虽然这个特殊的脚本没有完成任何任务,但它可以作为一个基本的例子来说明如何在脚本中添加交互式元素。

创建一个状态菜单应用程序

[!](github.com/sveinbjornt…)

Platypus生成的应用程序,其界面设置为状态菜单,启动时在菜单栏中显示一个状态项。当该项目被按下时,一个菜单被打开,脚本被执行,每一行输出被显示为菜单中的一个项目。

当用户选择一个菜单项时,脚本再次被执行,但这次它收到了菜单标题作为一个参数。根据它是否收到一个参数,脚本可以因此确定它被调用是为了列出菜单项,还是为了对所选的菜单项进行某种操作。

如果这一点看起来不清楚,可以看看下面的脚本,它是MacbethMenu实例的一部分。

#!/usr/bin/perl

# 如果参数为0,我们就显示菜单
if (!scalar(@ARGV)) {
    print "Life's but a walking shadow, a poor player\n";
    print "That struts and frets his hour on the stage/n";
    print "And then is heard no more.\n";
} else {
    # 我们获取菜单标题作为参数
    system("/usr/bin/say "$ARGV[0]")。
}

这个脚本创建了一个状态菜单应用,将莎士比亚的《麦克白》中的几句话作为菜单项显示。当选择时,有关菜单项的标题会通过/usr/bin/say送入macOS语音合成器。

为菜单项设置图标

MENUITEMICON|my_bundled_file.png|Bundled file example/n
MENUITEMICON|/path/to/icon.png|绝对路径 example/n
MENUITEMICON|https://sveinbjorn.org/images/andlat.png|Remote URL example/n

创建一个菜单分隔符

----\n

创建一个名为 "标题 "的子菜单,有三个菜单项目:

SUBMENU|Title|Item1|Item2|Item3\n

显示一个禁用的菜单项:

DISABLED|Name of item/n

动态地改变状态项的标题和图标

标题。

STATUSTITLE|Title\n

图标。

STATUSICON|捆绑的图像文件名或绝对路径或URL/n

通过osascript/AppleScript提示输入

脚本也可以通过/usr/bin/osascript程序运行AppleScript代码来提示输入。请看下面Perl中的一个例子。

#!/usr/bin/perl

use strict;

sub osascript($) { system 'osascript', map { ('-e', $_) } split(/\n/, $_[0]); }

sub dialog {
    my ($text, $default) = @_;
    osascript(qq{
    tell app "System Events"
    text returned of (display dialog "$text" default answer "$default" buttons {"OK"} default button 1 with title "Riddle")
    end tell
    });
}

my $result = dialog("Answer to life, the universe and everything?", "42");

Source.

例子

内置的例子

Platypus包括许多内置的例子。这些例子可以通过Profiles菜单的Examples子菜单打开。对每个例子的简要解释。

  • AdminPrivilegesDemo。通过在/etc/中创建一个文件并测试其是否存在,演示以root权限运行一个脚本。
  • AlertMe: 演示ALERT:和PROGRESS:的语法,在操作进度条的同时显示警报。
  • DataURLifier。将一个文件放在一个窗口上,以获得其数据URI
  • FastDMGMounter: 创建一个DiskImageMounter的替代品。使用hdiutil命令行工具快速挂载.dmg磁盘镜像,跳过验证并自动接受任何EULA。
  • IcnsToIconset: 将Apple .icns文件转换为.iconset文件夹,并为各种表现形式提供PNG。
  • ImageResizer: 展示了如何使用内置的macOS脚本图像处理系统(见man sips)来调整掉的图像的大小到512x512尺寸。
  • MacbethMenu: 简单的交互式状态菜单应用,显示莎士比亚的台词,并在选择时将其送入语音合成器。
  • PostToNotificationCenter。通过使用自定义NOTIFICATION: 语法的脚本输出,在macOS通知中心创建通知。
  • ProcessMenu。创建一个状态菜单,当点击时显示 ps cax 的输出。
  • ProgressBar: 演示了如何用脚本输出来控制进度条。
  • SayURLSchemeHandler。一个用于自定义URI方案say://的处理器。试着创建应用程序并在浏览器中打开一个URL,如say://hello-world
  • SpeakDroplet。使用macOS的语音合成器来读取所有打开的文本文件。
  • SpotlightInfo。在窗口上拖动一个文件以查看其Spotlight元数据。
  • StatusMenuDemo。显示如何在状态菜单界面中设置菜单项图标和创建子菜单。
  • SysLoadMenu。状态菜单应用程序,显示w的输出。
  • TarGzipper: 为任何丢弃的文件创建一个gzipped tar档案。
  • WordCountService: 动态服务应用程序,对收到的文本进行字数统计,并在警报中显示结果。

如果你想出了 Platypus 的一个特别有趣的用途,并认为它可能会成为这个列表中的一个合适的补充,请随时让我知道

更新

更新Platypus

Platypus使用Sparkle进行更新。你可以通过在应用程序菜单中选择**检查更新...**来更新到最新版本。未来的版本可能会或可能不会破坏你保存的配置文件。请查阅版本变更日志以了解详情。

AppCast的XML文件可在[这里](sveinbjorn.org/files/appca…

要获得 Platypus 的绝对最新开发版本,你可以在 GitHub 上查看源代码库。

常见的问题

我可以使用Platypus来创建专有软件吗?

可以。Platypus是根据三条款的BSD许可证的条款和条件发布的。

帮助,文本输出在脚本完成之前不会被显示出来!

你需要对输出缓冲区进行自动刷新。在Python中,你可以向解释器传递-u参数以获得无缓冲的输出,或者在代码中刷新输出缓冲区。

输入sys
sys.stdout.flush()

在Perl中,这可以通过在脚本开始时使用以下命令完成。

$| = 1;

对于其他脚本语言的帮助,[Stack Overflow](stackoverflow.com/)是你的朋友。

Platypus是否支持本地化?

不支持。但是如果你在创建应用程序时在保存对话框中取消勾选 "优化nib文件",那么应用程序捆绑包中产生的nib可以用Xcode进行编辑。因此,如果您想的话,您可以手动对您的应用程序进行本地化。对本地化的支持不在功能路线图上。

?

假设你使用的是bash,你可以将解释器设置为/bin/bash,并在 "Args "下添加l标志作为参数。这使得bash的行为就像它被作为一个登录的shell调用一样。详情见man bash

另一种方法是在你的脚本中手动加载用户的shell配置文件。

source ~/.bashrc

对于其他的shells, 请查阅它们各自的文档。

我怎样才能向我的脚本传递特定的参数?

你可以通过按下解释器控件旁边的参数按钮来编辑脚本解释器和脚本本身的参数。

我如何卸载 Platypus?

Platypus只使用了大约9MB的磁盘空间,但如果你想把它连同支持文件、配置文件等一起完全删除,你可以从Platypus应用程序菜单中选择卸载Platypus。这将卸载命令行工具(如果以前安装过),并将Platypus.app及其所有支持文件--包括保存的Profiles--移到垃圾箱。

我如何获得Platypus的源代码和Platypus生成的应用程序二进制文件?

可以在GitHub上找到Platypus的源代码库(github.com/sveinbjornt…

在Platypus生成的应用程序中使用的二进制文件的源代码是SEController.m

如果你做了任何改进或修复了任何错误,请告诉我,这样我就可以把它们纳入正式发布的版本中。

我怎样才能从脚本中获得我的应用程序和/或捆绑文件的路径?

由Platypus生成的应用程序执行的脚本从应用程序捆绑的资源目录中运行(例如:MyApp.app/Contents/Resources)。因此,任何捆绑的文件都可以从脚本的当前工作目录中访问。

例如,如果你添加了file.txt作为捆绑文件,想用shell脚本把它复制到用户的主目录,你可以运行以下命令。

cp file.txt ~/

要获得应用程序捆绑包本身或其包含目录的路径,你可以使用.../...(应用程序捆绑包)或.../...(应用程序捆绑包的包含目录)。

Platypus生成的应用程序如何工作?

Platypus生成的应用程序是macOS应用程序(.app)bundles,并具有以下目录结构。

MyApp.app/应用程序捆绑文件夹
MyApp.app/Contents
MyApp.app/Contents/Info.plist 应用程序的信息属性列表
MyApp.app/Contents/MacOS
MyApp.app/Contents/MacOS/MyApp 应用程序二进制文件
MyApp.app/Contents/Resources 资源文件夹
MyApp.app/Contents/Resources/AppIcon.icns 应用程序图标
MyApp.app/Contents/Resources/AppSettings.plist 应用程序设置
MyApp.app/Contents/Resources/MainMenu.nib Nib文件,存储界面布局。
MyApp.app/Contents/Resources/script 应用程序二进制执行的脚本

应用程序二进制文件从AppSettings.plist读取设置,然后运行脚本,利用nib文件中的用户界面资产来显示脚本的输出。

二进制文件的源代码在这里。浏览一下它应该能让你对这个可执行文件的作用有一个相当透彻的了解。这是比较直接的。

我可以改变我的应用程序窗口的尺寸吗?

是的,但只能在应用程序创建后手动改变它。当你按下 "创建 "键时,你需要在对话框中取消勾选 "优化应用程序(剥离nib文件)"选项。然后你可以用Xcode编辑nib文件中的用户界面资产。nib文件被存储在你的应用程序包中的以下路径。

目录/资源/主菜单.nib

如果你想保留你自己修改过的nib以便重复使用,你可以简单的保存一个副本,编辑它并在你创建应用程序时将其添加到**捆绑文件中。然后它将覆盖默认的MainMenu.nib文件。

Platypus 命令行工具也允许你使用 -H 标志指定一个备用的 nib 文件。详见man page

我可以在我的Platypus包装的脚本中通过stdin提示用户输入吗?

Platypus应用程序不会向用户提供一个交互式的外壳,因此不能使用标准输入进行双向通信。Platypus 应用程序只能捕获并显示你的脚本的文本输出。它们不能通过stdin提示输入,而且在可预见的将来也不能这样做。这意味着任何需要通过stdin输入的命令,如sudo,或Python的input(),都不能在Platypus应用程序中使用。

有什么方法可以签署Platypus生成的应用程序,使它们不需要GateKeeper的批准?

Platypus生成的应用程序默认是没有签名的。由于GateKeeper的存在,这意味着它们不会在没有提示用户批准的情况下在MacOS上运行。

Platypus应用程序,像任何其他应用程序一样,可以使用以下命令签名。

/usr/bin/codesign -s "your-signing-identity" path/to/MyApp.app

详情请参见苹果公司的[代码签名指南](developer.apple.com/library/arc…

我可以通过命令行向Platypus生成的应用程序传递参数吗?

是的,你可以通过命令行执行一个Platypus生成的二进制文件。你提供的任何参数都将被传递给你的脚本。以下面的例子为例。

# ./MyApp.app/Contents/MacOS/MyApp -arg1 -arg2

在这种情况下,-arg1-arg2都将作为参数传递给你的脚本。这个功能使得为Firefox和其他从shell调用macOS应用程序二进制文件的程序创建协议处理程序成为可能。

该命令行工具安装在哪里?

Platypus命令行工具的安装脚本会在你的系统中创建以下文件。

/usr/local/bin/platypus程序二进制文件
/usr/local/share/platypus/ScriptExec 可执行二进制文件
/usr/local/share/platypus/MainMenu.nib 应用程序的Nib文件
/usr/local/share/platypus/PlatypusDefault.icns 默认图标
/usr/local/share/man/man1/platypus.1 手册页

这些文件都被Platypus应用程序菜单中的Uninstall Platypus所删除。

我可以自定义Platypus生成的应用程序的 "关于 "窗口吗?

如果你把一个名为Credits.rtfCredits.html的文件添加到捆绑的文件列表中,它将出现在你的应用程序的 "关于 "窗口中。