我一直在尝试按照说明 here 在不使用 NIB 或 XIB 的情况下创建 Cocoa(桌面)应用程序。一切都很好,从 Terminal.app 我可以成功运行该应用程序。然而,它的生成没有任何常见的装饰,例如菜单栏或停靠图标,位于终端窗口后面,并且看起来与终端进程有很大的联系。
我怀疑这可能是直接从命令行运行二进制文件本身的结果,但玩了一下我发现至少 Calculator.app
非常乐意生成一个“使用以下方式调用时的真实“应用程序:
$ /Applications/Calculator.app/Contents/MacOS/Calculator
我在这里缺少什么(如果有的话)?我还尝试通过加载 XIB 文件
NSNib *mainNib = [[NSNib alloc] initWithContentsOfURL:[[NSURL URLWithString:@"../MainMenu.xib"] absoluteURL]];
[NSNib instantiateNibWithOwner:application topLevelObjects:nil];
这似乎找到了 XIB,但没有什么区别(即 GUI 未完全加载)。
最佳答案
经过一番摆弄,我找到了解决问题的方法。通过 TransformProcessType
转换进程类型,然后使用准确命名的 [NSApp activateIgnoringOtherApps:YES]
就成功了:
ProcessSerialNumber psn = { 0, kCurrentProcess };
OSStatus returnCode = TransformProcessType(& psn, kProcessTransformToForegroundApplication);
[NSApp activateIgnoringOtherApps:YES];
(我还添加了一个自定义菜单来完成它)。感谢 Mankarse 的指点!
关于来自命令行的 Cocoa 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8137538/