如何检查用户选择的文件我的沙盒应用程序是否有权写入?

时间:2012-06-01 06:30:24

标签: objective-c macos cocoa sandbox

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

简化方案:

  1. 用户通过NSOpenPanel
  2. 选择文件系统上的图片
  3. 用户点击应用中的Process Picture按钮
  4. app从互联网上检索信息
  5. app改变图片的元数据。
  6. 用户完成选择图片后,我想确保每个图片位于图片文件夹下,否则我对物理文件的写入将无声地失败。

    Apple recommends the following to determine the Pictures folder's location:

      

    图片目录包含用户的图片和照片。要得到   此目录的路径使用NSPicturesDirectory搜索路径键   使用NSUserDomainMask域。

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

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

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

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

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

2 个答案:

答案 0 :(得分:0)

1

你应该永远无声地失败。如果出现问题,请尽可能向用户报告。这正是NSError的设计目标。

2

在尝试操作之前,您应该从不尝试确定操作是否会成功。这样做会让你对竞争条件开放。而是继续尝试操作;如果失败了,请优雅地处理。

3

听起来你真的想要com.apple.security.files.user-selected.read-write权利。这将使您可以使用打开的面板对用户选择的任何文件进行写访问。

答案 1 :(得分:-3)

[[NSFileManager defaultManager] isWritableFileAtPath:path]