2012-09-05 11 views
14

Appleは提出したPhoneGapアプリを拒否しました。私は、アプリケーションのHTML5 localStorageを使用して、キャッシュ目的でダウンロードしたデータを保存します。2.23アプリはiOSデータ保存ガイドラインに従う必要があります。そうしないと、は拒否されます。iOS PhoneGapアプリはlocalStorageを使用して拒否されました

5.1のlocalStorageが実際にデータをキャッシュに保存していて、iCloud [source]でバックアップされた場所に保存していないと思ったら、私は真剣に混乱しています。これは私が望むふるまいです。データをバックアップする必要はありません。

私は間違っているのですかAppleですか? PhoneGapアプリで、このキャッシュされたデータを違反せずに保存するにはどうすればよいですか?

編集: PhoneGap 1.8.1が役立ちます。

+2

私はあなたが取るために、アプリケーションのサンドボックスのスナップショットをダウンロードするにはXcodeのを使うことをお勧めどのファイルとディレクトリが作成されているかを調べます。おそらく、PhoneGapは何か不気味なことをしています。また、アプリのSimulatorディレクトリも見ることができます。 –

+0

キャッシュ/実装の詳細ディレクトリの多くが隠されているため、隠しファイルを表示するようにしてください(例:Core Data外部リソースストレージ)。 –

+0

シミュレータディレクトリを見ると、 "キャッシュ"ディレクトリ(Applications/app/Library/Caches)にファイル_0.localstorageが表示されます。それは、それが「正しい」場所に保存されているという私の考えを再確認するものです。 –

答えて

11

それは私が正しかったと判明しますアップルは間違っていた。/Cachesディレクトリにすべてを正しく格納していることを確認しました。彼らは私の質問にコメントしていない - ちょうど私のアプリを承認した。

+0

同じ拒否。私のアプリも拒否します。私に何ができる ??? – chhameed

+1

localStorageだけを使用している場合は、それを査読者に指摘する必要があります(および/またはこのスレッドに送信してください)。 –

2

私が知っ二つのものがあります。

1)、このような変数の値を格納するための一時的なテキストファイルとしてあなたのアプリ(とないあなたのアプリを使用するユーザの結果によって生成されたファイル)は、これらのファイルはDocumentディレクトリではなくLibrary/Cacheに配置する必要があります。

2)iCloudにファイルをバックアップしないように指示するには、ファイルに「skip-backup」属性を付ける必要があります。

私はあなたがステップ2

を逃すかもしれないと思う私はすぐに私のライブラリ/キャッシュフォルダ内のファイルへのパスを与え、また、スキップバックアップ属性を追加し、簡単なMediaDirectoryクラスを書きました。あなたはLibary /キャッシュフォルダにファイルを保存した後

は、単にこのような何かを行く:ここ

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

がいっぱいでクラスです:

// 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 
1

私が提出したphonegapアプリは、同じ理由からappleによって拒否されました。私はlocalstorageのみを使用しています。

私はconfig.xmlで設定され、次の優先順位を再提出している私は、この問題を解決します理解

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

関連する問題