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