运行具有对卷的写访问权限的命令行

问题描述

我的沙盒应用程序中有一个自编译的二进制文件。根据用户请求,我运行命令。它尝试在卷上创建文件,但由于权限被拒绝而失败。

该应用程序已被沙盒化,并且为 file:/// 创建了安全范围书签且有效。从终端运行该命令时,不需要 sudo。

let task = Process()
task.launchPath = Bundle.main.url(forResource: "f3write",withExtension: nil)
task.arguments = ["/Volume/SDCard"]
task.launch()

我正在处理命令输出

Free space: 28.64 GB
Creating file 1.h2w ... 
f3write: Can't create file /Volumes/SDCard/1.h2w: Operation not permitted

解决方法

如评论中所述,file:/// 的安全范围书签不仅被滥用,而且不会授予对文件卷结构中文件夹的写访问权限。

如果在我的应用程序中运行 f3write 命令之前为 /Volumes/SDCard 添加书签,则不会显示任何错误并且该命令运行良好。