iOS的应用软件分为三种:
一、核心服务应用:所谓核心服务应用就是系统最底层的应用,他们为整个系统提供最基础的服务。也就是说,如果没有这些核心服务应用那么这个iOS系统就无法正常工作!我们最熟悉的核心服务应用应该就是SpirngBoard了,他负责管理整个系统及其它的应用程序,在iOS设备启动时他就将被加载起来,并且它是作为一个守护进程存在的,也就是说它一旦被杀死就会被系统马上重新调起!此外,例如我们熟知的AssistiveTouch(辅助功能)也是作为核心服务应用存在的,其它的核心服务应用还有:MobileStorageMountger、USBDeviceArbitator和VoiceOverTouch等,这类应用的安装路径为:/System/Library/CoreService;
二、系统级应用:所谓系统级是说iOS设备在出厂是就被内置到设备中的那些应用,这些应用通常是苹果公司为了满足用户最基本需求而设计的,并且是不能被用户删除的,它们也只能通过系统的升级而升级!这类应用安装于/Application(实际上它一个符号链接)目录下;
三、用户级应用:所谓用户级应用是在iOS设备出厂之后,用户为满足自己各种需求而安装的一般有第三方提供(苹果公司也提供了一些此类应用)的应用程序,用户可以自由的安装和卸载此类应用!这类应用一般安装于/User/Application目录下;
第一类应用的位置一般是不会改变的,所以我们可以直接找到它们。后面两类应用的信息被系统维护在一个名为com.apple.mobile.installation.plist的文件中,该文件位于/User/Library/Caches中。我们可以通过这个文件获取该设备当前安装的所有系统应用和用户应用的信息,其中最重要的两个信息是应用类型(ApplicationType)和安装路径(Path)。此外,在MobileInstallation.framework中还提供了一个名为MobileInstallationLookup的函数,这个还是也可以返回应用安装的信息,而且他的功能更为强大:
函数原型:CFDictionaryRef MobileInstallationLookup(CFDictionaryRef returnAttributes);
这个函数的关键就是它的参数,想要获得什么样的结果就必须在参数中指定。比如你想获得已安装的所有程序的列表,传入的参数就应该是这样的 {
ReturnAttributes = (ApplicationTye, Path)},这样他就会返回当前安装的所有应用的类型和安装路径;如果你只想或系统级应用的安装路径,那传入的应用就应该是这样的{ ApplicationType = "System", ReturnAttributes = (Path)}。在这里我还要提两个东东,一是名为installd的守护进程,另一个是uicache;installed是用来维护com.apple.mobile.installation.plist这个文件的,而uicache则是用来将这个文件中的内容实现到桌面上的(也就是刷新桌面图表的)。