2012-09-05 4 views
14

kullanımının reddetmiştir. 2.23 Uygulamalar iOS Veri Depolama Kılavuzuna uymak gerekir aksi halde reddedilecektir: Ben önbelleğe alma amaçlı indirilen verileri kaydetmek için uygulamadaki HTML5 localStorage kullanmaktadır.iOS PhoneGap uygulaması nedeniyle Elma sadece Gönderdiğim PhoneGap uygulaması reddedilen localStorage

Yerelde, 5.1'de localStorage'ı düşündüğüm bir şey aslında veriyi önbellekte kaydeder ve iCloud [source] ile yedeklenen bir yerde DEĞİL. İstediğim davranış budur - verilere ihtiyacım yok veya ihtiyacım yok.

Yanlış mıyım veya Apple mı? Bu önbelleğe alınmış verileri ihlal edilmeden kaydetmek için PhoneGap uygulamasında ne yapabilirim?

Düzenleme: PhoneGap 1.8.1 Eğer yardımcı olur.

+2

Sana almaya uygulamanızın kum havuzu bir anlık indirmek için Xcode kullanmak öneririm Hangi dosya ve dizinlerin oluşturulduğuna bir bakın. Belki PhoneGap korkak bir şey yapıyor. Ayrıca uygulamanın simülatörüne de bakabilirsin. –

+0

Ve gizli dosyaları gösterdiğinizden emin olun çünkü birçok önbellek/uygulama ayrıntısı dizini gizlenmiştir (örn: Çekirdek Verileri harici kaynak depolama alanı). –

+0

Simülatör dizinine baktığımda, "Caches" dizininde bir file__0.localstorage (Uygulamalar/uygulama/Kütüphane/Önbellekler) gösterir. Böylece bu, "doğru" yerde saklandığına dair fikrimi yeniden doğrular. –

cevap

11

Ben haklıydım ve çıkıyor Apple yanılmıştı. Her şeyi/Caches dizininde düzgün bir şekilde sakladığımı doğruladım. Soruma yorum yapmadılar. Uygulamamı onaylamadım.

+0

aynı reddetme. Iphone ayrıca uygulamamı reddediyor. ne yapabilirim ??? – chhameed

+1

Yalnızca localStorage kullanıyorsanız, bunu gözden geçiriciye yönlendirin (ve/veya bunları bu konuya gönderin!) –

2

ben farkındayım iki şey vardır:

uygulamanızın ürettiği edilir

1) Dosyalar (ve böyle bir değişkenin değerini depolamak için geçici metin dosyaları olarak uygulamayı kullanarak kullanıcının) değil bir sonucudur, daha sonra bu dosyalar Belge dizini yerine Kitaplık/Önbellek içine yerleştirilmelidir.

2) Ayrıca yedekleme değil dosyayı iCloud anlatmak için bir "atlama-backup" özelliğiyle bir dosyayı işaretlemeniz gerekir.

Sana hızla Library/Önbellek klasöründeki dosyalar bana yol veriyor ve aynı zamanda atlama yedekleme özelliğini eklemek basit MediaDirectory sınıf yazdı

adım 2. eksik olabilir düşünüyorum. Eğer Libary/Önbellek klasörüne Dosyanızı kaydettikten sonra

, sadece böyle bir şey gidin: Burada

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

tam sınıf var:

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

Sadece aynı nedenlerden dolayı elma tarafından reddedildi gönderilen bir PhoneGap uygulaması ve sadece localStorage kullanıyorum.

benim config.xml'de set şu tercihle yeniden gönderdiniz bu sorunu çözer anlıyorum

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