我正在尝试运行机场命令来扫描我的无线网络。现在,方法是使用NSTask。我按照以下方式运行它:
NSString *command = [NSString stringWithFormat:@"/System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport -s"];
NSTask *task = [[NSTask alloc] init];
[task setLaunchPath:@"/bin/sh"];
NSArray *args = [NSArray arrayWithObjects:@"-c", command, nil];
[task setArguments: args];
NSPipe *pipe = [NSPipe pipe];
[task setStandardOutput: pipe];
[task launch];
[task waitUntilExit];
NSData *data = [[pipe fileHandleForReading] readDataToEndOfFile];
NSString *string = [[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding];
NSLog(@"RESULT: %@", string);
问题是它的输出为“RESULT:”(空输出)。此外,当我使用“-I”选项运行相同的命令时,它会正确列出我当前的网络状态。所以,我想我错误地认为如何使用-s选项正确读取airport命令的输出。有人可以暗示如何正确阅读吗?
答案 0 :(得分:0)
确定。通过深入调查此处的问题,我在控制台日志中发现了这一点:
PMsandboxd: ([57108]) <MyApp>(57108) deny mach-lookup com.apple.airport
PMsandboxd: ([57108]) <MyApp>(57108) deny system-socket
PMsandboxd: ([57120]) sh(57120) deny file-read-data /dev/ttys003
PMairportd: Error: Scan failed (1)
PMsandboxd: ([57120]) airport(57120) deny system-socket
嗯......看起来这是一个许可问题。我还在这里调查。
编辑#1:好的。如果您的应用程序是沙盒用于Apple Store,沙箱会拒绝NSTask使用机场扫描!