Mac OS:如何在另一个Cocoa应用程序中运行Cocoa应用程序?

时间:2017-07-11 05:38:16

标签: objective-c swift macos cocoa objective-c-runtime

我已经编写了一个Objective C运行时调试工具(在Swift中)来帮助我开发另一个应用程序。目前,这个工具是一个独立的Cocoa应用程序,可以通过它自己的Objective C运行时实例正常启动,因此它没什么用处。

我想修改它,以便可以从目标应用程序中的方法调用打开它,以便使用目标应用程序的运行时。此要求排除了使用我发现的依赖NSTask开始全新流程的解决方案。

我怎样才能做到这一点?

编辑:

我的调试工具是一个GUI应用程序。通常情况下,它会通过NSAppliationMain函数调用main来启动。这将从主捆绑包的info.plist文件中设置应用程序实例。显然,当尝试从另一个应用程序的代码中调用NSApplicationMain时,这不会起作用,因为主包的info.plist是目标应用程序的{{1}},而不是调试的应用程序

所以解释一下:如何从主nib文件手动启动我的应用程序,从目标应用程序中打开它的窗口,菜单栏等?

1 个答案:

答案 0 :(得分:1)

最后一次猜测(在评论之后)和粗略轮廓:

第1步:从自己的NIB加载Windows

Windows不需要在主NIB启动时加载,有些方法可以根据需要以编程方式加载它们。例如。查看NSWindowController(加载单个窗口)和NSBundle(加载完整的NIB)。

步骤1B:动态添加菜单/菜单项

如果您希望为代码提供菜单项,则可以通过编程方式添加这些项,而不是在主NIB中预先定义它们。您也可以像使用Windows一样从NIB加载整个菜单。

第2步:编写API以启动&控制你的调试器

这是客户端将调用的API。修改调试器应用程序的启动以调用此API进行测试。

第3步:将项目转换为框架。

框架将包含代码和NIB。

步骤4:在另一个应用中使用框架,调用API。

HTH