有没有办法从system()获取日志;就像当我做system("open com.apple.nike");一样,我应该得到Couldn't open application: com.apple.nike. Reason: 8, application disabled or restricted。这将在我的iOs 7设备上运行

谢谢

编辑://://
这是新代码,但无法正常工作,我会得到

    *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'launch path not accessible'
    *** First throw call stack:

NSString *bundleID = @"com.apple.nike";
    NSTask *task = [[NSTask alloc] init];
                    [task setLaunchPath: @"sudo"];
                    [task setArguments: [[NSArray alloc] initWithObjects:[NSString stringWithFormat:@"open %@", bundleID], nil]];

                    NSPipe *pipe= [NSPipe pipe];
                    [task setStandardOutput: pipe];

                    NSFileHandle *file = [pipe fileHandleForReading];

                    [task launch];

                    NSData *data = [file readDataToEndOfFile];

                    NSString *output = [[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding];
                    NSLog(@"result: %@", output);

最佳答案

我知道这并不是您所要的,但也许有更好的方法。

如果您想运行命令(例如open com.apple.nike),我认为使用NSTask实际上是以编程方式执行此操作的最佳方法。 NSTask将允许您像system()一样运行命令,但是对处理这些命令的标准输出提供了很好的支持,而无需在系统日志文件上执行文件I / O。

例如,这是一个使用NSTask列出目录内容(ls -altr),并在NSString中捕获输出的示例:

- (void) listDir {
   NSTask *task = [[NSTask alloc] init];
   [task setLaunchPath: @"/bin/ls"];
   [task setArguments: [[NSArray alloc] initWithObjects: @"-altr", nil]];

   NSPipe *pipe= [NSPipe pipe];
   [task setStandardOutput: pipe];

   NSFileHandle *file = [pipe fileHandleForReading];

   [task launch];

   NSData *data = [file readDataToEndOfFile];

   NSString *output = [[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding];
   NSLog(@"result: %@", output);
}

这将使您打开命令的输出与系统日志文件中的任何其他内容分开。
NSTask是iOS上的 private API,但是与OS X上存在的许多API一样,它们实际上可以在iOS上使用(只是不要假设Apple允许它们在App Store中使用!)。

要使用它,您需要下载NSTask.h标头,并将其包含在您的项目中。

Here's an old version,但我敢打赌它仍然可能有效。

关于ios - 如何从system();获取日志?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21862935/

10-11 14:34