如何从我的Cocoa应用程序在终端中运行命令?

时间:2014-11-05 01:02:49

标签: objective-c xcode cocoa instruments nstask

我想使用instrument通过我的cocoa app在我的iOS模拟器上安装.app。

这是我第一次开发可可应用程序和NSTask。 NSTask需要一个启动路径,在我的情况下是无关紧要的,因为这个命令可以从任何地方运行。 这是我想要运行的命令:

instruments -t /Applications/Xcode.app/Contents/Applications/Instruments.app/Contents/PlugIns/AutomationInstrument.xrplugin/Contents/Resources/Automation.tracetemplate -w" iPad Retina(7.1模拟器)&# 34; ""

目前我有这个:

NSTask *task = [[NSTask alloc] init];
    [task setLaunchPath:@"/"];

    NSString * commandTorun = @"instruments -t /Applications/Xcode.app/Contents/Applications/Instruments.app/Contents/PlugIns/AutomationInstrument.xrplugin/Contents/Resources/Automation.tracetemplate  -w \"iPad Retina (7.1 Simulator)\" \"<path to .app>" ";

    NSArray *arguments = [NSArray arrayWithObjects:
                          @"-t" ,
                          [NSString stringWithFormat:@"%@", commandTorun],
                          nil];

    NSLog(@"Run command:%@",commandTorun);
[task setArguments:arguments];
[task launch];

任何帮助将不胜感激。

谢谢,

3 个答案:

答案 0 :(得分:1)

我们走了。

工作解决方案。 XCode 7.3 iPhone 6(9.3)

C++

注意:放置正确的xcode应用程序名称(/ Applications / xcode 7.3)和模拟器或设备udid(如果是物理设备)。

答案 1 :(得分:0)

启动路径是命令的路径,您似乎将命令名放在&#39; -t&#39;之后。在你的论点中。尝试这样的事情:

NSTask *task = [[NSTask alloc] init];
[task setLaunchPath: @"/Applications/Xcode.app/Contents/Applications/Instruments.app/Contents/MacOS/Instruments"];
NSArray *arguments = [NSArray arrayWithObjects:
                @"-t",
                @"/Applications/Xcode.app/Contents/Applications/Instruments.app/Contents/PlugIns/AutomationInstrument.xrplugin/Contents/Resources/Automation.tracetemplate"
                @"-w",
                @"iPad Retina (7.1 Simulator)",
                nil];
[task setArguments:arguments];
[task launch];

我认为NSTask在论据中引用了引用,但我不确定,所以你可能需要在&#34; iPad ...&#34;周围放置转义报价。论点。

答案 2 :(得分:0)

stdlib的系统功能可以满足您的需求。

只需将整个命令作为参数调用:

system("instruments -t /Applications/Xcode.app/Contents/Applications/Instruments.app/Contents/PlugIns/AutomationInstrument.xrplugin/Contents/Resources/Automation.tracetemplate  -w \"iPad Retina (7.1 Simulator)\" \"<path to .app>" ")