【发布时间】:2021-02-23 12:26:12
【问题描述】:
我想创建一个可可应用程序来调用使用 c++ 编写的命令行工具。 使用 Xcode 调用命令行工具时我可以做得很好。 但是当我关闭 Xcode 时它失败了,双击应用程序并按更新按钮 运行命令行工具。 我已经厌倦了使用 NSTask 调用命令行工具,但它仍然失败。 这是我的代码。
- (IBAction)Update:(id)sender {
[self performSelectorOnMainThread:@selector(IspUpdate) withObject:nil waitUntilDone:YES];
}
-(void)IspUpdate {
strCurDir = [[NSBundle mainBundle] bundlePath];
NSRange range = [strCurDir rangeOfString:@"/" options:NSBackwardsSearch];
NSRange rangeDir = NSMakeRange(0, range.location + 1);
strCurDir = [strCurDir substringWithRange:rangeDir];
NSString *strCmd = [strCurDir stringByAppendingString:@"ISPTool --isp --fw fw.bin --comm 6"];
dispatch_async(dispatch_get_global_queue(QOS_CLASS_UTILITY, 0), ^{
system([strCmd UTF8String]);
});
}
【问题讨论】:
-
显示您尝试过的使用
Process(NSTask) 类的代码。Process类是您从 Cocoa 应用程序运行命令行程序的方式。使用此代码更新您的问题以及尝试调用命令行程序时出现的错误。 -
1.通过在 appBundle/Contents/MacOS 中打开可执行文件来启动您的应用程序,其中 launchPath 为 /usr/bin/open,后跟可执行文件路径的 args。 2. 然后使用更新按钮,这次使用 /bin/sh 的启动路径运行另一个 NSTask,将命令添加到第一个终端窗口。
标签: xcode macos cocoa macos-catalina xcode-command-line-tools