我一直在尝试按照说明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没有完全加载)。
答案 0 :(得分:3)
经过一番摆弄后,我找到了问题的解决方案。通过TransformProcessType
转换流程类型,然后使用准确命名的[NSApp activateIgnoringOtherApps:YES]
就可以解决问题:
ProcessSerialNumber psn = { 0, kCurrentProcess };
OSStatus returnCode = TransformProcessType(& psn, kProcessTransformToForegroundApplication);
[NSApp activateIgnoringOtherApps:YES];
(我还添加了一个自定义菜单来完成它)。感谢Mankarse的指点!
答案 1 :(得分:1)
你需要一个NSApplication ..为什么你甚至这样做?
如果您创建一个新的GUI应用程序,请查看main.m,您会看到它在那里生成NSApplication。
int main(int argc, char *argv[])
{
return NSApplicationMain(argc, (const char **)argv);
}
这要求你拥有一个btw软件包,如果你想在没有终端的情况下启动一个命令行工具,你可以使用launchd或者创建一个只需在finder中双击的软件包。