Папка документов приложения Cydia не создана - PullRequest
2 голосов
/ 30 января 2012

Я работал над приложением Core Data для iOS, которое отлично работает через «каналы» Apple - симулятор iOS и установку Xcode, но когда я пытаюсь установить его вручную на устройство, приложение вылетает.Моя главная цель - поставить приложение на Cydia.

Руководство по подготовке приложения для Cydia Я прочитал эту статью, и внизу написано:

Приложение Appstore имеет папку «Документы», которая создается в процессе установки.Взломанное приложение не делает.Это зависит от приложения, чтобы создать свою собственную папку.Если вам нужен этот тип папки, вы должны создать его с помощью простой команды mkdir в вашей функции applicationDidFinishLaunching.Просто добавьте простую функцию: mkdir («/ var / mobile / Library / YOURAPPNAME», 0755);Если папка уже существует, никакого вреда не будет.Вы хотите сделать это, потому что процесс установки запускается от имени пользователя root, а приложение запускается от имени пользователя mobile.Если Cydia сделает это за вас, то папка будет иметь неправильные разрешения.

Я не знаю много о том, как именно работает Core Data, но я знаю, что база данных Core Data хранится в Документахпапку, и теперь я считаю, что это является причиной сбоя моего приложения.

Функция mkdir не работала при создании папки «Документы».

Как мне создать папку «Документы» и как заставить ее работать с Базовыми данными, обеспечив базу данных?загружен из этой папки, которую я создал?

Заранее спасибо

1 Ответ

5 голосов
/ 30 января 2012

Скорее всего, вы все еще используете путь к документам AppStore в методах, которые создают и загружают файл базы данных CoreData (я думаю, Xcode по умолчанию поместит их в ваш AppDelegate).

Проверьте метод, который загружаетpersistentStorageCoordinator и найдите строку, подобную этой:

NSURL *storeUrl = [NSURL fileURLWithPath: [docPath stringByAppendingPathComponent:@"my_cool_app.sqlite"]];

И убедитесь, что docPath является "/ var / mobile / Library / My_Cool_App" и не происходит из стандартного дружественного AppStore:

NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *docPath = [documentPaths objectAtIndex:0];

Возможно, вы захотите создать метод, который возвращает правильный каталог Documents в зависимости от того, для какой цели вы компилируете приложение:

+(NSString *)documentsDirectoryPath
{
#ifdef JAILBREAK

    NSString *documentPath = @"/var/mobile/Library/My_Cool_App";

    if (![[NSFileManager defaultManager] fileExistsAtPath:documentPath])
    {
        [[NSFileManager defaultManager] createDirectoryAtPath:documentPath
                              withIntermediateDirectories:NO 
                                               attributes:nil 
                                                    error:NULL];
    }

    return documentPath;

#else

    NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    return [documentPaths objectAtIndex:0];

#endif
}
...