在 Mac 上開發應用程式,如何設計資料存放路徑

Mac的應用程式存放自己的資料的路徑一般是在 /Library/Application Support/ 目錄之下,例如 /Library/Application Support/CBETA/,其中CBETA是應用程式的名字。

而每個使用者的家目錄裡面也會有一個對應的路徑 ~/Library/Application Support/CEBTA/,這些路徑可以在Mac應用程式裡面使用Core Services提供的NSSearchPathForDirectoriesInDomains函式得到,這目錄的路徑是在程式中透過系統取得的,並不是直接寫死,不過若不是以Objective-C開發的Mac應用程式可能不一定有這個函式。

若是資料路徑是要求使用者自行放置,那可能不適合上例。關於放置的路徑,我的建議如下:

在系統裡面的話建議放在 /Library/CBETA/

使用者個人的家目錄裡面的話則建議 ~/Library/CBETA/

( ~ 代表家目錄的路徑,如 /Users/ray )

/System/Library/ 裡面放的是系統運作的重要檔案,例如函式庫及各種Frameworks,一般不會主動修改這個目錄裡的東西,所以我個人感覺放裡面不是很合適。

而/Library則是放各應用程式共通的設定以及資料,感覺會比 /System/Library 合適。

在家目錄的部分則是保持一致,放在 ~/Library 裡面。

的確在中文介面上,Mac的Library資料夾會是中文名稱「資源庫」,在其它語言介面也會是該語言相應的名字。

設定檔要放在哪裡?

Mac的底層是基於一個Unix-like的OS,名為Darwin,是BSD的一個分支,但它又被高度的修改過,路徑已經不按BSD的方式(Mac的方式繼承自賈伯斯被趕出蘋果後弄出來的NeXTSTEP作業系統),所以在Mac上應用程式的設定檔存放位置有兩種作法:(1)傳統Unix方式 (2)MacOS自己的方式

第一種作法就是像其它Unix系統,如Linux/FreeBSD等,在使用者的家目錄建立一個以句號 . 開頭的目錄,把應用程式所需的資源,包含設定檔,都放在這個目錄下,例如:

/Users/ray/.CBETA/CBReader2X/cbreader.ini

句號開頭的目錄在Unix是隱藏目錄,一般情況下使用者看不到,而Mac的Finder預設也不會顯示這些目錄,使用者正常情況下不會知道該目錄的存在。

第二種作法是Mac應用程式一般的作法,~/Library/Application Support/目錄,這是Mac應用程式存放自己所需之資源的地方,例如:

/Users/ray/Library/Application Support/CBETA/CBReader2X/cbreader.ini

(標準的Mac應用程式的設定檔是用Property List檔案 (*.plist),這類的設定檔會自動放在~/Library/Preferences/裡面,例如:/Users/ray/Library/Preferences/org.cbeta.cbreader.plist)

以上是Mac程式慣用的位置,從Unix移植過來的應用程式有些會用第一種,Mac原生的應用程式一般是第二種。

其實Mac算很自由的,其實放在哪裡都不是問題,只是會不會讓使用者看到,以及會不會被隨意修改的問題。(這兩種作法一般情況下使用者都看不到)