我正在尝试通过单击按钮来重新启动和重启我的越狱设备。我知道reboot命令只是“reboot”而respring命令是“killall backboardd”但是在Swift 4中我不能使用“系统”功能,因为 - >'system'在Swift中不可用:使用posix_spawn API或NSTask。
我试过这个。
func system(_ command: String) {
var args = command.components(separatedBy: " ")
let path = args.first
args.remove(at: 0)
let task = CommandLine()
task.launchPath = path
task.arguments = args
task.launch()
task.waitUntilExit()
}
@IBAction func respringAction(_ sender: Any) {
system("killall backboardd");
}
但是给我这个错误 - >'CommandLine'无法构造,因为它没有可访问的初始值设定项。
我能做什么?
免责声明:这已在我的Mac上经过测试和运行,但我没有任何越狱的iOS设备,因此无法在那里进行测试。
在这里,所有清理:
func system(_ command: String) {
let argsArray = command.split(separator: " ").map { (substr) -> String in
return String(substr)
}
guard argsArray.count != 0 else { return }
let command = strdup(argsArray.first!)
let args = argsArray.map { strdup($0) } + [nil]
posix_spawn(nil, command, nil, nil, args, nil)
return
}
system("/bin/echo you are cool man")
system("/bin/ls -l /")
我没有越狱的iPhone,但我知道这可以在我的Mac上运行。使用它将要求您知道要运行的命令的完整路径名,例如上面示例中的/ bin / ls。
如果您希望能够传递由shell解释的命令行(您可以使用此备用版本):
func shellInterpretedSystem(_ command: String) {
let argsArray = [
"/bin/sh",
"-c",
command
].map { (substr) -> String in
return String(substr)
}
guard argsArray.count != 0 else { return }
let command = strdup(argsArray.first!)
let args = argsArray.map { strdup($0) } + [nil]
posix_spawn(nil, command, nil, nil, args, nil)
return
}
shellInterpretedSystem("ls -l /Users")
在这种情况下,将考虑您的PATH变量等,并将扩展诸如星号(*)之类的内容。