如何从系统获取日志();?
有没有办法从系统()获取日志? 所以当我做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头文件,并将其包含在您的项目中。
这是一个旧版本 ,但我敢打赌,它可能仍然有效。