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