Проблемы с записью файлов на iOS

Я борюсь со следующей ошибкой NSCocoaErrorDomain 513, о которой сообщает очень небольшое количество пользователей:

Unable to create directory at path /var/mobile/Containers/Data/Application/EBE2C5D8-5AEC-4D62-9393-B19CAD598FE5/Documents/documents/FF2F88FB-2C07-4FA3-988E-58AD5C21F659/9A02F8A0-74EB-4ED6-81B6-4F40653856D3. 
Error: Error Domain=NSCocoaErrorDomain Code=513 "You don’t have permission to save the file “9A02F8A0-74EB-4ED6-81B6-4F40653856D3” in the folder “FF2F88FB-2C07-4FA3-988E-58AD5C21F659”." 
UserInfo={
    NSFilePath=/var/mobile/Containers/Data/Application/EBE2C5D8-5AEC-4D62-9393-B19CAD598FE5/Documents/documents/FF2F88FB-2C07-4FA3-988E-58AD5C21F659/9A02F8A0-74EB-4ED6-81B6-4F40653856D3,
    NSUnderlyingError=0x15e09de00 {
        Error Domain=NSPOSIXErrorDomain 
        Code=13 "Permission denied"
    }
}

Эта ошибка означает, что каталог не может быть создан из-за ошибки разрешения. Вот где я теряюсь, потому что единственная причина, по которой я вижу, - это создание файла вне песочницы моего приложения.

Код, генерирующий эту ошибку:

NSArray* paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString* documentsDirectory = [paths objectAtIndex:0];
NSString *directory = [documentsDirectory stringByAppendingPathComponent:documentsPathAndUUIDs];

NSError *error = nil;
if (![[NSFileManager defaultManager] createDirectoryAtPath:directory 
                               withIntermediateDirectories:YES
                                                attributes:nil            
                                                     error:&error]) {
    NSError(@"Unable to create directory at path %@. Error: %@", directory, error);
}

Пара вещей, на которые стоит обратить внимание:

  • Этот путь не сохраняется, он регенерируется каждый раз, так что это не так, как будто контейнер приложения менялся между установками;
  • У пользователей, кажется, есть свободное место на диске;
  • Это влияет как минимум на iOS 9 (у меня недостаточно отчетов, чтобы узнать, влияет ли это также на iOS 10)

Будет ли у кого-нибудь намек на то, почему это может произойти?

1 ответ

У вас есть привилегии sudo/chown на /var? Если нет, и вы используете ОС Mavericks, вам может потребоваться перезагрузить компьютер в безопасном режиме и отключить CSRUtil.

Документация по CSRUtil

Другие вопросы по тегам