Swift Xcode 10.1中的系统功能

问题描述 投票:1回答:1

我正在尝试通过单击按钮来重新启动和重启我的越狱设备。我知道reboot命令只是“rebo​​ot”而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'无法构造,因为它没有可访问的初始值设定项。

我能做什么?

ios swift system jailbreak
1个回答
0
投票

免责声明:这已在我的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变量等,并将扩展诸如星号(*)之类的内容。

© www.soinside.com 2019 - 2024. All rights reserved.