Mac Sandbox:测试文件是否可访问

Fra*_* R. 10 macos cocoa sandbox mac-app-store

有没有人知道是否有办法找出沙箱下是否可以访问特定的文件系统位置?

我想测试一下特定文件是否可以在普通的Powerbox规则下访问; 已经使用打开/保存对话框等添加到电源盒中.

我可以触发沙箱异常之前执行此操作吗?

我可以捕获沙箱异常吗?

最好的祝福,

坦率

CRD*_*CRD 11

您可以使用OS access()系统调用进行快速简单的测试,来自man access:

#include <unistd.h>

int access(const char*path,int amode);

access()函数检查由path指定的文件的可访问性,以获取amode指示的访问权限.amode的值是要检查的访问权限的按位包含OR(R_OK表示读取权限,W_OK表示写入权限,X_OK表示执行/搜索权限)或存在测试F_OK.检查路径名路径的所有组件的访问权限(包括F_OK).

如果无法找到路径或者未授予任何所需的访问模式,则返回-1值,并设置全局整数变量errno以指示错误.否则,返回0值.

您可以使用以下内容为Objective-C做好准备:

typedef enum
{
   ReadAccess = R_OK,
   WriteAccess = W_OK,
   ExecuteAccess = X_OK,
   PathExists = F_OK
} AccessKind;


BOOL isPathAccessible(NSString *path, AccessKind mode)
{
   return access([path UTF8String], mode) == 0;
}
Run Code Online (Sandbox Code Playgroud)