OS X中的bundle

OS X中的bundle

  • 应用程序的默认设置

OS X以defaults机制管理每个程序的设置,具体就是每个程序就是每个程序都会拥有一个名称空间(程序的域)存储自己的配置文件;

程序以plist文件格式保存各自的配置,可以通过系统的defaults命令来设置默认配置;

defaults命令仅仅修改各个域的配置文件,但是对于每个程序如何响应却是不一定的;

  • Launch Application

OS X 中加载默认程序的功能是由launchService框架实现的,它是core service框架的一部分;在OS X中可以通过open -with命令打开某个application;launchService的基础是建立在一个数据库上,这个数据索引了每个文件格式所对应的程序;在launchService中苹果提供了一个二进制程序lsregister来管理管理这个数据库,比如显示数据库中的全部条目;

➜ cd /System/Library/Frameworks/CoreServices.framework 
➜ cd Frameworks/LaunchServices.framework/Support 
lsregister: [OPTIONS] [ <path>... ]
                     [ -apps <domain>[,domain]... ]
                     [ -libs <domain>[,domain]... ]
                     [ -all  <domain>[,domain]... ]
Paths are searched for applications to register with the Launch Service database.
Valid domains are "system", "local", "network" and "user". Domains can also
be specified using only the first letter.

 -kill     Reset the Launch Services database before doing anything else
 -seed     If database isn't seeded, scan default locations for applications and libraries to register
 -lint     Print information about plist errors while registering bundles
 -lazy n   Sleep for n seconds before registering/scanning
 -r        Recursive directory scan, do not recurse into packages or invisible directories
 -R        Recursive directory scan, descending into packages and invisible directories
 -f        force-update registration even if mod date is unchanged
 -u        unregister instead of register
 -v        Display progress information
 -dump     Display full database contents after registration
 -h        Display this help
  • Framework

Framework也是bundle的一种,它不是drawin内核架构中的内容,通过各种framework,OS X实现各种界面效果和功能,这是苹果自有的技术,除此之外OS X中的framework还提供了“传统”的系统级API,比如运行时系统等;

Framework与Application等bundle不同,它具有内建版本,简单的说就是其中bundle存储了多个版本的编译文件,通过current链接符号指向不同的版本。

OS X和iOS的gcc中有一个-framework也可以指定framework进行编译;在编译OS X软件也可通过配置环境变量添加framework的寻找路径;

  • 顶层框架

在OS X中有两个顶层框架
* carbon 当前已经废弃,兼容多种架构的框架;但部分私有API在内部使用
* cocoa 是NeXTSTEP/NS 的遗产,其支持object-c、java、AppleScript访问;


  • 即dylib动态加载库,由OS X中的mach-o加载器dyld加载;

  • BSD/Mach原生程序

OS X的原生编程语言是oc,但是也支持c/c++,通过直接调用底层的bsd/mach接口,使得OS X程序也可以移植到其他类unix系统中;处理系统的API之外,mach trap API依然是OS X独有的;

OS X符合POSIX标准,POSIX标准主要有两项内容:
* 系统调用原型,支持源代码层的移植;
* 系统调用编号,支持二进制文件层次的移植;
OS X仅仅支持源代码层次的移植;

  • XNU

    • Mach
      进程和线程抽象,虚拟内存管理、任务调度、进程通信、消息传递

    • BSD 网络、文件系统、网络系统、用户系统

    • libKern 内建的自包含的C++库

    • I/O Kit

  • BSD的相关特性

    • sysctl内核访问
    • kqueue内核事件通知机制
    • 安全模块,即OS X的审计系统
    • 强制访问控制
  • OS X特有技术

posted @ 2017-02-08 16:11  何黎  阅读(215)  评论(0编辑  收藏  举报