zoukankan      html  css  js  c++  java
  • 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特有技术

  • 相关阅读:
    Android源码剖析之Framework层进阶版(Wms窗口管理)
    如何让项目中的代码更易于维护
    Android源码剖析之Framework层实战版(Ams管理Activity启动)
    node.js学习路线图
    让你的公众号拥有AI能力--微信对话开放平台
    Android跨平台投屏软件(无需root)--scrcpy
    微信H5支付申请相关问题
    Bmob后端云实现无后端开发APP
    微信公众号申请相关问题
    iOS企业包下载安装
  • 原文地址:https://www.cnblogs.com/bad-heli/p/6378722.html
Copyright © 2011-2022 走看看