【问题标题】:How to change the executable in an OS X Application Bundle如何更改 OS X 应用程序包中的可执行文件
【发布时间】:2009-04-08 16:19:44
【问题描述】:

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

但是,在 OS X 中,我不能很好地做到这一点,因为我最终会在 Dock 上看到两个图标。一个用于我的脚本变成了一个应用程序,另一个用于 Firefox 应用程序。我宁愿只有一个停靠图标并且不破坏 Firefox 更新。

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

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

谁能提供其他建议?

【问题讨论】:

  • 我想出了如何在 Info.plist 文件中编辑“CFBundleExecutable”属性。似乎 OS X 将应用程序信息缓存在 ~/Library/Caches/Firefox 中。通过删除这些缓存,我能够让它识别我的更改。我将 shell 脚本更改为始终使用“Terminal.app”打开,并在 Firefox.app/Content/MacOS/ 文件夹内创建了一个没有文件扩展名的符号链接。然后将可执行文件设置为符号链接的名称后,一切正常。不确定 Firefox 更新是否会起作用,但这很容易重新/撤消。
  • 嗨抢劫。我创建了一个应用程序包,可以在另一个配置文件中启动 Firefox。我给了我的捆绑包一个自定义图标。我使用-no-remote 一次运行多个配置文件。所以看到一个默认的firefox徽标和我的自定义配置文件的一个是正常的。但是有时自定义配置文件图标会成为默认图标。你有空聊天吗?我可以给你看我的情况的截屏视频。
  • 嗨 @Rob 你用来启动 Firefox 的命令是什么?
  • 对不起@Noitidart 我不再这样做了,所以我不知道以前是如何工作的。
  • 非常感谢@Rob 的回复我想通了:)

标签: firefox macos


【解决方案1】:

创建一个常规应用程序包,但在其上设置LSUIElement,因此脚本应用程序的图标从停靠栏中隐藏,并将 Firefox 包含在包中。

一个简单的方法是使用Platypus。配置鸭嘴兽如下:

  • 单击“参数”。检查“设置 $1 到应用程序路径”复选框, 所以你的脚本可以引用文件 在捆绑包内。

  • 选中“在后台运行”——这设置 LSUIElement 给你。

  • 在“文件和文件夹”列表中 与应用程序捆绑到 Resources 文件夹”,放下 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。 (aemreceive 是一个方便的用于 Apple 事件接收的 Python 包装器。)

【讨论】:

  • 正是我想要的,我只需要了解如何从 Dock 中隐藏图标。丹克!
  • 此解决方案的一个问题是您无法再看到 Firefox 菜单栏。我在上面找到了一个更好的。
  • 我有类似的情况@Nicholas,但我的问题是,当我点击我的应用程序包时,它会使用命令行参数-no-remote -P "my second profile" 启动 firefox。所以这很好,但如果我这样做 killall Dock; killall Finder 它会将我的一个图标分成两个。如果需要,我会制作一个视频演示,但你知道如何让 Firefox 相信我的应用程序包图标是它的图标。我认为这与您在此处分享的内容相似。
  • 嗨 @Rob 和 Nicholas,我制作的这个 youtube 视频截屏显示,如果我输入终端 killall Finder; killall Dock,它会将我的 appbundle 图标与 Dock 中的 firefox 图标分离,从图标更改中可以清楚地看到,因为我的 appbundle 有一个不同的图标。 Youtube :: Demo of Problem where AppBundle of Firefox Seperates from Firefox。现在我知道你们都在说不要在终端中输入,但我必须测试所有情况,因为我的 Firefox 插件是一个多配置文件快捷方式创建者。请告知我如何保持关联。
  • @Rob 和 Nicholad 一个真正的情况是,当用户使用其中一种重启方法重启 firefox 时,此图标会分裂。 (例如,开发人员通常使用 Shift + F2 重新启动,并在 ff 命令行中键入“restart”,不加引号)
【解决方案2】:

使用Automator 工作流程(如果适用于您的 Mac OS 版本)。

【讨论】:

  • 当您启动一个应用程序时,它总是会在 Dock 上创建一个图标。我宁愿只有一个,以免混淆。我提到我已经有我的脚本的应用程序版本,我不喜欢这种方法。
  • @Rob:感谢您的澄清。我很困惑(我没有看到你在 runtime 没有两个图标)。
  • @dirkgently:np,我认为您的解决方案是我唯一可以采用的解决方案。但我仍然希望一些大师会为我提供一些知识。
猜你喜欢
  • 2014-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-22
相关资源
最近更新 更多