IPA是Apple程序應(yīng)用文件iPhoneApplication的縮寫。
Mac 下的軟件大部分都只有一個 .app 目錄,里面包含了程序全部資源和可執(zhí)行文件。
簡單來說,Mac 下的軟件就像是 Windows 下的綠色軟件一樣,解壓后即可使用,不需要安裝,卸載的話也只用刪除程序文件即可(這里不涉及 pkg 格式安裝包)。
而 ipa 格式可以視為這種 .app 軟件的衍生物。ipa 文件實(shí)質(zhì)是一個 zip壓縮包(不是 rar 或 7z 包),包含 3 個組件:payload 目錄下的 .app 目錄,這個是軟件的主程序;iTunesArtwork,實(shí)質(zhì)是一個無后綴名的 png 圖片,用來在 iTunes 中顯示圖標(biāo);iTunesMetadata.plist,記錄購買者信息、售價等數(shù)據(jù)。
由于 zip 包不能記錄權(quán)限和所有者等信息,所以蘋果規(guī)定了 ipa 的安裝方式,即全部 ipa 都會解包安裝在 /var/mobile/Applications 目錄下,全部文件和目錄的所有者及用戶組均設(shè)為 mobile(ID 為 501),主程序(可執(zhí)行文件)的權(quán)限設(shè)為 0755 (所有人都可以執(zhí)行,但只有所有者可以修改),可執(zhí)行文件在 plist 中定義。全部目錄權(quán)限設(shè)為 0755,而其它所有文件都設(shè)為 0644(僅所有者可以修改,其余人只允許讀取,全部人都不允許執(zhí)行)。
ipa 解包后并非直接放置于 Applications 目錄下,而是放在一串由隨機(jī)碼構(gòu)成的目錄下,其作用在于,只允許這個軟件運(yùn)行在一個特定的沙盒(Sandbox)中,不能干擾其他軟件。
因此那串隨機(jī)碼目錄下,除了 ipa 本身的三個組件之外,還有三個目錄:Library,一般是用了儲存設(shè)置文件等數(shù)據(jù);Documents,存儲數(shù)據(jù),多用來保存存檔;tmp,臨時文件夾。由于這個軟件只能在這個特定的目錄下運(yùn)行(當(dāng)然了,部分程序會調(diào)用系統(tǒng)的通訊錄、相機(jī)等組件,但仍然是受限制的),從而保證了整個系統(tǒng)的安全性和穩(wěn)定性。
由于 Unix 系統(tǒng)下對權(quán)限的規(guī)定相當(dāng)嚴(yán)格,所以“越權(quán)”的行為是絕對不允許的。舉個例子,mobile 用戶無權(quán)刪除 root 所有的文件,因?yàn)?root 的權(quán)限高于 mobile。
所以有些人在修改 ipa 安裝后的文件時,比如進(jìn)行漢化或者修改存檔,發(fā)現(xiàn)不能刪除干凈軟件,或不能保存,這是因?yàn)閯h除時不能刪除 root 所有的文件,程序本身也無法對 root 所有的存檔文件進(jìn)行寫入操作。