未创建Cydia App Documents文件夹

时间:2012-01-30 14:41:31

标签: objective-c ios core-data jailbreak

我一直致力于通过Apple的“渠道”完美运行的Core Data iOS应用程序 - iOS模拟器& Xcode安装,但当我尝试手动将其安装到设备上时,应用程序崩溃了。我的主要目标是将应用程序放在Cydia上。

A guide to preparing an app for Cydia 我读了这篇文章,我在底部说了

  

Appstore应用程序具有由安装过程创建的Documents文件夹。越狱应用程序没有。应用程序可以创建自己的文件夹。如果您需要此类型的文件夹,则必须在applicationDidFinishLaunching函数中使用简单的mkdir命令创建此文件夹。只需添加一个简单的函数:mkdir(“/ var / mobile / Library / YOURAPPNAME”,0755);如果该文件夹已存在,则不会造成任何损害。您希望这样做是因为安装过程以root用户身份运行,应用程序以用户移动方式运行。如果Cydia为您执行此操作,则该文件夹将具有不正确的权限。

我不太了解Core Data的工作原理,但我知道Core Data“数据库”存储在Documents文件夹中,我现在相信这是我的应用程序崩溃的原因。

mkdir函数在创建Documents文件夹时不起作用。

如何创建Documents文件夹,以及如何使用Core Data,确保从我创建的文件夹加载数据库?

提前致谢

1 个答案:

答案 0 :(得分:5)

很可能你仍然在创建和加载CoreData数据库文件的方法中使用AppStore友好文档路径(我认为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
}