2012-01-07 53 views
20

我的iPhone應用已經得到了最近拒絕&與下文提到的原因:我的iPhone應用程序得到了拒絕,爲此「我們發現,您的應用程序不遵循iOS的數據存儲的準則,...」

「我們發現您的應用不遵循iOS數據存儲指南,該指南不符合App Store評論指南。「

對於此應用我被存儲在/文件/目錄數據庫(源碼文件)爲iOS 5.0.1 &以上&爲iOS 5.0 &下面我用庫/高速緩存目錄的版本。

對於像我是從服務器下載PDF &藝術品的圖像的其它數據,接着我的相同方法如上述一樣: 的iOS 5.0.1 &隨後:保存這些數據到/文件/目錄 的iOS 5.0 &早期版本:將數據保存到庫/緩存目錄。

這種方法是否正確?

按照蘋果指導原則: 重要:新的「不備份」屬性僅適用於iOS 5.0.1或更高版本。在iOS 5.0及更早版本中,應用程序需要將其數據存儲在/ Library/Caches中以避免其備份。由於此屬性在舊系統上被忽略,因此您需要確保您的應用符合您的應用支持的所有iOS版本的iOS數據存儲指南。

對於iOS 5.0.1 &以後存儲的數據的「不備份」屬性分配也非常困惑。我需要爲哪些文件分配此標誌?我可以使用它的數據庫?

需要擺脫這些拒絕,因爲它發生了兩次。請提供一些存儲我的應用程序數據的指導。提前致謝。期待積極的迴應。

+0

您可以嘗試發送Marco Ament(Instapaper DM或tweet)。如果我是對的,他在不久之前就處理了這個問題。任何幫助鏈接 - http://www.marco.org/2011/10/13/ios5-caches-cleaning? – Bourne 2012-01-07 07:13:08

回答

17

檢查https://developer.apple.com/icloud/documentation/data-storage/

明確:

使用的數據這個屬性可以重建,但需要 甚至堅持低存儲的情況下爲您 應用程序的正常運行,或者因爲客戶期望它在離線使用期間可用。 此屬性適用於標記的文件,而不管它們在哪個目錄 中,包括Documents目錄。

存放在緩存文件夾,並設置donotbackup標誌,這將阻止文件的SQLite數據庫由緩存清理系統中刪除

- (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; 
} 

我在我的應用程序使用一個數據庫,並將其存儲在緩存文件夾(與上面的標誌設置),並獲得批准沒有問題。

此外,您可以將數據存儲在文檔目錄的子文件夾中,我相信這些文件夾不會被備份,但會持續存在。

+4

側重複:確保使用「com.apple.MobileBackup」而不是您自己的應用程序包ID。 – cynistersix 2012-01-13 16:54:56

+0

如果備份是用戶要求,你會怎麼做? – Bill 2012-07-07 12:25:11

+0

我鏈接到的頁面說明了一切,如果它是用戶生成的內容,那麼它應該進入/ Documents沒有上述標誌設置,這樣它將被備份到iCloud,任何其他應該去/ Library/Caches – 2012-07-07 15:51:08

6

我的一個朋友有同樣的問題。基本問題是您可能在應用程序文檔目錄中存儲大量數據。

iCloud在Apple實施後,Document目錄數據與iCloud Storage有某種關係。因此,Apple現在拒絕在文檔目錄中使用大量數據存儲的應用程序。

您需要將數據存儲在其他位置。存儲PDF &其他藝術作品文件在其他某個位置。

此鏈接可能會幫助你。

http://www.techotopia.com/index.php/Working_with_Directories_on_iOS_4_%28iPhone%29

我希望它會解決你的問題。

2

要解決Apple拒絕您的應用程序的應用程序不符合iOS數據存儲指南,請在您的應用程序中添加以下代碼。

- (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 
      NSError *error = nil; 
      // if you set YES in Resources value then iTune will not backup that file or folder. 
      // You set FALSE in Resources value then iTune will backup that file or folder. 
      [URL setResourceValue:[NSNumber numberWithBool:YES] forKey:NSURLIsExcludedFromBackupKey error:&error]; 
      return error == nil; 
     } 
} 

使用此方法(例)

NSString *defaultDBPath = [[NSBundle mainBundle] pathForResource:@"CDTDatabaseNew" ofType:@"sqlite"]; 
success = [fileManager copyItemAtPath:defaultDBPath toPath:dbPath error:&error]; 
NSURL *guidesURL = [NSURL fileURLWithPath:dbPath]; 
[self addSkipBackupAttributeToItemAtURL:guidesURL]; 

你當你創建或文檔目錄的文件複製到使用此方法。

注意: - Apple已更改數據存儲指南行,並且如果您在Document目錄中存儲任何內容,則必須正確使用上述代碼,不要錯過這部分代碼。

如果您沒有放置該代碼,應用程序將被拒絕。因此,現在,每當創建數據庫,將緩存圖像存儲在文檔目錄中時,每個人都必須添加代碼片段。 希望下次開始我不會因爲這個原因而拒絕應用程序。

相關問題