У меня есть небольшое приложение, которое выполняет некоторые сценарии bash. У меня уже есть рутина, и она работает до сих пор. Но .... GUI зависает каждый раз при выполнении скриптов. Вот что у меня уже есть:
func syncShellExec(path: String, args: [String] = []) {
let process = Process()
process.launchPath = "/bin/bash"
process.arguments = [path] + args
let outputPipe = Pipe()
let filelHandler = outputPipe.fileHandleForReading
process.standardOutput = outputPipe
filelHandler.readabilityHandler = { pipe in
let data = pipe.availableData
if let line = String(data: data, encoding: .utf8) {
DispatchQueue.main.async {
self.logger.string += line
}
} else {
print("Error decoding data: \(data.base64EncodedString())")
}
}
process.launch()
process.waitUntilExit()
filelHandler.readabilityHandler = nil
}
и я хочу, чтобы это было так:
var task:Process!
var out:FileHandle?
var outputTimer: Timer?
let path = "/bin/bash"
let workDir = "/Users/luigi/Desktop"
let arguments = "source"
let arguments = ["backup.sh", arguments]
task = Process.init()
task.launchPath = path
task.arguments = arguments
task.currentDirectoryPath = workDir
self.task.launch()
DispatchQueue.global().async {
// this runs in a worker thread, so the UI remains responsive
print ("wating for exit")
self.task.waitUntilExit()
DispatchQueue.main.async {
// do so in the main thread
if let timer = self.outputTimer {
timer.invalidate()
self.outputTimer = nil
}
}
}
Что я должен сделать, чтобы интегрировать незамерзающую часть нижней функции в верхнюю?