Swift-проблема обнаружена при создании помощника - PullRequest
0 голосов
/ 23 ноября 2018

Когда я пытаюсь создать помощника для приложения, которое получает сведения о системном программном и аппаратном обеспечении с помощью команды 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 Ответ

0 голосов
/ 23 ноября 2018

Оболочки выполняют сценарии, а не двоичные файлы.Решение состоит в том, чтобы запустить инструмент напрямую;вряд ли есть причина запускать оболочку только для запуска программы:

process.launchPath = "/usr/sbin/system_profiler"
process.arguments = ["SPHardwareDataType"]

Также нет смысла устанавливать stderr канал, если вы не собираетесь его использовать:

/* process.standardError = pipe */
...