由于“不备份”原因,苹果开发者拒绝iPhone应用程序。 现在我该怎么做?

申请因“不备份”原因被拒绝

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

 #import<sys/xattr.h> 

然后粘贴下面的function。

 - (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上重新上传我的应用程序吗?

我find了解决这个问题的办法。 我们不应该保留任何大的内存数据库。 为了消除这个问题,我删除了放在db.sqlite所有图像( db.sqlite是我的数据库名称)。 现在我做了一个新的db.sqlite 。 在这个我只保留图像名称,图像保存在我的项目文件夹。

如果您的应用程序中有大量的数据库,那么您将不得不遵循iCloud 。 现在苹果接受我的申请,并得到批准。 🙂

另请阅读 – 数据存储指南

  • 无法重新创build的关键数据(如设备损坏时将丢失的文档或用户特定数据)会进入<Application_Home> / Documents目录,除非另有说明,否则将由iCloud进行备份。

  • 可以重新创build的caching数据(如本地数据库或下载的图像)进入<Application_Home> / Library / Caches目录,不会被iCloud备份。 如果iOS的磁盘空间不足,可能会在某些时候清除此数据。

  • 在应用程序启动(例如临时文件高速caching)之间暂时不使用的临时数据进入<Application_Home> / tmp目录,不会被iCloud备份。 你应该永远记得自己删除存储在这里的文件。

  • 当设备处于离线状态(如飞行模式)时,离线数据需要保持不变,并进入<Application_Home> / Library / Private Documents目录,不会被iCloud备份,而且也不会被清除iOS在低磁盘空间的情况下。 有关iOS中的私人文件的更多信息。

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

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