cocoa - 在沙盒应用程序中读取桌面图片

标签 cocoa sandbox

我的沙盒应用程序因读取桌面图片而崩溃,我无法在 Mac 上重现这些图片,但我因它崩溃而在 App Store 上被拒绝,并且其他用户也报告了崩溃情况。

桌面图片是从“/Library/Desktop Pictures”读取的,或者使用 NSWorkspace 的desktopImageURLForScreen 方法读取的。这些在我的 Mac 上工作得很好,但我有点困惑,因为我不知道如何在没有在 NSOpenPanel 中手动选择目录的情况下访问“/Library/Desktop Pictures”。至于desktopImageURLForScreen,我不确定这是否是沙箱安全的,具体取决于文件在用户屏幕上的存储位置。

任何人都可以验证这两种获取桌面图片的方法在所有情况下都是安全的吗?或者我是否需要请求用户在 NSOpenPanel 中选择存储桌面图片的目录(甚至是来自desktopImageURLForScreen)?

最佳答案

首先,让沙箱拒绝访问 URL 不会导致崩溃 - 方法将返回错误指示。因此,如果您的应用程序崩溃,要么是因为您无法访问 URL,要么是因为您没有正确测试失败。

如果您希望安静地访问桌面图像,您可以指定 com.apple.security.assets.pictures.read-only 权限 - 这将使您的应用能够访问常见图像位置。它保证您的应用可以访问桌面图像的URL,只是增加概率。因此,您仍然必须测试成功或失败。

如果您的程序需要访问,并且静默访问失败,您可以建立一个标准文件对话框;具有适当定制的提示、按钮等;请求用户授予对该 URL 的访问权限。

HTH

关于cocoa - 在沙盒应用程序中读取桌面图片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20136568/

相关文章:

actionscript-3 - AIR 将服务器托管的 swf 加载到同一沙箱中

Objective-C 运行时库的使用

cocoa - CGBitmapContext 获取像素值 Leopard 与 SnowLeopard 混淆

swift - NSViewController 委托(delegate)?

objective-c - 可拖动的 CALayer

macos - 存储为 NSData 的 URL 书签的编码是什么?

objective-c - 写入plist的问题

javascript - 如何在沙盒 iframe (IE11) 中使用 javascript 创建 iframe 内容?

google-chrome-extension - 从内容脚本访问窗口变量

macos - 如何在 OSX 中更改 NSWindow 标题栏的颜色