2011-11-11 3 views
4

길을 apple storage guidelines 내 문서 디렉토리 (파일, 데이터베이스 및 일종의 애플 리케이션 관련 물건)에서 유지하는 데이터의 대부분 때문에 나를 위해 더 많은 문제를 만들고 있습니다. 최근에 나는 이진 파일을 업로드iCloud에서 앱을 차단하는 백업

내가 사용 1.can :이 거부 사과는 내가

- (NSString *)applicationDocumentsDirectory { 
NSString *documentPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]; 
NSURL *pathURL= [NSURL fileURLWithPath:documentPath]; 
[self addSkipBackupAttributeToItemAtURL:pathURL]; 
return documentPath; 

} 

- (BOOL)addSkipBackupAttributeToItemAtURL:(NSURL *)URL 
{ 
const char* filePath = [[URL path] 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; 
} 

내 질문 아래에로 코드를 변경하기 위하여려고하고이 시점에 따라 나에게 보고서 Apple rejection report 을 제공 한 앱 스토어에 파일을 addSkipBackupAttributeToItemAtURL : 문서에 직접적으로 메서드 디렉토리에있는 모든 파일에 대해 iCloud 백업을 사용하십시오.

2. 내 문서 디렉토리에 포함되지 않은 "백업하지 않음"속성으로 인해 내 마지막 바이너리가 거부 된 경우 응용 프로그램 저장소에서 승인 할 수있는 코드로 충분합니다.

+0

저도 같은 문제가있어. 내 응용 프로그램은 동일한 문제로 인해 거부됩니다. 파일 위치를 라이브러리 경로로 변경 하시겠습니까? 아니면 "백업하지 마십시오"? – Devang

+0

장치 캐시 및 임시 파일의 공간이 부족하여 딜레마 문제가 발생합니다. 전체 응용 프로그램이 문서 디렉토리에 종속됩니다 .ios5를 제외한 모든 버전에서 "백업하지 마십시오"를 사용하고 있습니다. .0.i 며칠 더 생각하고 싶어. – ajay

+0

내 앱이 다시 거부되었습니다. iCloud 때문에. 내 폴더 디렉토리를 라이브러리 경로로 변경하고 "백업하지 마십시오"라고 표시했습니다. 라이브러리 디렉토리에 일부 데이터를 저장하고 있지만 마크 업하지는 않습니다. – Devang

답변

1

전체 폴더를 백업하지 않으려면이 속성을 폴더로 설정할 수 있어야합니다.

그러나 전체 문서 폴더에서이 작업을 수행하는 것이 좋은 방법 일 수 있습니다. 우선이 모든 상황에서 앱을 백업 한 콘텐츠가 없으므로 앱을 바닐라 상태로 복원 할 수 있습니다. 나는 또한 이것이 "애플이 의도 한대로"가 아니라 애플의 거부 (항상 추측)로 이어질 수 있다고 상상할 수도있다. 가능하다면, 백업되지 않은 콘텐츠에 대한 하위 폴더를 문서 디렉토리에 만들고 거기에 모든 것을 넣을 것입니다. 저장소에 이미이 응용 프로그램의 버전이있는 경우 마이그레이션 코드가 필요할 수 있습니다.

저장 용량 지침에 따라 Documents 디렉토리에 사용자가 작성한/다시 작성할 수없는 콘텐츠를 저장할 수 있으며 다운로드 한 콘텐츠 등을 캐시 디렉토리에 표시 할 수만 있습니다 (예 : 사용자는이 콘텐츠를 오프라인에서 사용할 수 있기를 기대합니다.)

+0

당신의 빠른 재생 주셔서 감사합니다. 나는 폴더를 만들고 그 안에 모든 내 파일을 놓으려고 노력할 것입니다. 나는 "백업하지 마십시오"속성을 제공 할 것입니다. – ajay

0

이 기능을 사용

-(BOOL)addSkipBackupAttributeToItemAtURL:(NSURL *)URL 
{ 
const char* filePath = [[URL path] fileSystemRepresentation]; 
const char* attrName = "com.apple.MobileBackup"; 
if (&NSURLIsExcludedFromBackupKey == nil) { 
    // iOS 5.0.1 and lower 
    u_int8_t attrValue = 1; 
    int result = setxattr(filePath, attrName, &attrValue, sizeof(attrValue), 0, 0); 
    return result == 0; 

} 
else { 
    // First try and remove the extended attribute if it is present 
    int result = getxattr(filePath, attrName, NULL, sizeof(u_int8_t), 0, 0); 
    if (result != -1) { 
     // The attribute exists, we need to remove it 
     int removeResult = removexattr(filePath, attrName, 0); 
     if (removeResult == 0) { 
      NSLog(@"Removed extended attribute on file %@", URL); 
     } 
    } 

    // Set the new key 
    NSError *error = nil; 
    [URL setResourceValue:[NSNumber numberWithBool:YES] forKey:NSURLIsExcludedFromBackupKey error:&error]; 
    return error == nil; 
} 
} 

이 implemeted됩니다 code.thanks

관련 문제