Firefox 如何更改OSX应用程序包中的可执行文件

Firefox 如何更改OSX应用程序包中的可执行文件,firefox,macos,Firefox,Macos,我想在Firefox启动之前&退出之后运行一个脚本。在Ubuntu中,我创建了一个新的快捷方式,首先调用我的函数,然后调用firefox命令,然后调用我的最后一个函数。由于firefox命令会一直阻塞到应用程序退出,因此在进程结束后会立即调用我的最后一个函数 然而,在OSX中,我不能很好地做到这一点,因为我最终在dock上有两个图标。一个用于我的脚本,另一个用于Firefox应用程序。我更喜欢只使用一个dock图标&不破坏Firefox更新 我目前的解决方案是将MacOS/firefox{,-b

我想在Firefox启动之前&退出之后运行一个脚本。在Ubuntu中,我创建了一个新的快捷方式,首先调用我的函数,然后调用firefox命令,然后调用我的最后一个函数。由于firefox命令会一直阻塞到应用程序退出,因此在进程结束后会立即调用我的最后一个函数

然而,在OSX中,我不能很好地做到这一点,因为我最终在dock上有两个图标。一个用于我的脚本,另一个用于Firefox应用程序。我更喜欢只使用一个dock图标&不破坏Firefox更新

我目前的解决方案是将MacOS/firefox{,-bin}重命名为前缀为“real-”,然后将我的shell脚本命名为“firefox-bin”。这是可行的,但我很确定,下次firefox尝试自我更新时,我会很失望

我已尝试将捆绑包的Info.plist文件中的“CbundleExecutable”属性更改为我的脚本,但这不起作用


有人能提供任何其他建议吗?

如果在您的Mac OS版本上可用,请使用工作流。

创建一个常规应用程序捆绑包,但在其上设置
LSUIElement
,以便脚本应用程序的图标在dock中隐藏,并在捆绑包中包含Firefox

一种简单的方法是使用。按如下方式配置Platypus:

  • 单击“参数”。选中“设置” $1到应用程序路径”复选框, 所以脚本可以引用文件 在包裹里

  • 选中“在后台运行”-此设置
    LSUIElement
    为您准备

  • 在“要删除的文件和文件夹”列表中 与应用程序捆绑到 资源文件夹”,放下Firefox

  • 将输出更改为“无”,以便您的日志 消息将转到系统控制台

  • 将Firefox的图标文件(Firefox.icns)放到“自定义图标”上

  • 将“应用程序名称”更改为Firefox

对于类似以下内容的脚本:

#!/bin/sh
echo before >&2
$1/Contents/Resources/Firefox.app/Contents/MacOS/firefox-bin
echo after >&2
您可以得到如下输出:

4/8/09 1:16:33 PM [0x0-0x801801].net.sabi.PlatypusScript[76610] before 
4/8/09 1:16:35 PM firefox-bin[76613] Database load time: 0.373 (717 objects) 
4/8/09 1:16:35 PM [0x0-0x801801].net.sabi.PlatypusScript[76610]
2009-04-08 13:16:35.699 firefox-bin[76613:10b] Database load time: 0.373 (717 objects) 
4/8/09 1:16:57 PM [0x0-0x801801].net.sabi.PlatypusScript[76610] after 

如果您的用户以其他方式启动Firefox,例如使用URL处理程序和打开HTML文件,那么您将需要使用本机应用程序,该应用程序可以将适当的Apple事件传递给Firefox,并将适当的URL和文件处理程序信息添加到Info.plist中。(这是一个方便的用于Apple事件接收的Python包装程序。)

启动应用程序时,它总是在dock上创建一个图标。为了避免混淆,我希望只有一个图标。我提到我已经有一个应用程序版本的脚本,我不喜欢这种方法。@Rob:谢谢你的澄清。我很困惑(我没有看到你在运行时没有两个图标)@dirkgenty:np,我想你的解决方案是我唯一可以使用的。但我仍然希望一些大师能为我带来一些知识。我想知道的正是我想要的,我只需要知道如何在dock上隐藏图标。Danke!这个解决方案的一个问题是你看不到Firefox菜单b我在上面找到了一个更好的。我有一个类似的情况@Nicholas,但我的问题是,当我点击我的应用程序包时,它会启动firefox,命令行参数
-no remote-P“我的第二个配置文件“
。所以这很好,但是如果我做了,
killall-Dock;killall Finder
它将我的一个图标一分为二。如果需要,我会制作一个视频演示,但是你知道如何让firefox相信我的应用包图标就是它的图标吗。我想这和你在这里分享的内容很相似。嗨@Rob和Nicholas,我制作的youtube视频显示,如果我输入terminal
killall Finder;killall Dock
它将我的appbundle图标与Dock中的firefox图标分离,从图标更改中可以清楚地看到,因为我的appbundle有一个不同的图标。现在我知道你们都在说不要在终端中输入,但我必须测试所有的情况,因为我的firefox插件是一个多配置文件快捷方式创建者。请告知我如何保持关联。@Rob和Nicholad当用户使用其中一种重新启动方法重新启动firefox时,此图标会分裂。(例如,开发人员通常使用Shift+F2重新启动,在ff命令行中键入“restart”不加引号)我知道了如何编辑Info.plist文件中的“CFBundleExecutable”属性。似乎OSX将应用程序信息缓存在~/Library/caches/Firefox中。通过删除这些缓存,我可以让它识别我的更改。我将shell脚本更改为始终使用“Terminal.app”打开,并在Firefox.app/Content/MacOS/文件夹中创建了一个符号链接,但没有扩展名。然后,在将可执行文件设置为符号链接的名称之后,它就可以正常工作了。不确定Firefox更新是否能正常运行,但这很容易重新/撤消。嗨,rob。我创建了一个应用程序包,在她的个人资料中启动firefox。我给了我的包一个自定义图标。我使用
-无远程
一次运行多个配置文件。因此,看到一个firefox徽标表示默认设置,一个表示我的自定义配置文件是很正常的。但是,有时自定义配置文件图标会成为默认图标。有空和你聊聊吗?我可以向你展示我的情况。嗨@Rob,你启动Firefox的命令是什么?对不起@Noitidart,我不再这样做了,所以我不知道这是怎么回事。非常感谢@Rob的回复,我明白了:)