使用 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
.
将它们添加到文件中
我正在尝试构建一个使用 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
.