iOS 框架:架構圖整理

電腦系統分層架構

電腦系統就是…硬體得手後,能開機的情形下,以其為基礎來運作軟體。換句話說,沒有硬體先運作,軟體就沒辦法執行;硬體的好壞也直接影響了軟體的能力。軟體寫得再好,硬體不足也無法實現功能。總之,硬體是軟體的必要載體、硬體直接侷限了軟體的可能性。就像人的肉體也侷限了人大多的可能。

在畫圖時,會把”必要項”放在下方,就像地基一樣,把上面那一層撐起來。這裡,硬體就是軟體的地基。此外,上層對「下一層」很熟悉,但是下層並不需要了解「上一層」。

一般的電腦買回家後,要裝什麼軟體是隨人喜歡的。軟體(上層)必須了解硬體(下層)提供了哪些能力,例如…在螢幕上顯示美美的照片啦…之類的;但是硬體並不知道未來使用者會在上面裝哪些軟體。硬體只開放自己的功能讓軟體知曉,但是硬體本上並不需要認識任何軟體。

以上就是軟硬體與分層架構最基本的認識。

電腦系統的分層,再細看一點。

這裡要關注的是:軟體包括「作業系統」和「應用程式」,雖然通常我們在講軟體時,大多指的是應用程式。以現代電腦系統來說,若沒有看到桌面環境,多數人是不知道怎麼用電腦的。

作業系統作為應用程式的基礎,所以通常我們會在乎某個程式能不能在 PC 上跑?還是 Mac 上?這是因為兩者的「作業系統」不同。目前不論是藉由虛擬機器 (Virtual Machine, VM) 或 Docker 等容器技術,已經能讓不同的作業系統裡運行另外一種作業系統,自然也就能在同一個機器上運作不同作業系統支援的應用程式了。

在 iOS 領域裡,上圖可以改繪製成下圖:

iPhone / iPad 是硬體,軟體是 iOS 和 App。App 依賴 iOS 作為執行環境,有時因為 iOS 的升級,也會帶動 App 的變更。

現在,我們像用顯微鏡一樣,再把 iOS 的部分「放大一點來看」,是長怎樣呢?

被畫線槓掉的兩個層,是因為它們是屬於 macOS的,不是 iOS 的。

這張圖,可以知道,iOS 內部分為四層,若是 macOS 則有六層;要特別留意的有:

  1. iOS 沒有 Kernel & Driver Layer 層,那它是怎麼和 iPhone 這個硬體互動的呢?是 Core OS Layer 直接與 iPhone 互動嗎?從官方文件裡能觀察到的資訊來說,可能是。因為 Kernel & Driver Layer 層包括的五個部分 (CoreWLAN, IOBluetooth, IOKit, ImageCaptureCore 與 Kernel) 都是屬於 macOS 的應用。
  2. 看來 App 是與 Cocoa Layer 進行溝通的,是吧?看起來很合理,但是不完全是。因為在 App 中,其實可以跨層次地使用 Cocoa Layer、Media Layer、Core Services Layer 或 Core OS Layer 的元件。所以在 iOS 的軟體架構中,在靜態結構上,這樣的層次是存在的,但是在運用上倒沒有那麼嚴瑾。這也是可以理解的,不然 Cocoa Layer 肯定會非常肥大 — 若 App 只能與 Cocoa Layer 進行溝通的話。

把顯微鏡對準 Core OS Layer 來細看:

很精彩,對吧?果然包含了很多與硬體相關的支援 。看紅字部分的說明是再明顯不夠了。其實就算沒有紅色的部分,也和一些硬體相關。例如:Security 框架應該與 Secure Element 晶片有關。

在 Core OS Layer 這層,我猜一般開發人員比較常有機會接觸的部分包括:

  1. Local Authentication, LA 框架。(因為 Touch ID)
  2. Core Bluetooth, CB 框架。(因為 BLE 應用)

向 Core OS Layer 說再見,我們來往上一層 (Core Services Layer) 來看:

如果說 Core OS Layer 負責與硬體相關的低階任務,那麼 Core Services Layer 就是高階的部分。也因此,它非常大一塊,幾乎身為 "一個可以上網的機器" 該有的功能,都被含在裡面。OSI 第四~七層的功能幾乎都在裡面。

為了銜接「上一層」的 Media Layer,我們應該留意到 Core Services Layer 中有一個「Core Media 框架」。Core Media 含 AVFoundation 框架,此框架屬於與媒體類型資料的低階函式庫。低階的意思是:難度與靈活度較高,一般的開發人員不會直接用到它;取而代之的,是用封裝了它的高層抽象。

專注於多媒體的一層

又是一個很夠大一塊的層,但是也多虧這一層,把一個 "能上網的機器" 變成能聽音樂、看影片、玩遊戲的掌上多媒體播放機/遊戲機。

從 Core OS Layer 和 iPhone/iPod 等 iDevice 的連接,到 Core Services Layer 的努力、再到 Media Layer 豐富了感官(其實目前只有耳朵)能體會到的種種功能,最後,被 iOS 定義在最上層的,是「看得到、觸碰得到」的一層:Cocoa Layer。它的另一個名稱能直覺得反應這一層的作用:Cocoa Touch。

Cocoa Layer 的最大特色,就是「UI」。

Cocoa Layer 最基礎的部分,就是 UIKit。UIKit 可不簡單,包括了很多東西,顧名思義就是看得見的抽象類別都屬於這個群組。當然,是所有初學者一定會碰到的部分。

Cocoa Layer 的 UIKit 與 Core Services Layer 的 Foundation 兩者,有時加起來被稱為 Core frameworks。原因很簡單:用到 NSObject 就是用到了 Foundation;用到了 UIView/UIViewController 就是用到了UIKit。

以上,就是 Cocoa 框架的簡單整理。

Show your support

Clapping shows how much you appreciated WuFeng Chiang’s story.