启用应用程序沙盒时,System()命令不起作用

时间:2012-07-02 09:41:40

标签: xcode cocoa system entitlements sandbox

Apple现在要求所有未来的应用程序都是沙盒,所以我按照说明沙盒应用程序。构建成功但后来我的system(rm -rf ~/.Trash/*)命令停止工作。没啥事儿。我觉得这里令人困惑的是为什么这个系统命令不适用于App Sandboxing / Entitlements。以下是我的权利设置:

权利:已检查

应用沙盒:已检查

这是我目前的代码:

- (void)viewDidLoad {
[self emptyTrash];
}

- (void)emptyTrash {
system(rm -rf ~/.Trash/*);
}

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

看看documentation

  

POSOS层上方的Mac OS X路径查找API返回路径   相对于容器而不是相对于用户的家   目录。如果您的应用程序在沙箱之前访问了位置   用户的实际主目录(〜),您正在使用Cocoa或Core   然后,在启用沙盒后,基础API将进行路径查找   代码会自动使用您应用的容器。

你可以使用

struct passwd *getpwuid(uid_t uid);
struct passwd {
char    *pw_name;       /* user name */
char    *pw_passwd;     /* encrypted password */
uid_t   pw_uid;         /* user uid */
gid_t   pw_gid;         /* user gid */
__darwin_time_t pw_change;      /* password change time */
char    *pw_class;      /* user access class */
char    *pw_gecos;      /* Honeywell login info */
char    *pw_dir;        /* home directory */
char    *pw_shell;      /* default shell */
__darwin_time_t pw_expire;      /* account expiration */
}

 #include <pwd.h>
 #include <sys/types.h>
 char *HomeDirectory = getpwuid(getuid())->pw_dir;
 NSLog(@"%s", HomeDirectory);
 system([[NSString stringWithFormat:@"rm -rf %s/.Trash/",HomeDirectory] UTF8String]);