Выполнение предварительно скомпилированной связанной программы с помощью Swift - PullRequest
0 голосов
/ 14 июля 2020

Я пытаюсь создать приложение, которое использует инструмент CLI для большой работы, и мне интересно, можно ли связать и запустить предварительно скомпилированный инструмент из Swift в XCode на macOS 10.15+? Я могу добавить двоичный файл в пакет, однако файл доступен только для чтения и не может быть выполнен.

Пример

В пакете должен быть двоичный файл с именем cli.

let stdOut = Pipe()
let process = Process()
process.executableURL = Bundle.main.url(forResource: "cli", withExtension: "")!
process.arguments = args
process.standardOutput = stdOut
try! process.run()

Ошибка

Fatal error: 'try!' expression unexpectedly raised an error: Error Domain=NSCocoaErrorDomain Code=4 "The file “cli” doesn’t exist."

1 Ответ

1 голос
/ 14 июля 2020

Да, это возможно. Ошибка, которую вы видите, скорее всего, вызвана отсутствием разрешения исполняемого файла для двоичного файла cli.

Можете ли вы убедиться, что файл действительно исполняемый? Вы можете просто запустить ls -lh cli в файле. Результат должен выглядеть следующим образом.

ls -lh cli 
-rwxr-xr-x@ 1 user  staff    36K 28 Mai 02:24 cli

Если в вашем выводе отсутствует x, значит, у файла отсутствуют разрешения для исполняемых файлов. Вы можете добавить их в файл, используя chmod +x cli.

...