Swift在沙盒模式下执行命令行命令

时间:2018-01-09 20:08:57

标签: swift cocoa command-line appstore-sandbox

目前我正在尝试使用Swift编程。我尝试从 macOS Swift应用程序中执行命令行命令。如果没有将我的应用程序设置为沙箱,一切正常。但是,由于我激活Sandbox,命令将不再起作用,但不会抛出任何错误,并以状态代码Content终止。

所以最简单的用例是从我的应用程序中启动0

负责执行shell命令的方法如下:

VSCode

因此,如果我想启动 func executeUserCommand(command: String, args: [String]?) -> Int32{ let task = Process() task.launchPath = "/usr/local/bin/" + command task.arguments = args task.launch() task.waitUntilExit() return task.terminationStatus } } ,请致电VSCode以在当前目录中打开executeUserCommand("code", ["."])

这在我启用Xcode中的VSCode之前一直正常。我清理并重建了应用程序,但现在App Sandbox根本没有启动,但terminateStatus是VSCode。我很确定沙箱限制了对0目录的访问。

有没有办法让我的应用程序只能访问这个特定的文件夹?这样用户可以授予我的应用程序一次访问该文件夹的权限,然后即使重新启动应用程序,应用程序也可以访问该文件夹?

提前致谢

1 个答案:

答案 0 :(得分:1)

  

是的,我已经这么认为了,但我在考虑是否可以明确要求用户授予应用程序对此特定文件夹的权限

你正在思考正确的方向。显然沙盒应用程序如果无法访问文件和文件夹就会毫无用处,而他们这样做的关键是用户授予他们权限。使用标准的打开和保存对话框授予此权限,当用户选择文件/文件夹时,应用程序被授予读/写/创建权限。

是否需要访问特定文件/文件夹?自定义打开的对话框以指导用户选择特定的文件/文件夹,并检查结果以确保他们有 - 在他们选择不处理时处理这种情况。

希望您的应用保留启动用户授予文件/文件夹的访问权限?然后,您需要创建并存储安全范围的书签

是时候做一些阅读,如果你遇到困难问一个新问题,有人无疑会帮助你。记得要显示你发现的内容,你写过的代码等等。

HTH