Папка создания NSFileManager (Ошибка какао 513.)

Я пытаюсь создать папку в папке звуков / моего приложения.

-(void)productPurchased:(UAProduct*) product {
    NSLog(@"[StoreFrontDelegate] Purchased: %@ -- %@", product.productIdentifier, product.title);

    NSFileManager *manager = [NSFileManager defaultManager];
    NSString *bundleRoot = [[NSBundle mainBundle] bundlePath];

    NSError *error;

    NSString *dataPath = [NSString stringWithFormat:@"%@/sounds/%@", bundleRoot, product.title];

    if (![manager fileExistsAtPath:dataPath isDirectory:YES]) {
        [manager createDirectoryAtPath:dataPath withIntermediateDirectories:YES attributes:nil error:&error];
        NSLog(@"Creating folder");
    }

    NSLog(@"%@", error);
}

Но я получаю эту ошибку:

Error Domain=NSCocoaErrorDomain Code=513 "The operation couldn’t be completed. (Cocoa error 513.)" UserInfo=0x175120 {NSFilePath=/var/mobile/Applications/D83FDFF9-2600-4056-9047-05F82633A2E4/App.app/sounds/Test Tones, NSUnderlyingError=0x117520 "The operation couldn’t be completed. Operation not permitted"}

Что я делаю неправильно?Спасибо.

23
задан Iñigo Beitia 9 August 2010 в 11:11
поделиться

2 ответа

Если вы выполните поиск в Google по домену ошибки NSCocoaErrorDomain , вы обнаружите, что код 513 преобразуется в ошибку NSFileWriteNoPermissionError .

Это дает вам ключевой ключ к решению этой проблемы:

Это каталог пакета, содержащий само приложение.Поскольку приложение должно быть подписано, вы не должны вносить изменения в содержимое этого каталога во время выполнения. Это может помешать запуску вашего приложения позже.

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

Когда вы в конечном итоге распространяете приложение через iTunes App Store, приложение имеет цифровую подпись, которая проверяет содержимое приложения. Эта подпись создается во время компиляции.

Если вы попытаетесь изменить пакет после компиляции, приложение изменится, и цифровая подпись станет недействительной. Это делает приложение недействительным - кто знает, какой там код, верно? - и конечные пользователи не смогут его запустить. Итак, Apple настроила iOS для выдачи ошибки, если вы попытаетесь изменить пакет.

Вместо записи в пакет ваше приложение может писать в одну из трех допустимых папок для конкретных приложений : Documents , Temp и Cache. . Скорее всего, вы захотите записать в папку Documents .

Эти папки доступны только вашему приложению. Никакое другое приложение не может получить доступ к содержимому этих папок. (Точно так же ваше приложение не может получить доступ к папкам другого приложения.)

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

50
ответ дан 29 November 2019 в 01:10
поделиться

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

EDIT:
. Ошибка, которую вы видите, скорее всего, связана с невозможностью записи в пакет.

7
ответ дан 29 November 2019 в 01:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: