2012-04-26 84 views
0

我的應用剛剛被蘋果拒絕,原因如下:單獨的用戶

2.23

我們發現您的應用不符合iOS的數據存儲 準則,這是根據用戶要求App Store評論指南。

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

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

iOS的數據存儲準則表明,只有該 用戶創建使用你的應用程序,例如,文檔,新文件,內容編輯,電子tc。, 可能存儲在/ Documents目錄中 - 並由iCloud備份。

我所做的是,我在大約10 MB的資源文件夾中提供數據庫,並在初始啓動時將該數據庫複製到庫路徑(請參閱下面的代碼)。當在設備設置中啓動後查看我的應用程序設置時,它實際上說,文檔&數據文件夾包含此10 MB數據。應用程序在安裝完成後不再需要該數據庫,因此我只是嘗試從資源文件夾中刪除數據庫,而使用removeItemAtPath完成複製時。但似乎有一個許可問題。

在這裏,我用填充在最初啓動數據庫的代碼:

// Copy the database from the app resource, if it is not already existing in the library path 

- (void) copyDatabaseIfNeeded { 

NSFileManager *fileManager = [NSFileManager defaultManager]; 
NSError *error; 

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory , NSUserDomainMask, YES); 
NSString *documentsDir = [paths objectAtIndex:0]; 
NSString *dbPath = [documentsDir stringByAppendingPathComponent:@"abiliator.sqlite3"]; 

BOOL success = [fileManager fileExistsAtPath:dbPath]; 

if(!success) { 

    NSString *defaultDBPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"abiliator.sqlite3"]; 
    success = [fileManager copyItemAtPath:defaultDBPath toPath:dbPath error:&error]; 

    if (!success) { 
     NSLog(@"Failed to create writable database file with message '%@'.", error); 
    } 
    else { 
     success = [fileManager removeItemAtPath:defaultDBPath error:&error]; 
     if (!success) { 
      NSLog(@"Failed to remove the source database file with message '%@'.", error); 
     } 

    } 
} 
} 

研究有關問題小時後,我實際上是非常肯定的,那我沒有做錯什麼都。根據Apple文檔,庫路徑是存儲可更新文件的位置。特別是如果數據要被備份和隱藏/不向用戶公開。這兩種情況都適用於我的應用程序,我希望數據可以備份,而且我不希望用戶看到我的數據庫。所以圖書館似乎完全正確。我唯一能想到的就是資源目錄中數據庫的大小。我可以通過壓縮來減少它。但是有什麼限制?審稿人和文檔都不能告訴我任何具體的內容。

那麼究竟是什麼錯誤?如果資源目錄不適合存儲我的源數據庫以進行初始設置,那麼可以在我的項目中使用哪個其他目錄?

非常感謝任何提示。 勒

+0

ios 5中刪除方法的一些變化。我認爲你刪除舊的風格。請參閱:http://developer.apple.com/library/ios/#releasenotes/General/iOS50APIDiff/index.html – Hector 2012-04-26 04:18:28

+0

謝謝,但我必須使用舊式的removeItemAtPath,因爲我支持iOS 4.2及更高版本。但是,我想由於某種原因,Apple設計這些源文件的位置是隻讀的。 – renesteg 2012-04-26 07:16:39

回答

0

得到了蘋果提的是,我應該給用戶的數據存儲在不同的數據庫比我提供的數據答覆。雖然我不是那個非常熱衷,因爲它增加了代碼的複雜性不必要的和我的應用程序,用戶數據可以得到一個比我送反正大,我想確保,我得到正確的解決辦法的,現在。 我打算實現的是2個目錄:/ Library/UserDB和/ Library/AppDB。AppDB將包含交付的數據庫,並且UserDB將只包含用戶數據,我會將AppDB Dir標記爲非備份。猜猜這會讓蘋果開心,讓我的應用獲得批准,對嗎?在開始實施之前,請欣賞關於該方法的任何意見。