引言:
在之前的一篇文章站在高处看iOS开发 ——— 深入浅出iOS操作系统,从Mac OS和iOS的历史开始,重点讲解操作系统内核以及之间的核心关系,本章是对上一章的具体分析 ——— iOS系统架构。
iOS系统架构
系统构架是对已确定的需求的技术实现构架、作好规划,运用成套、完整的工具,在规划的步骤下去完成任务百度百科-系统架构。例如服务端经常提到的微服务架构,支付宝的支付架构等。
操作系统架构抽象来说,它是计算机系统结构,或称计算机体系结构,是一个系统在其所处环境中最高层次的概念;它确定一台计算机硬件和软件之间的衔接。具体地说计算机体系结构指的是计算机系统设计的观念与架构,描述计算机在实做的设计原则。它确定一个计算机设计的部件功能 ,部件间接口 并且计算机体系结构着重于“负责了计算机架构的中心功能:计算”的中央处理器内部的运行动作与存储器的访问。
iOS系统架构,简单理解就是使iOS软件在iOS硬件上完整、高效运转所构建的一系列工具。
学习的最基础也是最重要的部分就是官方文档。OS X 系统框架官方文档
这是官网上面关于iOS的系统架构,主要分为五个层次,由内而外依次是:
- 核心操作系统层(Core OS layer)
- 核心服务层(Core Services layer)
- 媒体层(Media layer)
- 可触摸层(Cocoa Touch layer)
- 应用层(Application layer)
1. Core OS layer
核心操作系统层实现了与应用程序安全性相关的功能。框架提供与硬件和网络相关的低级服务。这些服务基于内核和设备驱动程序层中的设施。
-
Darwin
核心操作系统层内核就是我们经常提到的Darwin,Darwin(达尔文)是苹果公司于2000年发布的一个开源操作系统,Darwin是macOS 和 iOS的一部分。可以将Darwin理解为操作系统的代号。Darwin由XNU和一些其他的Darwin库组成。
XNU
XNU是由苹果公司发布的操作系统内核,即Darwin的内核是XNU,是Darwin操作系统的一部分。除macOS外,XNU还是iOS、tvOS、watchOS操作系统的内核。XNU是X is not Unix的缩写。XNU包含三部分:Mach内核、BSD、I/O Kit。Mach
XNU内核以一个被深度定制的Mach3.0内核作为基础。Mach是一个由卡内基梅隆大学开发的计算机操作系统微内核,主要是为了用于操作系统研究,特别是在分布式与并行运算上。XNU中的Mach所负责的功能非常少(核心功能),只能完成操作系统最基本的职责,比如任务调度、消息传递、进程间通信等。BSD
BSD,伯克利软件套件(Berkeley Software Distribution),也被称为伯克利Unix(Berkeley Unix),是一个操作系统的名称。XNU中的BSD部分提供了POSIX应用程序接口(BSD系统称之为API):进程模型、网络协议栈、虚拟文件系统等。
如果对Darwin和Mach有兴趣,可参阅:
- 《Mac OS X and iOS Internals: To the Apple’s Core》 by Jonathan Levin
- Kernel Programming Guide 官方文档
-
iOS系统的封闭性
而iOS作为一个移动平台操作系统,苹果一直竭尽全力保证iOS系统的封闭性。实际上,这种做法就是将操作系统限制为只允许开发者访问苹果公司认为是“安全”或“推荐”的功能,而不允许开发者访问整个硬件的功能。那iOS操作系统在Darwin操作系统上做了哪些人为的限制去保证iOS系统的封闭性?这个问题,大家可以私聊我进行探讨。这两年风头正盛的"越狱",实际上就是破坏这层iOS系统的封闭性限制。- Code Signing 代码签名:使用SSL验证身份,通过发布者的私钥对公钥进行签名,来验证应用程序的来源以及在传输过程中是否被篡改
- App Sandbox 隔离机制(沙盒化):不受信任的应用程序必须在一个独立的隔间中运行,隔间实际上就是一个隔离的环境,在这个环境所有的操作都会受到限制,采用“黑名单”风格方法来阻止已知的危险操作,只有在列表具有足够的限制性时才有效果
- Entitlement:更为严格的沙盒,采用“白名单”的方式,只允许那些已知是安全的操作,其他所有操作都不允许,替换当前沙盒机制中采用的“黑名单”方式
核心操作系统框架
- Accelerate
- Disk Arbitration
- OpenCL
- Open Directory
- System Configuration
2. Core Services layer
为应用程序提供基本服务,但与应用程序的用户界面没有直接关系。通常,这些技术取决于OS X最低的两个层(即核心OS层以及内核和设备驱动程序层)中的框架和技术。
核心服务层框架
- Foundation Framework
- Accounts Framework
- Maps Framework
- Address Book Framework
- CFNetwork Framework
- Core Data Framework
- Core Foundation Framework
- Core Location Framework
- Core Media Framework
- Core Telephony Framework
- Event Kit Framework
- Mobile Core Services Framework
- Quick Look Framework
- Store Kit Framework
- Notification Center
- Block Objects
- Grand Central Dispatch
- In App Purchase
- Location Services
- SQLite Database
- XML Support
- Automator framework
- Social Framework
- WebKit
3. Media layer
- 顾名思义,媒体层可以在应用程序中使用各种媒体文件,进行音频与视频的录制,图形的绘制,以及制作基础的动画效果。
媒体层框架
- AVFoundation
- Core Graphics
- Core Text
- Core Audio
- Core Animation
- Core Image
- OpenAL
- OpenGL
- OpenGL ES
- Image I/O
- ImageKit
- ColorSync
- Audio Mixing
- Audio Recording
- Video Playback
- Video Toolbox
- Audio Toolbox
- Audio Unit
- JPG
- PNG
- TIFF
- Quartz
- GLKit
- Quartz Core
- Scene Kit
- QuickTime Kit
- Sprite Kit
4. Cocoa Touch layer
- 本质上来说它负责用户在iOS设备上的触摸交互操作
- 包括以下这些组件: Multi-Touch Events Core Motion Camera View Hierarchy Localization Alerts Web Views Image Picker Multi-Touch Controls.
- cocoa 很多组件都有两种实现,一种是基于 C 的以 CF 开头的类(CF=Core Foundation),这是比较底层的;另一种是基于 Obj-C 的以 NS 开头的类(NS=NExT STEP),这种类抽象层次更高,易于使用。
- 大部分iOS开发者都是跟Cocoa Touch layer打交道
触摸层框架
- UIKit
5. 应用层
- SpringBoard
SpringBoard.app是一个系统进程,可以理解为桌面系统,可以统一管理和分发系统接收到的触摸事件。 - Spotlight
系统搜索功能。