【发布时间】:2016-04-25 16:18:33
【问题描述】:
想象一下,如果你愿意,一个 Mac OS X .app 包包含两个程序:一个带有一个返回 NSApplicationMain() 的 Cocoa main(),另一个包含一个带有自己的 main() 的 Carbon 可执行文件。
Cocoa 应用程序用于注册/激活。我们不想将它们分成两个应用程序。我想从 Cocoa main() 内部开始在 Carbon main() 上执行。假设所有代码都已正确签名,是否允许在同一个应用程序包中包含多个带有“main()”的捆绑包,以及如何从 Cocoa 代码中启动 Carbon main()?
【问题讨论】:
-
您不能使用
openURL:或launchAppWithBundleIdentifier或类似的方式启动第二个捆绑包吗?为什么需要从应用内部运行它? -
@jtbandes -- 相信我,细节很长而且很复杂,但是 Cocoa 代码必须在 Carbon 代码之前运行。只有 Cocoa 代码设置了 Carbon 应用程序所需的内容,Carbon 应用程序才能正常运行。 Cocoa 代码需要调用 Carbon 代码的启动。 launchAppWithBundleIdentifier() 不会在 myApp.app/Contents/info.plist 中查找带有 Bundle Identifier 的应用程序包吗?
-
好吧,听起来您的 Carbon 应用程序有一个单独的包,所以它可以(应该?)有不同的包 ID。
-
我从未尝试过这个,但我想
dyld可能是加载和执行另一个包的代码的一种方式,如果你必须这样做的话。 -
许多应用程序包含它们启动的帮助应用程序。 iTunes 就是一个明显的例子。看看里面;您会找到 iTunesHelper 应用程序。所以我想知道你认为问题是什么。您尝试了吗?当你这样做时,发生了什么?
标签: xcode macos cocoa bundle macos-carbon