沙盒应用程序文件访问类型位置写入文件

Sandbox App File Access Type Location Writing Files

我正在使用沙盒应用程序在 macOS Big Sur Xcode Obj-C 上测试文件访问。因为该应用程序是沙盒化的,所以我必须授予 read/write 访问我的应用程序将文件写入的文件夹的权限 - 在本例中是用户的音乐目录。

这位于应用沙盒和文件访问类型下的信息选项卡中的目标/签名和功能。

我的应用正在使用以下方式写入文件:

NSString* fileLocation = [NSString stringWithFormat:@"%@/Music/Sample Files", NSHomeDirectory()];

这一切都有效的文件。我的沙盒应用程序在处理用户 /Music/Sample Files/ 文件夹中的文件时没有问题。

我的问题是:如果用户移动了他们的默认音乐文件夹位置(我认为这是 macOS 中的一个选项?)我认为这不会起作用。由于我的应用程序有 ~/Music/Sample Files - 如果用户将他们的默认音乐文件夹移动到其他地方,我该如何编写它仍然可以工作?

额外问题:为什么沙盒应用程序的文件访问类型中的文件访问选项如此有限?它似乎仅限于下载/图片/音乐/和电影文件夹。用户的文档文件夹(至少)不应该包含在此列表中吗?

好的,所以我相信“音乐”是一个无法删除的文件夹,即使通过“音乐”应用移动音乐库也是如此。我想如果音乐库被移动或更改,默认的音乐文件夹仍将保留并可供应用程序使用。

因此,

NSString* fileLocation = [NSString stringWithFormat:@"%@/Music/Sample Files", NSHomeDirectory()];

无论如何都应该工作吗?

https://support.apple.com/en-lb/guide/music/mus69248042d/mac

https://apple.stackexchange.com/questions/100341/is-it-possible-to-remove-or-delete-the-music-folder

最好使用 NSMusicDirectory in URLForDirectory of NSFileManager,

然后将 URL 存储为 security scope,这样您就不必在第二次启动后询问用户是否可以访问。