14

Apple は、私が提出した PhoneGap アプリを却下しました。アプリで HTML5 localStorage を使用して、キャッシュ目的でダウンロードしたデータを保存します: 2.23 アプリは iOS データ ストレージ ガイドラインに従う必要があります

5.1 の localStorage は実際にはデータをキャッシュに保存し、iCloud [ソース]でバックアップされる場所には保存しないと思っていたので、私はひどく混乱しています。これは私が望んでいる動作です。データをバックアップする必要がないか、バックアップしたくありません。

私は間違っていますか、それともアップルですか?このキャッシュされたデータを違反せずに保存するには、PhoneGap アプリで何ができますか?

編集:それが役立つ場合はPhoneGap 1.8.1。

4

3 に答える 3

11

私が正しく、Apple が間違っていたことが判明しました。/Caches ディレクトリにすべてが正しく格納されていることを確認しました。彼らは私の質問にコメントしませんでした - 私のアプリを承認しただけです。

于 2012-09-07T17:02:09.480 に答える
2

私が認識していることが2つあります。

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

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

ステップ2を見逃している可能性があると思います。

Library/Cache フォルダー内のファイルへのパスをすばやく取得し、スキップ バックアップ属性を追加する単純な MediaDirectory クラスを作成しました。

ファイルを Libary/Cache フォルダーに保存したら、次のようにします。

[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
于 2012-09-06T06:10:30.103 に答える
1

送信したばかりの phonegap アプリは、同じ理由で Apple によって拒否されました。私は localstorage のみを使用しています。

config.xml に次の設定を設定して再送信しました

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

これで問題が解決することを理解しています

于 2014-11-17T16:18:24.577 に答える