我正在研究Apple提供的无线网络组织和诊断工具的替代方案。到目前为止它进展顺利。我能够提取和存储当前网络,一些网络详细信息,密码和位置数据,并将其存储在加密领域。
我遇到问题的区域是能够访问当前在计算机范围内的网络列表。我知道这可以通过使用" airport -s"来自终端的命令。我最初的计划是从NSTask调用此命令并解析并存储结果。然而,经过几个小时的修补和谷歌搜索后,我终于出现了Objective-C: NSCommand "airport -s" returning empty,这似乎反映了我所看到的。
我通过编写一个快速bash脚本来存储我的bundle资源并从NSTask调用并返回输出,甚至调用一个脚本来编写来自"机场-s"到捆绑资源中的.txt文件...但是当从NSTask启动时,这些似乎都失败了,即使它们都从终端运行良好。
func runCommand(cmd : String, args : String...) -> (output: [String], error: [String], exitCode: Int32) {
var output : [String] = []
var error : [String] = []
let task = NSTask()
task.launchPath = cmd
task.arguments = args
let outpipe = NSPipe()
task.standardOutput = outpipe
let errpipe = NSPipe()
task.standardError = errpipe
task.launch()
let outdata = outpipe.fileHandleForReading.readDataToEndOfFile()
if var string = String.fromCString(UnsafePointer(outdata.bytes)) {
string = string.stringByTrimmingCharactersInSet(NSCharacterSet.newlineCharacterSet())
output = string.componentsSeparatedByString("\n")
}
let errdata = errpipe.fileHandleForReading.readDataToEndOfFile()
if var string = String.fromCString(UnsafePointer(errdata.bytes)) {
string = string.stringByTrimmingCharactersInSet(NSCharacterSet.newlineCharacterSet())
error = string.componentsSeparatedByString("\n")
}
task.waitUntilExit()
let status = task.terminationStatus
return (output, error, status)
}
我在其他地方使用的方法是否使用NSTask。我尝试使用以下代码获取附近网络的列表:
func findNearby() -> String {
var checkNearby = sb.runCommand("/bin/sh", args: "-c", "sh '/Users/<username>/Library/Containers/com.user.app/Data/Library/Application Support/getnearby.sh'")
if checkNearby.output != [] {
return checkNearby.output[0]
}
return "could not access airport"
}
我的NSTask实施是否存在导致这些脚本超时的问题,或者Apple是否真的遇到麻烦阻止我打电话给&#34; airport -s&#34;来自NSTask?
&#34;机场-s&#34;是否有其他选择?我可以试试吗?
注意:我知道我确实在我的资源中存储.sh文件,这个位置只是暂时的,而我试图找出解决方案