Не удается скопировать файлы из основного пакета в каталог документов на iPad

#iphone #objective-c #cocoa-touch #ipad #nsfilemanager

#iPhone #objective-c #cocoa-touch #iPad #nsfilemanager

Вопрос:

Я нашел этот фрагмент кода из предыдущего поста здесь. В режиме iPad Simulator все работало так, как задумывалось, но не тогда, когда я переключился в режим реального устройства iPad. Вместо этого появилось сообщение об ошибке «таких файлов не существует». Перед выполнением этих кодов я создал папку Populator, щелкнув правой кнопкой мыши на xxxxxx.app, выбрал «показать содержимое пакета» и поместил некоторые файлы в папку Populator. Копирует ли Xcode весь пакет приложений на устройство iPad? Есть предложения?

 NSString *documentsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString *sourcePath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Populator"];
NSString *folderPath = [documentsDirectory stringByAppendingPathComponent:@"Files"];
NSLog(@"Source Path: %@n Documents Path: %@ n Folder Path: %@", sourcePath, documentsDirectory, folderPath);
NSLog(@"docdire: %@", documentsDirectory);
NSLog(@"loadImage button clicked");
label.text = [@"sourcePath: " stringByAppendingString:sourcePath];
textField.text = [@"clicked: " stringByAppendingString:documentsDirectory];;

NSError *error;
if([[NSFileManager defaultManager] copyItemAtPath:sourcePath toPath:folderPath error:amp;error]){
NSLog(@"File successfully copied");
        label.text = @"copy succeeded";
    } else {
        NSLog(@"Error description-%@ n", [error localizedDescription]);
        NSLog(@"Error reason-%@", [error localizedFailureReason]);
        label.text = [@"Error description: " stringByAppendingString:[error localizedDescription]];
        label2.text = [@"Error reason: " stringByAppendingString:[error localizedFailureReason]];
    }
  

Комментарии:

1. Я узнал, что есть 2 места, в которых есть пакет xxxxx.app. Один предназначен для симулятора, а другой — для дистрибутива сборки.

Ответ №1:

Вы не можете добавлять файлы или папки в NSBundle после того, как он был создан. Для устройства Xcode собирается подписать NSBundle. Любые файлы и папки, которые вы хотите разместить в NSBundle на устройстве, должны быть добавлены в ваш проект Xcode.

Другой способ добавить файлы / папки в ваш NSBundle — это на этапе сборки до подписания пакета.

Ответ №2:

Не имея доступа к реальному списку файлов, вы можете захотеть проверить регистр имен файлов. Симулятор iPhone не чувствителен к регистру, в то время как файловая система iPad чувствительна к регистру. В прошлом это ставило в тупик многих разработчиков.

Ответ №3:

Как и в моем комментарии в исходном вопросе:

Я узнал, что есть 2 места, в которых есть пакет xxxxx.app. Один предназначен для симулятора, а другой — для дистрибутива сборки.