由于“不备份”的原因,Apple开发人员拒绝了iPhone应用程序。现在我该怎么做?

时间:2012-03-03 14:51:34

标签: iphone objective-c ios xcode

由于“不备份”原因导致申请被拒绝

我尝试了一件事来解决这个问题。我从Apple技术支持获得了一个小代码,并根据iOS guideLines在我的项目中使用了此代码。首先,我在appdelegate.m部分

中添加了一个头文件
#import<sys/xattr.h>    

然后粘贴以下功能。

- (BOOL)addSkipBackupAttributeToItemAtURL:(NSURL *)URL
{
    const char* filePath = [[URL path] fileSystemRepresentation];

    const char* attrName = "com.apple.MobileBackup";
    u_int8_t attrValue = 1;

    int result = setxattr(filePath, attrName, &attrValue, sizeof(attrValue), 0, 0);
    return result == 0;
}

完成启动后,将上述功能调用到我的appdelegate。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    // Override point for customization after application launch.
    self.viewController = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];
    self.window.rootViewController = self.viewController;
    [self.window makeKeyAndVisible];
    return YES;

    [self addSkipBackupAttributeToItemAtURL:[NSURL URLWithString:@"<Application_Home>/Library/Caches"]];
    [self addSkipBackupAttributeToItemAtURL:[NSURL URLWithString:@"<Application_Home>/tmp"]];
    [self addSkipBackupAttributeToItemAtURL:[NSURL URLWithString:@"<Application_Home>/Library/Private Documents"]];
}

现在我只想知道这是否正常。我可以在iTunes Connect上重新上传我的应用程序吗?

2 个答案:

答案 0 :(得分:3)

我找到了有关此问题的解决方案。我们不应该保留任何大型内存数据库。 为了解决此问题,我删除了db.sqlite中放置的所有图像(db.sqlite是我的数据库名称)。现在我做了一个新的db.sqlite。在这里我只保留了图像名称,图像保存在我的项目文件夹中。

如果您的应用程序中有大量数据库,则必须遵循iCloud。 现在Apple接受我的申请,并获得批准。 : - )

另请阅读此数据存储指南

  • 无法重新创建的关键数据(如文档或用户特定数据,如果设备损坏将丢失)进入&lt; Application_Home&gt; / Documents目录,并由iCloud备份,除非另有说明指定。

  • 可以重新创建的缓存数据(例如本地数据库或下载的图像)会进入&lt; Application_Home&gt; / Library / Caches目录,并且不会被iCloud备份。如果iOS磁盘空间不足,则可能会在某些时候清除此数据。

  • 在应用程序启动之间暂时且未使用的临时数据(例如临时文件缓存)会进入&lt; Application_Home&gt; / tmp目录,并且不会由iCloud备份。你应该永远记得自己删除存储在这里的文件。

  • 当设备离线(例如飞行模式)时,需要持久且可用的离线数据进入&lt; Application_Home&gt; / Library / Private Documents目录,不会被iCloud备份,但是在磁盘空间不足的情况下,它也不会被iOS清除。有关iOS中私人文档的更多信息。

答案 1 :(得分:0)

您应该在创建文件夹的位置设置属性。如果您尝试在didFinishLaunching期间设置属性并且文件夹尚未存在(即首次启动时),那么一旦创建它们,它们就不会设置属性。它会在您下次启动应用时正确设置,但您仍然会在第一次和第二次运行之间创建备份。

此外,Library / Caches文件夹会自动从我认为的备份中排除。

相关问题