2012-09-05 2 views
14

Apple이 제출 한 PhoneGap 앱을 방금 거부했습니다. 앱에서 HTML5 localStorage를 사용하여 캐싱 목적으로 다운로드 한 데이터를 저장합니다. 2.23 앱은 iOS 데이터 저장 가이드 라인을 준수해야하며 그렇지 않으면 거부됩니다..iOS PhoneGap 앱이 localStorage를 사용하여 거부되었습니다.

5.1의 localStorage가 실제로 캐시에 데이터를 저장하고 iCloud로 백업되는 장소가 아닌 것으로 생각하기 때문에 심각하게 혼란 스럽습니다. [source]. 이것이 내가 원하는 행동입니다. 데이터를 백업 할 필요가 없거나 백업하지 않아도됩니다.

내가 잘못 했나요? 아니면 Apple입니까? PhoneGap 앱에서 위반하지 않고이 캐시 된 데이터를 저장하려면 어떻게해야합니까?

편집 : PhoneGap 1.8.1 도움이 될 경우.

+2

나는 당신이 취할 앱의 샌드 박스의 스냅 샷을 다운로드 엑스 코드를 사용하는 것이 좋습니다 것입니다 어떤 파일과 디렉토리가 생성되는지 살펴보십시오. 아마 PhoneGap은 뭔가 펑키하고 있습니다. 또한 앱의 시뮬레이터 디렉토리를 볼 수도 있습니다. –

+0

그리고 많은 캐시/구현 세부 정보 디렉토리가 숨겨져 있기 때문에 숨김 파일을 표시해야합니다 (예 : Core Data 외부 리소스 저장소). –

+0

시뮬레이터 디렉토리를 보면 "캐시"디렉토리 (Applications/app/Library/Caches)에 file__0.localstorage가 표시됩니다. 그래서 그것은 그것이 "올바른"장소에 저장되었다는 나의 생각을 재확인합니다. –

답변

11

그것은 내가 잘했고 밝혀 애플은 틀렸다. 나는/Caches 디렉토리에 모든 것을 적절하게 저장하고 있음을 확인했다. 그들은 내 질문에 대해 언급하지 않았습니다. 방금 내 앱을 승인했습니다.

+0

동일한 거절. 아이폰은 또한 내 애플 리케이션을 거부합니다. 내가 무엇을 할 수 있을지 ??? – chhameed

+1

localStorage 만 사용하는 경우 검토자를 가리켜 야합니다 (및/또는이 스레드로 보내십시오!). –

2

내가 알고 있는데 두 가지가 있습니다

당신의 응용 프로그램에 의해 생성되는

1) 파일 (및 변수의 값을 저장하기 위해 임시 텍스트 파일로 응용 프로그램을 사용하여 사용자)의 결과가 아니라, 이 파일은 Document 디렉토리 대신 Library/Cache에 저장해야합니다.

2) iCloud가 파일을 백업하지 않도록 파일에 "skip-backup"속성을 표시해야합니다.

난 당신이 내가 빨리 도서관/캐시 폴더에있는 파일에 나에게 경로를 제공하고 또한 스킵 백업 속성을 추가하는 간단한 MediaDirectory 클래스를 썼다

2 단계를 누락 될 수 있습니다 생각합니다. 당신이 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 앱이 동일한 이유로 사과에 의해 거부되었으며 localstorage 만 사용하고 있습니다.

내 config.xml 파일에서 설정 한 다음 기본 설정으로 다시 제출 한 나는이 문제를 해결할 수 이해

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

관련 문제