>我有一个使用助手显示帮助的Qt应用程序。
在Mac上,我正在将他的助手打包在捆绑包中。我可以包含其所有库的唯一方法是将助手可执行文件放在与应用程序可执行文件相同的MacOS文件夹中,并正确链接所有库依赖项。
有没有办法将有关两个可执行文件的信息放在信息列表中?
不,您不能将有关多个可执行文件的信息放在同一个 Info.plist 中。(好吧,您总是将自定义键放入Info.plist中,并在那里存储您喜欢的任何属性列表数据,但系统不会关注这些键。
为什么不将助手捆绑到它自己的捆绑包中,然后将该捆绑包放在主应用程序的捆绑包中呢?Assistant捆绑包将有自己的Info.plist文件。此外,如果您创建了一个关于任何链接或动态加载问题的问题,您认为您必须将其全部放入主捆绑包中,您可能会发现有更好的解决方案。
将助理可执行文件放在同一个 MacOS 文件夹中
我建议不要这样做。助手是主应用程序的资源,因此它应驻留在资源文件夹中。如果要从主应用启动助理应用,可以按名称找到它。
您只能在 Info.plist 中定义一个应用程序。如果要添加更多,则键中会出现冲突。
例如,CFBundleIdentifier 是命名捆绑包的唯一 URI(例如.com.apple.calculator)。例如,当应用程序复制到/Applications 文件夹时,OS 使用 URI 向操作系统注册应用程序。OS 期望密钥是根字典的子项,并且其值必须是唯一的。如果有多个名为CFBundleIdentifier的密钥,它将不知道哪个是有效的。
尽管您可以将几乎任何垃圾扔进Mac应用程序包中,但不会给您带来很多好处。
如果我理解正确,您既有一个Mac应用程序(通常捆绑),又有一个侧面应用程序,您称之为"助手",您希望嵌入在同一应用程序包中。
您还提到了必须与助手位于同一目录中的库(我猜是.dylib的)。
现在 - 如果这些库仅由 Assistant 端应用程序使用,我建议您将 Assistant 捆绑为代码包(Apple 提供了大量有关这些的信息,并且您有来自 Xcode 的易于使用的模板)。然后,您可以使用 Xcode 将其复制到主应用程序捆绑包中的正确位置(我会选择"插件"),并使用 NSBundle API 启动它。
但是,如果这些.dylibs在主应用程序和助手之间共享 - 那么我会说继续,将您的助手,.dylibs和主应用程序的二进制文件放在同一个"MacOS-X"目录中,并使用posix API或shell命令启动助手。当然,它将共享(如果可能的话)主应用程序的每个资源,因为它们位于同一位置。但是,主应用程序的捆绑包只能有一个 CFBundleExecutable 条目,并且应该指向主应用程序的二进制文件。