我正在编写一个最小的应用程序来学习如何读取包含可以显示为图像的 UInt16 数据的文件。它最终编译但在运行时崩溃并出现文件读取权限错误。我试图给应用程序读写文件的权限,权限似乎是说我有读写权限。
它在第二行崩溃:
let fileURL = URL(fileURLWithPath: "/Users/<user>/<some path/<some file with ext .raw>")
let data = try! Data(contentsOf: fileURL)
这个错误:
线程 1:致命错误:“尝试!” expression unexpectedly raised an error: Error Domain=NSCocoaErrorDomain Code=257 “无法打开文件“p03-4M1-041.raw”,因为您无权查看它。” UserInfo={NSFilePath=/Users/nate/2008 11 15 Freeway Fire/p03/p03-4M1-041.raw, NSUnderlyingError=0x600002d72a90 {Error Domain=NSPOSIXErrorDomain Code=1 "Operation not permitted"}}
我认为这是一个 Xcode 问题,因为 Assets.xcasssets 似乎是空的并且没有 plist。
我在运行 Ventura 的 macBook 上使用 Xcode 14、Swift5。
macOS 应用程序是沙盒的。要访问应用程序资源包之外的文件,您需要在“签名和功能”选项卡上项目目标的应用程序沙盒部分中启用“用户选择的文件”文件访问权限。
然后您需要使用标准文件选择器(例如
NSOpenPanel
)。然后您的应用程序将有权访问所选文件。您无法访问您碰巧为其创建文件 URL 的任意文件。
除了启用“用户选择的文件”之外,您还可以授予对标准文件夹(例如“下载”和其他一些文件夹)的访问权限。然后您的应用程序可以直接访问您的应用程序已被授予访问权限的文件夹中的文件。