Я пытаюсь создать папку в папке звуков / моего приложения.
-(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"}
Что я делаю неправильно?Спасибо.
Если вы выполните поиск в Google по домену ошибки NSCocoaErrorDomain
, вы обнаружите, что код 513
преобразуется в ошибку NSFileWriteNoPermissionError
.
Это дает вам ключевой ключ к решению этой проблемы:
В частности, вы не можете изменять содержимое папки пакетов скомпилированного приложения. Это потому, что пакет - это скомпилированное приложение.
Когда вы в конечном итоге распространяете приложение через iTunes App Store, приложение имеет цифровую подпись, которая проверяет содержимое приложения. Эта подпись создается во время компиляции.
Если вы попытаетесь изменить пакет после компиляции, приложение изменится, и цифровая подпись станет недействительной. Это делает приложение недействительным - кто знает, какой там код, верно? - и конечные пользователи не смогут его запустить. Итак, Apple настроила iOS для выдачи ошибки, если вы попытаетесь изменить пакет.
Вместо записи в пакет ваше приложение может писать в одну из трех допустимых папок для конкретных приложений : Documents
, Temp
и Cache.
. Скорее всего, вы захотите записать в папку Documents
.
Эти папки доступны только вашему приложению. Никакое другое приложение не может получить доступ к содержимому этих папок. (Точно так же ваше приложение не может получить доступ к папкам другого приложения.)
Вы можете настроить свое приложение, чтобы разрешить конечному пользователю управлять доступом к данным файла через iTunes с помощью поддержки совместного использования файлов на рабочем столе .
Это потому, что вы никогда не должны изменять пакет вашего приложения во время выполнения. Вместо этого у вас должна быть папка в другом месте, куда вы можете добавлять ресурсы.
EDIT:
.
Ошибка, которую вы видите, скорее всего, связана с невозможностью записи в пакет.