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