将用户与应用程序数据库分开

时间:2012-04-26 01:18:08

标签: iphone large-data

我的应用程序刚被Apple拒绝,原因如下:

  

2.23

     

我们发现您的应用不遵循iOS数据存储   根据App Store审核指南要求的指南。

     

特别是,我们发现在发布和/或内容下载时,您的   应用商店10.3 MB。要检查应用存储的数据量:

     
      
  • 安装并启动您的应用
  •   
  • 转到设置> iCloud>存储&备份>管理存储
  •   
  • 如有必要,请点按“显示所有应用”
  •   
  • 检查应用的存储空间
  •   
     

iOS数据存储指南表明只有内容即   用户使用您的应用创建,例如文档,新文件,编辑等,   可以存储在/ Documents目录中 - 并由iCloud备份。

我所做的是,我在资源文件夹中提供大约10 MB的数据库,并在初始启动时将该数据库复制到库路径(请参阅下面的代码)。在设备设置中启动后查看我的应用设置时,它实际上是说,文档& data文件夹包含这10 MB的数据。安装后,应用程序不再需要该数据库了,所以我只是尝试从资源文件夹中删除数据库,当使用removeItemAtPath完成复制时。但似乎存在许可问题。

这里是我在初次启动时用来填充数据库的代码:

// Copy the database from the app resource, if it is not already existing in the library path

- (void) copyDatabaseIfNeeded {

NSFileManager *fileManager = [NSFileManager defaultManager];
NSError *error;

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory , NSUserDomainMask, YES);
NSString *documentsDir = [paths objectAtIndex:0];
NSString *dbPath = [documentsDir stringByAppendingPathComponent:@"abiliator.sqlite3"];

BOOL success = [fileManager fileExistsAtPath:dbPath]; 

if(!success) {

    NSString *defaultDBPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"abiliator.sqlite3"];
    success = [fileManager copyItemAtPath:defaultDBPath toPath:dbPath error:&error];

    if (!success) {
        NSLog(@"Failed to create writable database file with message '%@'.", error);
    }
    else {
        success = [fileManager removeItemAtPath:defaultDBPath error:&error];
        if (!success) {
            NSLog(@"Failed to remove the source database file with message '%@'.", error);
        }

    }
}   
}

在研究了几个小时之后,我确实非常肯定,我根本没有做任何错误。库路径是根据Apple文档存储可更新文件的位置。特别是如果想要备份和隐藏/不向用户公开数据。两者都是我的应用程序的情况,我希望备份数据,我不希望用户看到我的数据库。所以图书馆似乎完全正确。我唯一能想到的是资源目录中数据库的大小。我可以通过拉链来减少它。但是有什么限制?审稿人和文档都没有告诉我任何具体的内容。

那究竟是什么错?如果资源目录不是存储我的源数据库以进行初始设置的正确位置,那么我可以在项目中使用哪个其他目录?

非常感谢任何提示。 勒

1 个答案:

答案 0 :(得分:0)

得到了Apple的回复,提到我应该将用户数据存储在与我提供的数据不同的数据库中。虽然我不是很热衷于此,因为它增加了代码复杂性,并且我的应用程序中的用户数据可能比我提供的更大,我想确保,我现在得到正确的解决方案方法。 我打算实现的是2个目录:/ Library / UserDB和/ Library / AppDB。 AppDB将包含提供的数据库,而UserDB仅包含用户数据,我会将AppDB目录标记为非备份。猜猜这会让Apple开心并让我的应用获得批准,我是对的吗?在我开始实施之前,对此方法的任何意见表示赞赏。