NSInternalInconsistencyException, причина: «Не удалось posix_spawn: ошибка 13» Swift - PullRequest
1 голос
/ 17 июня 2019

Я делаю приложение для iOS для взломанных устройств под управлением iOS 12 с Swift .

Недавно я сделал вопрос, на который я сам ответил, в котором я попросил способ запускать задачи командной строки с помощью Swift в iOS .

Но, как вы видите, я еще не закончил, поскольку могу использовать NSTask, но он вылетает при запуске приложения.

По сути, у меня есть NSTask.h файл , который позволяет мне использовать NSTask со Swift.

Итак, чтобы запустить задачу, я сделал следующую функцию:

func task(launchPath: String, arguments: String...) {
    let task = NSTask.init()
    task?.setLaunchPath(launchPath)
    task?.arguments = arguments

    // Create a Pipe and make the task
    // put all the output there
    let pipe = Pipe()
    task?.standardOutput = pipe

    // Launch the task
    task?.launch()
    task?.waitUntilExit()
}

И вызвать функцию следующим образом:

task(launchPath: "/usr/bin", arguments: "git clone https://github.com/lz4/lz4.git")

Проблема в том, что при запуске приложения оно вылетает и печатает следующую ошибку:

Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Couldn't posix_spawn: error 13'

Что я могу сделать, чтобы исправить эту ошибку?

Заранее спасибо.

EDIT : Кстати, я забыл упомянуть, что я получаю доступ к файлу NSTask.h, используя Заголовки мостов .

1 Ответ

1 голос
/ 17 июня 2019

Путь запуска должен быть полным путем к исполняемому файлу, а не каталогом, содержащим исполняемый файл. Также аргументы команды должны быть представлены как отдельные аргументы, а не как одна строка. (Обратите внимание, что не задействована оболочка, которая анализирует команду и разделяет аргументы перед началом процесса.) Поэтому вызов должен быть примерно таким:

task(launchPath: "/usr/bin/git", arguments: "clone", "https://github.com/lz4/lz4.git")
...