3

我在我的 OS X 应用程序中启用沙盒以重新提交到应用程序商店,并且我试图找到最优雅的方式来确保用户只能选择我的应用程序有权更改的资源。

精简场景:

  1. 用户通过NSOpenPanel
  2. 用户单击Process Picture应用程序上的按钮
  3. 应用程序从互联网检索信息
  4. 应用程序更改图片的元数据。

用户选择完图片后,我想确保每张图片都位于 Pictures 文件夹下,否则我对物理文件的写入将无声无息地失败。

Apple建议使用以下方法来确定“图片”文件夹的位置:

图片目录包含用户的图像和照片。要获取此目录的路径,请使用带有 NSUserDomainMask 域的 NSPicturesDirectory 搜索路径键。

实现上述内容给了我一条如下所示的路径: /Users/thomas/Library/Containers/com.blazingfrog.latipics/Data/Pictures/picture1.jpg

但是当我想查看用户选择了哪些图片时,[myOpenPanel URLs]返回/Users/thomas/Pictures/picture1.jpg

这两条路径在逻辑上是相同的,但看起来非常不同。我怎样才能以每次都有效的方式比较它们?

如果有帮助,为了准备我的应用程序以进行沙盒操作,我做了以下操作

  • XCode 中启用的权利
  • 启用应用沙盒
  • 启用文件系统(读取)
  • 启用允许传入/传出网络连接
  • 启用图片文件夹访问(读/写)
4

2 回答 2

1
  1. 你几乎应该默默地失败。如果出现问题,请尽可能向用户报告。这正是NSError设计的目的。

  2. 在尝试之前,您几乎应该尝试确定操作是否会成功。这样做会使您对竞争条件持开放态度。而是继续尝试操作;如果失败,请优雅地处理。

  3. 听起来你真的想要这个com.apple.security.files.user-selected.read-write权利。这将为您提供对用户使用打开面板选择的任何文件的写入权限。

于 2012-06-01T10:57:50.873 回答
-3
[[NSFileManager defaultManager] isWritableFileAtPath:path]
于 2013-09-02T19:30:54.043 回答