5

我的应用程序会将一些文件写入文件系统,它安装在 /Application 而不是 /var/mobile/Application 中,在我开发的 iPhone 上,一切正常。但是当分发给其他人时,他们得到“Cocoa error 513”。文件写在/var/mydir/files,那是什么问题?我在哪里可以在完全许可的情况下写作?谢谢你。

代码:

NSString *dir = @"/var/mydir/docs/";
NSFileManager *fileManager = [NSFileManager defaultManager];
if(![fileManager fileExistsAtPath:dir]) {
    NSError *error = nil;
    BOOL createdDir = [fileManager createDirectoryAtPath:dir withIntermediateDirectories:YES attributes:nil error:&error];
    if (!createdDir) {
        UIAlertView *errorAlertView = [[UIAlertView alloc] initWithTitle:@"Attention" message:[error localizedDescription] delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
        [errorAlertView show];
    }
}

错误:

The operation couldn't be completed. (Cocoa error 513).
4

2 回答 2

3

可可错误 513 是NSFileWriteNoPermissionError. 您可以在Foundation Constants Reference中找到它。也许你没有写权限/var

于 2013-07-23T01:42:19.603 回答
2

正如@cahn 所说,由于权限问题,您的应用程序被拒绝。即使安装在/Applications/,应用程序通常以用户身份运行mobile。从这个登录会话中可以看到:

$ ssh mobile@iphone5
mobile@iphone5's password: 
iPhone5:~ mobile$ cd /var
iPhone5:/var mobile$ mkdir mydir
mkdir: cannot create directory `mydir': Permission denied

移动用户没有直接在/var/.

如果您在 thebigboss.org 上查看有关构建 Cydia 应用程序的文档,您会看到他们建议越狱应用程序在以下位置创建文档目录/var/mobile/Library/YOURAPPNAME

1) Appstore 应用程序在 /var/mobile/Applications/GUID/folder 的沙箱中运行。越狱应用在 /Applications 中运行

2) Appstore 应用程序有一个由安装过程创建的 Documents 文件夹。越狱的应用程序没有。由应用程序创建自己的文件夹。如果您需要这种类型的文件夹,您必须在 applicationDidFinishLaunching 函数中使用简单的 mkdir 命令创建它。只需添加一个简单的功能: mkdir(“/var/mobile/Library/YOURAPPNAME”, 0755);如果文件夹已存在,则无害。您想要这样做是因为安装过程以 root 用户身份运行,而应用程序以用户 mobile 身份运行。如果 Cydia 为您执行此操作,则该文件夹将具有不正确的权限。

于 2013-07-23T04:13:54.403 回答