在 Linux 上运行的 Platypus 的替代品(它构建了一个在用户双击时运行脚本的 mac .app)?

Posted

技术标签:

【中文标题】在 Linux 上运行的 Platypus 的替代品(它构建了一个在用户双击时运行脚本的 mac .app)?【英文标题】:Alternatives to Platypus (which builds a mac .app that runs a script when user double clicks it), which run on Linux? 【发布时间】:2018-04-05 20:58:42 【问题描述】:

我已经有可以在 mac 上运行的软件,它可以由主“运行器”脚本驱动。但是,我希望将软件打包为 .app。在 Mac 上,我可以运行 'platypus' (https://www.sveinbjorn.org/platypus),它会创建一个非常好的 .app 文件,该文件调用该运行程序脚本作为入口点(正是我想要做的)。使用起来非常简单。

问题是,鸭嘴兽本身只能在 mac 上运行,我需要在 Linux 机器上将它们捆绑在一起(创建 .app)。

是否有替代 Platypus 的替代方案,它可以实现相同的结果(生成一个 .app,以脚本作为入口点),但可以在 Linux 上构建? 或者,有谁知道最新教程,解释如何手动完成此操作(但在 Linux 上)?

(我看过这个:How to build a dmg Mac OS X file (on a non-Mac platform)?,但它是用于 dmg 文件的,而我需要一个 .app 文件。另外,我对像鸭嘴兽这样简单的程序特别好奇。)

【问题讨论】:

【参考方案1】:

一个mac .app“文件”实际上只是一个文件夹(您可以通过右键单击“显示包内容”来浏览内容。 您需要更改的主要部分是 .sh 脚本本身,它可以在应用程序包中找到:yourapp.app/Contents/MacOS/yourscript.sh

因此,您可以复制现有的 yourapp.app 并将其用作模板,只需在 Linux 中编辑脚本内容和应用程序(文件夹)名称即可。 复制回来时可能需要设置权限(chmod +x 等)。我不确定是否没有测试过这种方法,但我不明白为什么它不起作用。

【讨论】:

实际上,我上周采用了这种方法,并且完全有效! (在 yourapp.app/Contents/MacOS/youapp 创建一个 shell 脚本,我 chmod 到 777。注意 MacOS 文件夹中的可执行文件的名称,必须与应用程序的名称完全相同)【参考方案2】:

在 BSUK 答案之上添加一些参考代码 (bash):

mkdir -p foo.app/Contents/MacOS
cp foo.sh foo.app/Contents/MacOS/foo
chmod +x foo.app/Contents/MacOS/foo

也可以为应用设置一个漂亮的图标,参考代码如下: (请提前准备一个logo.png文件,及其对应的icon.icns版本):

mkdir -p foo.app/Contents/Resources
cp icon.icns foo.app/Contents/Resources/
cp logo.png ./
sips -i logo.png
DeRez -only icns logo.png > tmpicns.rsrc
Rez -append tmpicns.rsrc -o file.ext
SetFile -a C file.ext
cp -f file.ext foo.app/Icon$'\r'
rm tmpicns.rsrc logo.png file.ext
SetFile -a C foo.app

然后,您可以在桌面上分配该 foo.app(例如):

mv foo.app "/Users/$(whoami)/Desktop/"

【讨论】:

以上是关于在 Linux 上运行的 Platypus 的替代品(它构建了一个在用户双击时运行脚本的 mac .app)?的主要内容,如果未能解决你的问题,请参考以下文章

Windows 上的 fcntl 替代品

在使用替代方案的 Linux 系统上,JAVA_HOME 的正确路径是啥?

linux上动态链接期间符号的替代实现

在 linux 上查找泄漏的替代 valgrind (memcheck)? [关闭]

Linux 上 DTrace 的替代方案是啥? [关闭]

在使用 Python 3 的 Mac 上没有名为“_tkinter”的模块