2012-06-05 77 views
16

在我的應用程序,我必須存儲核心數據數據庫和音頻文件,所以我解碼,把它們放在文件目錄。 以防止它們進行備份,當我第一次啓動應用程序,我把不要備份標誌這樣不要備份到iCloud,但仍然被拒絕

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
[self addSkipBackupAttributeToItemAtURL:[self applicationDocumentsDirectory]]; 
} 
    - (NSURL *)applicationDocumentsDirectory 
{ 
    return [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject]; 
} 
- (BOOL)addSkipBackupAttributeToItemAtURL:(NSURL *)URL 
{ 
    if (&NSURLIsExcludedFromBackupKey == nil) { // iOS <= 5.0.1 
    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; 
    } else { // iOS >= 5.1 
    return [URL setResourceValue:[NSNumber numberWithBool:YES] forKey:NSURLIsExcludedFromBackupKey error:nil]; 
    } 
} 

但好像它不工作 - 我仍然得到拒絕:

我們發現您的應用不遵循iOS數據存儲指南,這是每個App Store評論指南所必需的。

特別是,我們發現在發佈和/或內容下載時,您的 應用程序存儲3.6 MB。要檢查您的應用程序有多少數據存儲:

  • 安裝並運行你的應用程序
  • 進入設置> iCloud中>存儲&備份>管理存儲
  • 如有必要,請點擊「顯示所有的應用程序」
  • 檢查您的應用程序的存儲

而另一個問題是,我只是不能檢查 - 我沒有看到我的應用程序在

設置> iCloud中>存儲備份&>管理存儲

也許問題是隻有5.0,我有種不值得考慮?

+10

爲什麼 '關閉' 投票?這個問題絕對不是偏離主題。 –

+1

我認爲這個鏈接http://www.icapps.be/prevent-app-rejection-caused-by-icloud-storage/會對你們有用。 – 2012-07-31 21:45:45

回答

9

問題與iOS 5.0,這個iOS的,你不應該把備份標誌是在IOS 5.0.1 我們也面臨着類似的問題,我們的應用程序中引入的不要,已被拒絕幾個不要備份標誌 次 因此,我們必須做一個變通處理不同iOSes 我們需要支持的iOS < 5.0的iOS 5.0和iOS> 5.0

所以接觸蘋果之後,我們沒有找到任何解決方案,除了對有不同的路徑不同的iOS

我們有這樣的功能:

+ (NSString*) savePath 
{ 
    NSString *os5 = @"5.0"; 

    NSString *currSysVer = [[UIDevice currentDevice] systemVersion]; 
    NSString *path = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"]; 

    if ([currSysVer compare:os5 options:NSNumericSearch] == NSOrderedAscending) //lower than 4 
    { 
     return path; 
    } 
    else if ([currSysVer compare:os5 options:NSNumericSearch] == NSOrderedDescending) //5.0.1 and above 
    {   
     return path; 
    } 
    else // IOS 5 
    { 
     path = [NSHomeDirectory() stringByAppendingPathComponent:@"Library/Caches"]; 
     return path; 
    } 

    return nil; 
} 

我們使用並仍然使用此功能。

請閱讀更多

的iOS 5.0

這是不可能排除在iOS 5.0從備份數據。如果您的 應用必須支持iOS 5.0,則需要將應用數據存儲在 緩存中,以避免備份數據。 iOS會在必要時從Caches目錄中刪除文件 ,因此如果數據文件被刪除,您的應用將需要 優雅地降級。

http://developer.apple.com/library/ios/#qa/qa1719/_index.html

+0

非常感謝您提供了一個很好的答案,但我認爲我只是將部署目標更改爲5.0.1,那樣做,對嗎? –

+1

是的,它會,即時我的情況,我不能這樣做,因爲我需要支持所有的iOS版本,你將不得不把它連接到5.0.1的最低ios版本 –

+0

我不理解這是如何符合蘋果的iCloud規則。這會爲兩個版本<5.0.1和版本> 5.0.1返回文檔文件夾的路徑。你是否也爲版本> 5.0.1設置了'NSURLIsExcludedFromBackupKey'? – Suz

相關問題