macos - 无法在 MacOS 应用程序中创建新目录
问题描述
我正在开发一个 Mac 应用程序。我一直在努力在 Mac OS 上的“桌面”中创建一个目录。我正在研究高山脉。它工作正常,但突然应用程序无法在桌面中创建目录。我收到以下权限错误。我正在使用 Xcode 9.3 和 swift 4.1。
Error Domain=NSCocoaErrorDomain Code=513 "You don’t have permission to save the file “TestDir” in the folder “Desktop”." UserInfo={NSFilePath=/Users/sj/Library/Containers/com.user.TestSync/Data/Desktop/TestDir, NSUnderlyingError=0x60400044cc60 {Error Domain=NSPOSIXErrorDomain Code=1 "Operation not permitted"
这是我的代码:
class DBManager: NSObject {
static func getDirectoryPath() -> URL {
let homeDirectory = URL(fileURLWithPath: NSHomeDirectory())
let desktopPath = homeDirectory.appendingPathComponent("Desktop")
let databaseFolder = desktopPath.appendingPathComponent("TestDir")
return databaseFolder
}
static func createFolderIfNotExist() {
let databaseFolder = DBManager.getDirectoryPath()
if !FileManager().fileExists(atPath: databaseFolder.path) {
do {
try FileManager.default.createDirectory(atPath: databaseFolder.path, withIntermediateDirectories: true, attributes: nil)
} catch {
print(error)
}
}
}
}
如果我要在“ Documents ”中创建一个目录,该代码可以正常工作。但是由于某种原因,即使我向所有人提供了 Desktop 的读/写访问权限,我也无法在 Desktop 内部创建。我还包括了我必须创建的目录的屏幕截图。
我试图在“下载”中创建一个目录,但以相同的权限问题结束。但是,我再次成功在“库”中创建目录。因此,似乎操作系统没有授予在别名目录中创建的权限,因为桌面和下载都是别名。
非常感谢任何帮助。
解决方案
那是因为您的 macOS 应用程序正在“应用程序沙箱”中运行,请检查目标设置中的“功能”选项卡。
~/Library/Containers/%BundleID%/Data/Desktop
是指向用户桌面的软链接,您没有写入权限(取决于您的权利文件,甚至没有读取权限)。
根据您的用例,您可以
- 禁用沙盒模式
- 让用户通过打开“打开”对话框来选择一个文件夹(然后你可以写这个)
- 在其他受保护的用户文件夹(如
Downloads
等)中启用读/写或 - 直接在您的主目录中创建 TestDir 而不使用任何软链接文件夹
推荐阅读
- volttron - 如何访问配置为 enable_web=True 的 volltron 代理中的 http 标头
- python - 从文档图像中删除不需要的空白
- python - 黑名单 Json discord.py
- node.js - TypeError:回调不是函数发生此错误
- python - Tensorflow model.fit() 不适用于字符串作为标签
- verilog - 如何使用 X,Y 坐标复制对象
- html - css flex div高度问题-为什么空间很大?
- rxjs - 使用内部可观察谓词的管道过滤器
- javascript - 是否有无需按下按钮即可在页面加载时切换 div 的功能?
- javascript - 如何在边框半径内居中文本?