如何从系统获取日志();?

有没有办法从系统()获取日志? 所以当我做system("open com.apple.nike"); 我应该得到Couldn't open application: com.apple.nike. Reason: 8, application disabled or restricted 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 )的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上的一个私有API,但与OS X上存在的许多API一样,它们实际上在iOS上可用(不要以为苹果允许他们在App Store中使用它们)。

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

这是一个旧版本 ,但我敢打赌,它可能仍然有效。