Revert OutputCapturer changes since Fabian already added the fix

This commit is contained in:
naturecodevoid
2023-02-19 09:54:56 -08:00
parent 9f05123e42
commit deac960e10

View File

@@ -15,41 +15,42 @@ class OutputCapturer {
private let consoleManager = LCManager.shared private let consoleManager = LCManager.shared
private var stdoutPipe = Pipe() private var inputPipe = Pipe()
private var stderrPipe = Pipe() private var errorPipe = Pipe()
private var outputPipe = Pipe() private var outputPipe = Pipe()
private init() { private init() {
// Setup pipe file handlers // Setup pipe file handlers
self.stdoutPipe.fileHandleForReading.readabilityHandler = { [weak self] fileHandle in self.inputPipe.fileHandleForReading.readabilityHandler = { [weak self] fileHandle in
self?.handle(data: fileHandle.availableData) self?.handle(data: fileHandle.availableData)
} }
self.stderrPipe.fileHandleForReading.readabilityHandler = { [weak self] fileHandle in self.errorPipe.fileHandleForReading.readabilityHandler = { [weak self] fileHandle in
self?.handle(data: fileHandle.availableData, isError: true) self?.handle(data: fileHandle.availableData, isError: true)
} }
// Keep output in STDOUT without causing infinite loop // Keep STDOUT
dup2(STDOUT_FILENO, self.outputPipe.fileHandleForWriting.fileDescriptor) dup2(STDOUT_FILENO, self.outputPipe.fileHandleForWriting.fileDescriptor)
// Intercept STDOUT and STDERR // Intercept STDOUT and STDERR
dup2(self.stdoutPipe.fileHandleForWriting.fileDescriptor, STDOUT_FILENO) dup2(self.inputPipe.fileHandleForWriting.fileDescriptor, STDOUT_FILENO)
dup2(self.stderrPipe.fileHandleForWriting.fileDescriptor, STDERR_FILENO) dup2(self.errorPipe.fileHandleForWriting.fileDescriptor, STDERR_FILENO)
} }
deinit { deinit {
try? self.stdoutPipe.fileHandleForReading.close() try? self.inputPipe.fileHandleForReading.close()
try? self.stderrPipe.fileHandleForReading.close() try? self.errorPipe.fileHandleForReading.close()
} }
private func handle(data: Data, isError: Bool = false) { private func handle(data: Data, isError: Bool = false) {
// Write output to STDOUT
self.outputPipe.fileHandleForWriting.write(data)
guard let string = String(data: data, encoding: .utf8) else { guard let string = String(data: data, encoding: .utf8) else {
return return
} }
DispatchQueue.main.async { DispatchQueue.main.async {
self.consoleManager.print(string) self.consoleManager.print(string)
// put data back into STDOUT so it appears in Xcode/idevicedebug run
self.outputPipe.fileHandleForWriting.write(data) // this might not need to be async
} }
} }
} }