Swift-проблема обнаружена при создании помощника
Когда я пытаюсь создать помощника для приложения, которое получает сведения о системном программном и аппаратном обеспечении с помощью команды system_profiler, я получаю следующую ошибку.
Ответ от службы XPC: HELLO XPC
Ответ от службы XPC: /usr/sbin/system_profiler: /usr/sbin/system_profiler: невозможно выполнить двоичный файл "
Код приведен ниже.
class CommandHelper: NSObject,CommandHelperProtocol {
func upperCaseString(_ string: String, withReply reply: @escaping (String) -> Void) {
let response = string.uppercased()
reply(response)
}
func loadServerURL(_ string: String, withReply reply: @escaping (String) -> Void) {
let pipe = Pipe()
let process = Process()
process.launchPath = "/bin/sh"
process.arguments = ["system_profiler","SPHardwareDataType"]
process.standardOutput = pipe
process.standardError = pipe
let fileHandle = pipe.fileHandleForReading
process.launch()
let response = String(data: fileHandle.readDataToEndOfFile(), encoding: .utf8)
print(response!)
reply(response!)
}
}
Когда я установил launchPath в / usr / sbin / system_profiler, я получил пустой вывод.
1 ответ
Решение
Оболочки выполняют скрипты, а не двоичные файлы. Решение состоит в том, чтобы запустить инструмент напрямую; вряд ли есть причина запускать оболочку только для запуска программы:
process.launchPath = "/usr/sbin/system_profiler"
process.arguments = ["SPHardwareDataType"]
Кроме того, нет смысла устанавливать stderr
труба, если вы не собираетесь использовать это:
/* process.standardError = pipe */