2014-07-15 11 views
-2

iOS 데이터 저장 가이드 라인 문제를 해결하기 위해 stackoverflow 관련 기사를 읽었습니다.앱이 ios 데이터 저장 가이드 라인을 준수해야합니다. 그렇지 않으면 큰 데이터베이스 파일로 인해 거부됩니다.

이미 유사한 기사가 많이 있지만 iOS를 처음 접하는 것이 좋습니다. 누군가이 코드를 통해이 오류를 제거하고 iOS 리뷰 팀이 내 앱을 수락하고 앱 스토어에 게시 할 수 있도록 내가 추가하거나 제거해야하는 점을 알려 주시기 바랍니다.

Reasons 

2.23 : 우리가 발견 한 아이폰 OS 데이터 보관 지침하거나 2.23

을 거부됩니다를 따라야 어플 그 당 요구되는 아이폰 OS 데이터 저장 가이드 라인을 따르지 않는 앱 앱 스토어 리뷰 가이드 라인.

특히 우리는 실행 및/또는 콘텐츠 다운로드시 앱이 53.51MB를 저장한다는 사실을 발견했습니다. , 저장

  • 필요한 경우 관리> 앱에서 설정> iCloud를> 저장 & 백업에
  • 이동 설치 및 실행

    • "를 모두 표시 애플 리케이션"
    • 을 누릅니다 : 앱이 저장되는 데이터의 양을 확인하려면 앱의 저장

    아이폰 OS 데이터 보관 지침이 사용자가 귀하의 예를 들어, 응용 프로그램, 문서, 새 파일을 사용하여 생성 콘텐츠 만이 편집을 나타냅니다, 전자를 확인

  • tc., 은 iCloud에서 백업해야합니다.

    앱에서 사용하는 임시 파일은/tmp 디렉토리에만 저장해야합니다. 사용자가 앱을 종료 할 때이 위치에 저장된 파일 을 삭제해야합니다.

    앱을 제대로 작동 시키거나 고객이 오프라인 을 사용할 수 있다고 기대하기 때문에 데이터를 재생성 할 수는 있지만 계속 유지해야하는 데이터는 "백업하지 않음"속성으로 표시해야합니다. NSURL 개체의 경우 NSURLIsExcludedFromBackupKey 특성을 추가하여 해당 파일이 백업되지 않도록하십시오. CFURLRef 개체의 경우 해당 kCFURLIsExcludedFromBackupKey 특성을 사용하십시오.

    자세한 내용은 기술 Q & A를 참조하십시오. 1719 : 파일이 iCloud 및 iTunes에 백업되지 않도록하려면 어떻게해야합니까?

  • 여기 내 코드가 있습니다. 자원 가 응용 프로그램 데이터를 모두 백업에서 제외되는지 여부를 결정하기위한

    - (void) copyDatabaseIfNeeded { 
    
    //Using NSFileManager we can perform many file system operations. 
    NSFileManager *fileManager = [NSFileManager defaultManager]; 
    NSError *error; 
    
    NSString *dbPath = [self getDBPath]; 
    BOOL success = [fileManager fileExistsAtPath:dbPath]; 
    
    if(!success) { 
    
        NSString *defaultDBPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"shifa.sqlite"]; 
        success = [fileManager copyItemAtPath:defaultDBPath toPath:dbPath error:&error]; 
    
    
        //Exclude DB Frome Backup At iCloud 
        NSURL * fileURL; 
        fileURL = [ NSURL fileURLWithPath: defaultDBPath]; 
        if ([ fileURL setResourceValue: [ NSNumber numberWithBool: YES ] forKey: NSURLIsExcludedFromBackupKey error: nil ]){ 
         // //DLog(@"DataBase Not Backedup to iCloud"); 
        }else{ 
         ////DLog(@"Error copying the file"); 
        } 
    
    
        if (!success) 
         NSAssert1(0, @"Failed to create writable database file with message '%@'.", [error localizedDescription]); 
    
    
         } 
        } 
    
    
    
        - (NSString *) getDBPath 
        { 
         NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory , NSUserDomainMask, YES); 
         NSString *documentsDir = [paths objectAtIndex:0]; 
         DLog(@"dbpath : %@",documentsDir); 
         return [documentsDir stringByAppendingPathComponent:@"shifa.sqlite"]; 
        } 
    
    +0

    iOS 데이터 스토리지 가이드 라인을 읽었습니까? https://developer.apple.com/icloud/documentation/data-storage/index.html –

    +0

    또는 귀하를 안내 한 기술 Q & A를 읽으셨습니까? https://developer.apple.com/library/ios/qa/qa1719/_index.html 여기에 질문이 없습니다. – nhgrif

    +0

    getDBPath에서 NSDocumentDirectory를 NSLibraryDirectory로 변경하면 문제가 없다고 생각합니다. 그러나 그들이 말했듯이, 그 문서들을 읽으십시오. – JScarry

    답변

    1

    NSURL Class Reference

    에서 NSURLIsExcludedFromBackupKey

    키, 부울 의 NSNumber 개체 (읽기 - 쓰기)로 돌아왔다.이 속성을 사용하여 백업에 필요하지 않은 캐시 및 기타 앱 지원 파일을 제외 할 수 있습니다. 일반적으로 사용자 문서에 대해 수행 된 일부 작업으로 인해 에 대한이 속성이 false로 재설정됩니다. 따라서 사용자 문서에서이 속성을 사용하지 마십시오.

    그래서이 속성은 false로 재설정되고 존중되지 않습니다. Apple이 제안한대로 데이터베이스를 캐시에 저장하는 것을 고려하십시오. 이와 같이 :

    - (NSString *)getDBPath 
    { 
        NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory , NSUserDomainMask, YES); 
        NSString *documentsDir = [paths objectAtIndex:0]; 
        DLog(@"dbpath : %@",documentsDir); 
        return [documentsDir stringByAppendingPathComponent:@"shifa.sqlite"]; 
    }