引言:
在之前的一篇文章站在高處看iOS開發(fā) ——— 深入淺出iOS操作系統(tǒng),從Mac OS和iOS的歷史開始,重點(diǎn)講解操作系統(tǒng)內(nèi)核以及之間的核心關(guān)系,本章是對上一章的具體分析 ——— iOS系統(tǒng)架構(gòu)。
iOS系統(tǒng)架構(gòu)
系統(tǒng)構(gòu)架是對已確定的需求的技術(shù)實(shí)現(xiàn)構(gòu)架、作好規(guī)劃,運(yùn)用成套、完整的工具,在規(guī)劃的步驟下去完成任務(wù)百度百科-系統(tǒng)架構(gòu)。例如服務(wù)端經(jīng)常提到的微服務(wù)架構(gòu),支付寶的支付架構(gòu)等。
操作系統(tǒng)架構(gòu)抽象來說,它是計(jì)算機(jī)系統(tǒng)結(jié)構(gòu),或稱計(jì)算機(jī)體系結(jié)構(gòu),是一個(gè)系統(tǒng)在其所處環(huán)境中最高層次的概念;它確定一臺計(jì)算機(jī)硬件和軟件之間的銜接。具體地說計(jì)算機(jī)體系結(jié)構(gòu)指的是計(jì)算機(jī)系統(tǒng)設(shè)計(jì)的觀念與架構(gòu),描述計(jì)算機(jī)在實(shí)做的設(shè)計(jì)原則。它確定一個(gè)計(jì)算機(jī)設(shè)計(jì)的部件功能 ,部件間接口 并且計(jì)算機(jī)體系結(jié)構(gòu)著重于“負(fù)責(zé)了計(jì)算機(jī)架構(gòu)的中心功能:計(jì)算”的中央處理器內(nèi)部的運(yùn)行動作與存儲器的訪問。
iOS系統(tǒng)架構(gòu),簡單理解就是使iOS軟件在iOS硬件上完整、高效運(yùn)轉(zhuǎn)所構(gòu)建的一系列工具。
學(xué)習(xí)的最基礎(chǔ)也是最重要的部分就是官方文檔。OS X 系統(tǒng)框架官方文檔

這是官網(wǎng)上面關(guān)于iOS的系統(tǒng)架構(gòu),主要分為五個(gè)層次,由內(nèi)而外依次是:
- 核心操作系統(tǒng)層(Core OS layer)
- 核心服務(wù)層(Core Services layer)
- 媒體層(Media layer)
- 可觸摸層(Cocoa Touch layer)
- 應(yīng)用層(Application layer)
1. Core OS layer
核心操作系統(tǒng)層實(shí)現(xiàn)了與應(yīng)用程序安全性相關(guān)的功能。框架提供與硬件和網(wǎng)絡(luò)相關(guān)的低級服務(wù)。這些服務(wù)基于內(nèi)核和設(shè)備驅(qū)動程序?qū)又械脑O(shè)施。
-
Darwin
核心操作系統(tǒng)層內(nèi)核就是我們經(jīng)常提到的Darwin,Darwin(達(dá)爾文)是蘋果公司于2000年發(fā)布的一個(gè)開源操作系統(tǒng),Darwin是macOS 和 iOS的一部分??梢詫arwin理解為操作系統(tǒng)的代號。Darwin由XNU和一些其他的Darwin庫組成。
Darwin架構(gòu)模型 —— 圖片引用自《深入解析Mac OS X & iOS 操作系統(tǒng)》.png XNU
XNU是由蘋果公司發(fā)布的操作系統(tǒng)內(nèi)核,即Darwin的內(nèi)核是XNU,是Darwin操作系統(tǒng)的一部分。除macOS外,XNU還是iOS、tvOS、watchOS操作系統(tǒng)的內(nèi)核。XNU是X is not Unix的縮寫。XNU包含三部分:Mach內(nèi)核、BSD、I/O Kit。Mach
XNU內(nèi)核以一個(gè)被深度定制的Mach3.0內(nèi)核作為基礎(chǔ)。Mach是一個(gè)由卡內(nèi)基梅隆大學(xué)開發(fā)的計(jì)算機(jī)操作系統(tǒng)微內(nèi)核,主要是為了用于操作系統(tǒng)研究,特別是在分布式與并行運(yùn)算上。XNU中的Mach所負(fù)責(zé)的功能非常少(核心功能),只能完成操作系統(tǒng)最基本的職責(zé),比如任務(wù)調(diào)度、消息傳遞、進(jìn)程間通信等。BSD
BSD,伯克利軟件套件(Berkeley Software Distribution),也被稱為伯克利Unix(Berkeley Unix),是一個(gè)操作系統(tǒng)的名稱。XNU中的BSD部分提供了POSIX應(yīng)用程序接口(BSD系統(tǒng)稱之為API):進(jìn)程模型、網(wǎng)絡(luò)協(xié)議棧、虛擬文件系統(tǒng)等。

如果對Darwin和Mach有興趣,可參閱:
- 《Mac OS X and iOS Internals: To the Apple’s Core》 by Jonathan Levin
- Kernel Programming Guide 官方文檔
-
iOS系統(tǒng)的封閉性
而iOS作為一個(gè)移動平臺操作系統(tǒng),蘋果一直竭盡全力保證iOS系統(tǒng)的封閉性。實(shí)際上,這種做法就是將操作系統(tǒng)限制為只允許開發(fā)者訪問蘋果公司認(rèn)為是“安全”或“推薦”的功能,而不允許開發(fā)者訪問整個(gè)硬件的功能。那iOS操作系統(tǒng)在Darwin操作系統(tǒng)上做了哪些人為的限制去保證iOS系統(tǒng)的封閉性?這個(gè)問題,大家可以私聊我進(jìn)行探討。這兩年風(fēng)頭正盛的"越獄",實(shí)際上就是破壞這層iOS系統(tǒng)的封閉性限制。- Code Signing 代碼簽名:使用SSL驗(yàn)證身份,通過發(fā)布者的私鑰對公鑰進(jìn)行簽名,來驗(yàn)證應(yīng)用程序的來源以及在傳輸過程中是否被篡改
- App Sandbox 隔離機(jī)制(沙盒化):不受信任的應(yīng)用程序必須在一個(gè)獨(dú)立的隔間中運(yùn)行,隔間實(shí)際上就是一個(gè)隔離的環(huán)境,在這個(gè)環(huán)境所有的操作都會受到限制,采用“黑名單”風(fēng)格方法來阻止已知的危險(xiǎn)操作,只有在列表具有足夠的限制性時(shí)才有效果
- Entitlement:更為嚴(yán)格的沙盒,采用“白名單”的方式,只允許那些已知是安全的操作,其他所有操作都不允許,替換當(dāng)前沙盒機(jī)制中采用的“黑名單”方式
核心操作系統(tǒng)框架
- Accelerate
- Disk Arbitration
- OpenCL
- Open Directory
- System Configuration
2. Core Services layer
為應(yīng)用程序提供基本服務(wù),但與應(yīng)用程序的用戶界面沒有直接關(guān)系。通常,這些技術(shù)取決于OS X最低的兩個(gè)層(即核心OS層以及內(nèi)核和設(shè)備驅(qū)動程序?qū)樱┲械目蚣芎图夹g(shù)。
核心服務(wù)層框架
- 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
- 顧名思義,媒體層可以在應(yīng)用程序中使用各種媒體文件,進(jìn)行音頻與視頻的錄制,圖形的繪制,以及制作基礎(chǔ)的動畫效果。
媒體層框架
- 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
- 本質(zhì)上來說它負(fù)責(zé)用戶在iOS設(shè)備上的觸摸交互操作
- 包括以下這些組件: Multi-Touch Events Core Motion Camera View Hierarchy Localization Alerts Web Views Image Picker Multi-Touch Controls.
- cocoa 很多組件都有兩種實(shí)現(xiàn),一種是基于 C 的以 CF 開頭的類(CF=Core Foundation),這是比較底層的;另一種是基于 Obj-C 的以 NS 開頭的類(NS=NExT STEP),這種類抽象層次更高,易于使用。
- 大部分iOS開發(fā)者都是跟Cocoa Touch layer打交道
觸摸層框架
- UIKit
5. 應(yīng)用層
- SpringBoard
SpringBoard.app是一個(gè)系統(tǒng)進(jìn)程,可以理解為桌面系統(tǒng),可以統(tǒng)一管理和分發(fā)系統(tǒng)接收到的觸摸事件。 - Spotlight
系統(tǒng)搜索功能。
