由于使用localStorage,iOS PhoneGap应用程序被拒绝

苹果刚刚拒绝了我提交的PhoneGap应用程序。 我在应用程序中利用HTML5 localStorage来保存下载的数据以进行caching: 2.23应用程序必须遵循iOS数据存储指南,否则将被拒绝

我很困惑,因为如果有什么我认为5.1中的localStorage实际上将数据保存在caching中,而不是在用iCloud [source]备份的地方。 这是我想要的行为 – 我不需要或希望数据被备份。

我错了还是苹果? PhoneGap应用程序可以做什么来保存这个caching的数据,而不会被违反?

编辑: PhoneGap 1.8.1如果有帮助。

事实certificate,我是对的,苹果是错的。 我确认我正在将所有内容正确存储在/ Caches目录中。 他们没有评论我的问题 – 只是批准了我的应用程序。

有两件事情我知道:

1)你的应用程序生成的文件(而不是用户使用你的应用程序的结果),如临时文本文件来存储variables的值,那么这些文件必须放在库/caching而不是文档目录中。

2)您还必须使用“skip-backup”属性标记文件以告知iCloud不要备份文件。

我想你可能会错过第二步。

我写了一个简单的MediaDirectory类,它可以快速地给出Library / Cache文件夹中文件的path,并添加跳过备份属性。

将文件保存到Libary / Cache文件夹后,只需执行如下操作即可:

[MediaDirectory addSkipBackupAttributeForFile:@"myTextFile.txt"]; 

这是全class的课程:

 // Header File // ---------------------------------------------------------------------- // This class takes a file name (including extension) and returns // the path to that file in the Library/Cache folder // ---------------------------------------------------------------------- #import <Foundation/Foundation.h> @interface MediaDirectory : NSObject +(NSString *) mediaPathForFileName:(NSString *) fileName; +(NSString *) mediaPathForFileName:(NSString *) fileName inSubDirectory:(NSString *) subDirectory; + (BOOL)addSkipBackupAttributeToFile:(NSString *) fileName; + (BOOL)addSkipBackupAttributeToFile:(NSString *) fileName inSubDirectory:(NSString *) subDirectory; @end // Implementation File #import "MediaDirectory.h" #include <sys/xattr.h> @implementation MediaDirectory +(NSString *) mediaPathForFileName:(NSString *) fileName { NSArray *directoryPaths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES); NSString *cachesDirectory = [directoryPaths objectAtIndex:0]; NSString *filePath = [NSString stringWithFormat:@"%@/%@", cachesDirectory, fileName]; return filePath; } // if an image needs to be stored in a sub folder called "images" +(NSString *) mediaPathForFileName:(NSString *) fileName inSubDirectory:(NSString *) subDirectory { NSArray *directoryPaths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES); NSString *cachesDirectory = [directoryPaths objectAtIndex:0]; NSString *filePath = [NSString stringWithFormat:@"%@/%@/%@", cachesDirectory, subDirectory, fileName]; return filePath; } //+ (BOOL)addSkipBackupAttributeToItemAtURL:(NSURL *)URL + (BOOL)addSkipBackupAttributeToFile:(NSString *) fileName { const char* filePath = [[self mediaPathForFileName:fileName] 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; } + (BOOL)addSkipBackupAttributeToFile:(NSString *) fileName inSubDirectory:(NSString *) subDirectory { const char* filePath = [[self mediaPathForFileName:fileName inSubDirectory:subDirectory] 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; } @end 

我刚刚提交的phonegap应用程序由于相同的原因被苹果拒绝,我只使用本地存储。

我已经重新提交在我的config.xml中设置下面的首选项

 <preference name="BackupWebStorage" value="none" /> 

我明白这将解决这个问题