2013-01-02 60 views
2

我正在開發我的第一個OS X應用程序,它將通過Mac App Store分發。在OS X上更新SQLite數據庫以防止它被覆蓋的地方?

該應用程序使用一個sqlite數據庫,我目前保持與其餘應用程序文件依賴關係相同的位置。

我正在使用Qt框架來開發應用程序。

保持在App Store規則的邊界內;

  • 我在哪裏可以找到數據庫文件,以便在應用程序更新期間不會覆蓋它?

  • 我該如何構造.app文件夾和所有依賴關係?

謝謝。

回答

2

你的問題意味着你正在寫入sqlite數據庫,這是一個壞主意,因爲應用程序將存儲在用戶可能沒有寫入權限的位置(/Applications)。

你應該做的是在第一次使用時(或者當你發現它不存在時)複製/創建數據庫到用戶可寫區域(應用程序的容器的Documents文件夾)並從那裏使用它。

編輯:爲了獲得文件目錄使用此代碼:

NSString *documentDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 

當應用程序是沙箱這會給你的應用程序容器Documents目錄,而不是用戶的文檔目錄的位置:

~/Library/Containers/com.yourdomain.yourapp/Data/Documents 
+0

Hello @trojanfoe。你的猜測是絕對正確的,那就是我要做的。我認爲蘋果的新App Store政策要求應用程序* sandboxed *沒有**訪問**到其他地方?所以基本上可以安全地將db等放到'Documents'中的應用程序創建的應用程序文件夾中? – Phil

+2

是的,儘管應用程序支持將比文檔更好。 – paulmelnikow

+0

@Phil請參閱我的編輯。正如noa指出應用程序支持可能是一個更好的地方,但是當應用程序被沙箱化時,它可以完全訪問它自己的容器,所以我不確定它非常重要(如果我錯了,請糾正我)。 – trojanfoe