天天看點

OS X下App的結構分析及安裝、解除安裝[轉]

相信Mac OS X 上大部分軟體的拖拽安裝方式給很多剛剛從 Windows 來到 Mac OS X

上的朋友帶過來驚喜,他們發現原來軟體安裝也可以如此簡單!但是,在解除安裝一個軟體的時候,對于熟悉了 Windows 下

Uninstaller 的同學又要嘀咕了,這樣是否直接删除 App 就可以做到完整解除安裝了呢?本篇文章,就從 Mac OS X App

的基本結構出發,帶大家認識 Mac OS X App,進而了解如何解除安裝 Mac OS X App。

1、Mac OS X App 基本常識。

我們平常接觸的大部分 App,其實是一個檔案夾結構,隻不過,Mac OS X

讓它看起來是一個單獨的檔案而已。通過右鍵點選一個 App,在菜單中選擇 Show Contents,則可以浏覽 App

的内部結構。通常的 App 目錄結構如下:

_CodeSignature, CodeResources

:一般為 Mac App Store

上架程式所包含。裡面含有數字簽名,以防止非法篡改。

Frameworks:

一般放置了此程式所使用的第三方 Framework (使用的 Apple

Framework 都包含在你的系統裡),那些支援 Growl 提醒的程式,在這個檔案夾下必然包含一個 Growl

Framework. 某種程度上,可以了解為 Windows 程式中的 dll 動态連結庫。

Info.plist: 

包含了一個程式的基本資訊,比如最低系統版本要求,版本号,Copyright,等等标示。也可能包含程式的類型資訊,比如這個檔案如果含有一個

LSUIElement 并且值為 TRUE 的片段,則這個程式在執行後,不會在 Dock

上顯示圖示或圖示下有表示此程式正在運作的小亮點。(當然,通過修改一個程式的 plist,添加

LSUIElement,則可以讓一個程式運作時不在 Dock 上顯示圖示)。plist 是一個标準的 XML

文檔,可以用任何文本編輯器修改。

MacOS 檔案夾:

則是包含了此應用程式的真正的可執行檔案(類似 Windows 下的 exe

檔案),當然,一些程式可能包含不隻一個的可執行檔案。

PkgInfo

是一個可選的,8個位元組長度的檔案,可儲存程式類型和建立者簽名。(當然這些可以寫在

Info.plist 中)。這個檔案通常包含四位元組的程式類型資訊(通常為 APPL)和四個位元組的簽名資訊,比如 System

Preferences.app 的 PkgInfo 就是 APPLsprf。

Resources:

顧名思義,就是資源檔案,包含圖示,圖檔,語言包,以及其它各種檔案,這個沒有嚴格的限制。

  扯了這麼多,目的首先是讓大家對 App 有一個最基本的了解,其次就是說明,一個 App

可不象表面上看起來的一個檔案那麼簡單,它内部包含了好多的檔案,而其中的某些檔案會随着程式的運作,複制進你的系統,進而稱為使你不能夠完整解除安裝某程式的絆腳石。

2、Mac OS X App 的安裝方式。

Mac App 的安裝方式,常見的有,拖拽一個 App 檔案到 Applications 檔案夾完成安裝。還有一種是字尾為

.pkg 檔案的安裝檔案,這類安裝方式是通過 Mac OS X Installer 解開 pkg 檔案,按照 pkg 檔案中的 BOM

檔案的指令,将 pkg 檔案中的内容安裝到系統不同的位置上去。還有一類,.mpkg 格式的安裝檔案,這個和 .pkg

安裝檔案過程類似,隻不過 .mpkg 指向的是一組 .pkg 檔案的組合而已。當然,還有通過 MacPorts

的終端安裝方式,不在這篇文章的讨論之列。那麼下面的問題就是不同的安裝方式,對于解除安裝一個 App 是否有不同的影響?

3、Mac OS X App 的解除安裝。

知道了 App

的基本結構,和基本安裝方式,則我們就要針對不同的安裝方式,來規劃我們的解除安裝工作,具體來說,一本分為一下步驟,

  1)安裝程式之前,要仔細閱讀程式提供者的資料,或者 App

的說明文檔,這些文檔中,一般都會含有如何解除安裝 App 的指南。引用論壇 DEC

大哥的一句話,”安裝一個程式之前,你要先知道它如何解除安裝”。很多程式比如 Adobe Creative Suite,Microsoft

Office 都會帶有相應的解除安裝程式。XCode 這類,則會提供一個終端指令。

  2)通過 Google 搜尋,一般都可以找到如何解除安裝程式的方法。關鍵字很簡單 Mac OS X

****(應用程式名) Uninstall / Remove, 一般都會找到你想要的答案。

  3)通過第三方的解除安裝軟體,比如 Clean My Mac,AppZapper

(光槍),都可以做到準完美解除安裝。

  4)通過手動使用終端 find 指令,或者系統内置的 spotlight

搜尋應用程式名,找到相關檔案,删除進行解除安裝

  5)對于一些使用 pkg, mpkg 安裝的,卻又沒有明确告知如何解除安裝的 App,如

Aperture,iLife Suite,則可以參考我的另一些文章,Mac OS X 終端指令講解系列之一: lsbom, Mac

OS X 系統類軟體講解系列之二: Pacifist, Suspicious Package,一個好用得 .pkg/.mpkg

QuickLook 插件

  6)通過 App Store 安裝的應用程式,其實都是通過類似 pkg

方式進行安裝的,但是對于這些沒有留下 pkg 安裝檔案的程式來說,可以參考第七條

  7)注意觀察一個 App 的運作方式,記住一些 App

常用的路徑名稱,可以幫助你完美解除安裝一個程式。

綜上,1,2,3,4,5,6 說的已經狠明确了,不再累述,關鍵是第 7 條,需要一定的 Mac OS X

使用經驗。

/Applications

,這個不必多說,99% 的應用程式在下載下傳後,都會有一個直接提示讓你拖拽 App 到

/Applications 檔案夾。其實這個不是強制的位置,大部分 App 可以在任何權限适合的檔案夾下運作。

~/Library/

(~代表你的使用者主目錄,使用者級别,每個使用者都有一套,),用來存放使用者偏好設定,App

偏好設定,緩存,App 資料檔案等。我們大部分時間需要注意的是, 這個檔案夾下與應用程式同名的檔案夾,比如

QIM,在此檔案夾下有一個相同名稱的檔案夾,用來存放字典檔案等。

~/Library/Preferences/

(使用者級别,每個使用者都有一套,)

檔案夾,這個檔案夾下是各個程式的偏好設定檔案,資料記錄檔案,解除安裝一個 App 時,這裡一般都會有一個以上的相關 plist 檔案。這些

plist 檔案,一般以 com.***(應用程式提供商).***(應用程式名稱).plist

的格式出現,是以,按照應用程式名稱或者提供商名稱,可以很容易的找到應用程式遺留檔案. 以我的程式為例,他們都是以 com.ibuick

開頭,比如 com.ibuick.iChecker.plist,

com.ibuick.DesktomMonitor.plist。

~/Library/LaunchAgents/

(使用者級别,每個使用者都有一套,)

檔案夾,此檔案夾一般存放一些應用程式的附加程式,比如 Folx 能夠感覺 Safari 下載下傳動作,1Password

能夠感覺登入輸入密碼動作,都是靠這裡的 plist 檔案來配置。臭名昭著的 Google

紫銅背景更新程式的配置檔案,就在這裡!!!(其相應的可執行檔案,在 ~/Library/Google 檔案夾下)

~Library/Application/Support/

一般用來存放跟應用程式相關的支援資料(使用者級别,每個使用者都有一套,),應用程式的附加程式(比如 Helper

程式,插件等等),應用程式的備份檔案 (比如 MacJournal

的所有日志備份檔案等)。一般都是跟應用程式(或者開發商)同名的檔案夾,找到一看便知。

~Library/Internet/Plug-Ins/

用來放置與 Safari 有關的 App

插件,前面說過的 Folx, 除了通過 LaunchAgents 裡面的 plist 配置啟動感覺 Safari

下載下傳動作的檔案外,在這裡一樣有一個指向 Folx.app 内部 Resources 檔案夾下

FolxNetscapePlugIn.plugin 檔案的替身連結 ,用于處理 Safari 下載下傳動作。這個其實就是在 Folx

App 啟動後,由 App 自行拷貝而來。這個檔案夾下也存放着此使用者為 Safari 安裝的其它擴充,比如 ClickToFlash

等等。

~/Library/Contextual/Menu/Items/

用來放置一個 App 像系統添加的上下文菜單

(右鍵菜單), 比如安裝 SpeedDownloads 後,右鍵點選一個下載下傳連結,會出現各種 SpeedDownloads

右鍵菜單,就是在這個檔案夾下。

~/Library/Input/Methods/

則是此使用者安裝的輸入法程式

~/Library/PreferencePanes/

所有第三方的系統偏好設定 (System

Preferences) 控制台都是安裝在這裡

~/Library/Services/

很多程式會向右鍵,或者 服務(Service)

菜單添加項目,則他們會把菜單項拷貝到這裡

~/Library/Widgets/

你安裝過的 Dashboard Widget

小應用都會在這裡找到

~/Library/Receipts/

下,很多應用程式在安裝後,會在這裡留下 Receipt 存根或者

BOM 檔案,對于幫助完整解除安裝 App 很有幫助。

一部分部分 ~/Library 下介紹過的檔案夾,在 /Library 下都能夠找到相對應的目錄,差別在于 /Library

時表示全局級别的配置,換句話說,同樣的配置從 ~/Library 拷貝到 /Library 相應的檔案夾下,則會影響這個 App

在所有使用者中的運作狀态,運作方式。這就是 Mac OS X 系統的另一個概念,分級隔離。

當然,/Library 下有 ~/Library 下不存在的檔案夾,也需要注意:

/Library/LaunchDaemons

檔案夾,這個的作用與

/Library/LaunchAgents/ (~/Library/LaunchAgents/)

類似,隻不過,LaunchAgents 一般代表了有使用者界面的背景自動運作程式,而 Daemons

則代表了那些沒有使用者界面的背景運作程式。

但一定要注意,/Library 下的所有更改将會波及整個所有使用者,必須非常小心,否則會造成難以預料的後果。

/System/Library

則是系統級别用用程式配置,資料的所在地,除非你特别明白每一個項目的作用,否則不要進行任何修改,一旦誤操作,将會對系統産生緻命後果。

大部分标準的,符合 Apple 應用程式規範的

App,基本都會在上述檔案夾中的某一些内部留下痕迹,是以隻要牢記這些檔案夾,以及每個檔案夾的作用,手工完全清除 App

是非常友善且安全的。