使用 Swift 执行预编译的捆绑程序

Execute Pre-Compiled Bundled Program with Swift

我正在尝试构建一个使用 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."

是的,这是可能的。您看到的错误很可能是由于 cli 二进制文件缺少可执行权限造成的。

你能确定这个文件确实是可执行的吗?您可以只 运行 ls -lh cli 文件。输出应如下所示。

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

如果您的输出缺少 x,则文件缺少可执行权限。您可以使用 chmod +x cli.

将它们添加到文件中