申请因“不备份”原因被拒绝
我尝试了一件事来消除这个问题。我从 Apple 技术支持处获得了一小段代码,并根据 iOS 指南在我的项目中使用了该代码。首先,我在 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重新上传我的申请吗还是不?
最佳答案
我已经找到了有关此问题的解决方案。我们不应该保留任何大内存数据库。
为了解决这个问题,我删除了放置在 db.sqlite
中的所有图像。 ( db.sqlite
是我的数据库名称)。现在我做了一个新的db.sqlite
。在这里我只保留了图像名称,图像保存在我的项目文件夹中。
如果您的应用程序中有大量数据库,那么您必须遵循 iCloud 。 现在Apple接受了我的申请,并且获得了批准。 :-)
另请阅读此内容 - 数据存储指南
无法重新创建的关键数据(例如,如果设备损坏就会丢失的文档或用户特定数据)将进入
/Documents 目录,并由 iCloud 备份,除非另有说明. 可以重新创建的缓存数据(例如本地数据库或下载的图像)会进入
/Library/Caches 目录,并且 iCloud 不会备份。如果 iOS 磁盘空间不足,这些数据可能会在某个时候被清除。 在应用程序启动之间暂时且未使用的临时数据(例如临时文件缓存)会进入
/tmp 目录,并且 iCloud 不会备份。您应该始终记住自己删除存储在此处的文件。 需要在设备离线时持久且可用的离线数据(例如飞行模式),会进入
/Library/Private Documents 目录,并且不会由 iCloud 备份,但也会在磁盘空间不足的情况下,iOS 不会清除它。有关 iOS 中的私有(private)文档的更多信息。
关于iphone - 由于 "do not back up"原因,苹果开发者拒绝了 iPhone 应用程序。现在我该怎么做?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9547027/