天天看点

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

是非常方便且安全的。