1.OSX和iOS有着优雅的分层:
a).用户体验层:包括Aqua、Dashboard、Spotlight、和辅助功能等。
b).应用框架层:包括Cocoa、Carbon、和java。(iOS中是cocoa Touch)
c).核心框架层:又称为图形和媒体层,包括核心框架、OpenGL和QuickTime。
d).Darwin:操作系统核心——包括内核和UNIX shell环境。
2.Darwin并不是一单层组件,具体如下图所示。
3.用户体验层
1)QuickLook:允许在Finder中快速预览多种不同类型的文件。是以插件形式实现的。
2)Spotlight:是一项快速搜索技术。其背后的核心力量是一个索引服务器mds.它是一个没有GUI的后台服务程序,每当有任何文件操作发生时,内核都会通知这个后台服务程序。
4.Darwin(UNIX核心):OSX 中的Darwin是一个完全成熟的UNIX实现。
5.UNIX的目录结构:
/bin | UNIX中的二进制程序。常用UNIX命令等在此。 |
/sbin | 系统程序。用于系统管理的程序,如文件系统管理和网络配置等。 |
/usr | User目录。类似于window的program files,第三方软件可以装到此处。 |
/etc | 其他文件。包含了大部分系统配置文件,OSX中此目录实际上是指向/private/etc符号链接 |
/dev | BSD设备文件。这些特殊文件表示系统中存在的设备(字符设备和块设备)。 |
/tmp | 临时目录。这是系统中唯一所有人都可写的目录。OSX中此目录实际上是指向/private/tmp符号链接 |
/var | 各种杂项。此目录保存了日志文件、邮件存储等。OSX中此目录实际上是指向/private/var符号链接 |
/Applications | 系统中所有应用程序的默认目录 |
/Developer | 好像现在没看到了,知道的给我说下哈 |
/Library | 系统应用的暑假文件、帮助文档等数据都在此 |
/Network | 用于邻居借点发现和访问的虚拟目录 |
/System | 系统文件目录。仅包含了/Library目录,这个目录几乎包含了系统中的所有重要组件,框架、内核和字体等 |
/Users | 所有用户的主目录所在的目录,每个用户都会在此建立一个目录 |
/Volumes | 可移动媒体和网络文件系统的挂载点所在目录 |
/Cores | 如果启动了核心转储,那么这个目录保存核心转储文件 |
7.bundle:bundle是OSX的一个重要概念,是neXTSTEP的遗产。bundle的概念不仅是应用程序的根基也是框架、插件、小物件、甚至内核扩展的根基。apple对bundle的定义是:“一种标准化的层次结构,保存了可执行代码以及代码所需的资源”,尽管具体的bundle类型和内容可能会不同,但所有的bundle都有着相同的内部结构。一个程序的bundle结构如下:
Cocoa提供了一种简单的编程方法用于访问和加载bundle,通过NSBundle对象和CoreFoundation提供的CFBundle系列API可以访问和加载bundle。
8.在应用中有一个属性列表文件info.plist,位于应用程序的contents目录下,保存的是bundle的元数据信息。此外还有3种熟悉列表的形式:xml、二进制格式、json。实际上,Cocoa可以通过内建的字典或数组对象直接实例化一个plist,而不需要指定文件格式。如下:
NSDictionary *dictionary = [NSDictionary dictionaryWithContentsOfURL:plistURL];
NSArray *array = [NSArray arrayWithContentsOfURL:plistURL];
9.一个标准的info.plist包含的条目
CFBundleDisplayName: | 显示给用户的bundle名称。 |
CFBundleDocumentTypes: | 这个bundle关联的文档类型。这是一个字典,字典中的值指定了这个bundle能够处理的文件扩展名。这个字典还指定了对于关联文档显示的图标。 |
CFBundleExecutable: | 这个bundle中实际的可执行文件(二进制文件或库文件)。可执行文件位于Contents/MacOS目录。 |
CFBundleIconFile: | 在Finder视图中显示的图标文件。 |
CFBundleIdentifier: | 逆DNS表示法的标识符。 |
CFBundleName: | bundle的名称(限制在16个字符之内)。 |
CFBundlePackageType: | 表示一个4字母的代码,例如APPL = Application,FRMW = Framework,BNDL = Bundle。 |
CFBundleSignature: | bundle的4字母短名。 |
CFBundleURLTypes | :这个bundle关联的URL。这是一个字典,值指定了这个bundle处理的URL scheme以及处理方式。 |