【问题标题】:System function in Swift Xcode 10.1Swift Xcode 10.1 中的系统函数
【发布时间】:2019-07-30 23:34:20
【问题描述】:

我正在尝试做一个应用程序,通过单击一个按钮来重新启动并重新启动我的越狱设备。我知道重新启动命令只是“重新启动”,而重新启动命令是“killall backboardd”,但在 Swift 4 中我不能使用“系统”功能,因为这个 - >“系统”在 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' 不能被构造,因为它没有可访问的初始化器。

我能做什么?

【问题讨论】:

  • 我认为您正在隐藏现有的 system 函数
  • @Alexander 不,我试图重命名函数,但这不是问题,问题出在let task = CommandLine() 但我不明白为什么
  • CommandLine 来自哪里?
  • 如果我使用 Process 我明白了 --> 使用未解析的标识符“进程”;你的意思是“进步”吗?

标签: ios swift system jailbreak


【解决方案1】:

免责声明:这是在我的 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 变量等将被考虑在内,并且星号 (*) 等内容将被扩展。

【讨论】:

  • ...如何越狱我的手机进行测试?
  • unc0ver(你必须在 12.0-12.1.2)顺便说一句它不起作用:(
  • 泰。上面的解决方案是否适合您?如果是,请标记为已接受。如果没有,请告诉我。
  • “顺便说一句,它不起作用:(”是针对您编写的解决方案的:( unc0ver jb 有效!”
  • 跑步时会发生什么? ...你用什么来运行命令?
猜你喜欢
  • 2019-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-31
  • 2019-04-12
  • 1970-01-01
相关资源
最近更新 更多