一、iOS 系統架構層次
在 iOS 中,框架是一個目錄,包含了共享資源庫,用於訪問該資源庫中儲存的代碼的頭文件,以及圖像、聲音文件等其他資源。共享資源庫定義應用程序可以調用的函數和方法。
iOS 為應用程序開發提供了許多可使用的框架,並構成 iOS 操作系統的層次架構,分為四層:
Cocoa Touch 可觸摸層
這一層為我們的應用程序開發提供了各種有用的框架,並且大部分與用戶界面有關,本質上來說它負責用戶在 iOS 設備上的觸摸交互操作。
包括:Address Book UI Framework、Event Kit UI Framework、Game Kit Framework、iAd Framework、Map Kit Framework、Message UI Framework、UIKit Framework 等等,這一層基本都是基於 Objective-C 的接口。
Media 媒體層
通過它我們可以在應用程序中使用各種媒體文件,進行音頻與視頻的錄制,圖形的繪制,以及制作基礎的動畫效果。
包含 Core Graphics、Core Animation、OpenGL ES、Core Text、Image I/O、Assets Library Framework、Media Player Framework、AV Foundation、OpenAL、Core Audio Frameworks、Core Media 等等
Core Services 核心服務層
可以通過它來訪問 iOS 的一些服務。
包含 Address Book Framework、CFNetwork Framework、Core Data Framework、Core Foundation Framework、Core Location Framework、Core Media Framework、Core Telephony Framework、Event Kit Framework、Foundation Framework、Mobile Core Services Framework、Quick Look Framework、Store Kit Framework、System Configuration Framework、Block Objects、Grand Central Dispatch 、In App Purchase、Location Services、SQLite、XML Support 等一些框架,也基本都是基於 c 語言的接口。
Core OS 是位於 iOS 系統架構最下面的一層是核心操作系統層
它包括內存管理、文件系統、電源管理以及一些其他的操作系統任務。它可以直接和硬件設備進行交互。作為app開發者不需要與這一層打交道。
包含 Accelerate Framework、External Accessory Framework、Security Framework、System 等幾個框架,基本都是基於 c 語言的接口。
低層次框架提供 iOS 的基本服務和技術;高層次框架建立在低層次框架之上,用來提供更加復雜的服務和技術,較高級的框架向較低級的結構提供面向對象的抽象。
在開發應用時應盡可能使用較高級的框架。如果要開發的功能在高層框架中沒有提供,也可以使用較低層框架和技術。
Foundation 和 UIKit 框架是應用編程用到的兩個主要的框架,能夠滿足大多數應用程序的開發需求。
UIKit 框架提供的類,用於創建基於觸摸的用戶界面。所有 iOS 應用程序都是基於 UIKit,沒有這個框架,就無法交付應用程序。UIKit 提供應用程序的基礎架構,用於在屏幕上繪圖、處理事件,以及創建通用用戶界面及其中元素。UIKit 還通過管理屏幕上顯示的內容,來組織應用程序。
Foundation 框架為所有應用程序提供基本的系統服務。應用程序以及 UIKit 和其他框架,都是建立在Foundation 框架的基礎結構之上。Foundation 框架提供許多基本的對象類和數據類型,使其成為應用程序開發的基礎。它還制定了一些約定(如用於取消分配等任務),使代碼更加一致,可復用性更好。
二、Cocoa Touch Layer
Cocoa Touch 層包含如下框架:
2.1 Address Book UI Framework
地址本 UI 框架。
該框架提供一個面向對象的編程接口。用來顯示標准的系統接口,來創建新的聯系人和編輯和選擇已存在的聯系人。
2.2 Event Kit UI Framework
月歷事件 UI 框架。
該框架提供一個視圖控制器來呈現標准的系統接口,來觀察和編輯月歷相關的事件。EventKit UI Framework 基於 Event Kit framework 框架。
2.3 Game Kit Framework
游戲工具框架。
該框架實現對游戲中心的支持,讓用戶能夠在線共享他們的游戲相關的信息。
2.4 iAd Framework
iAD 框架。
該框架用來在應用中提供廣告條。當你想要顯示廣告時,廣告條與用戶 UI 上的標准的視圖進行合並。這些視圖與蘋果的 iAd 服務一起工作,自動處理、加載和呈現富媒體廣告以及應答在那些廣告條上的點擊等所有相關的工作。
2.5 Map Kit Framewor
地圖工具框架。
MapKit 提供與應用的 UI 組合的一個可滾動的地圖。
除了顯示一個地圖,你能使用該框架接口來定制地圖的內容和外觀,也能使用注解來標記感興趣的點,也能使用定制的內容來與地圖內容疊置。例如,你可以在地圖上來畫一條公交路線,或者使用注解來高亮顯示附近的商店和餐館。
除了顯示地圖,MapKit 框架還能與地圖應用以及蘋果的地圖服務器集成來為用戶指引方向。
地圖應用能夠給任意支持方向的應用提供方向的代理。如提供特定類型方向的應用,例如一個顯示地鐵路線的應用,能登記請求接收地圖應用提供的方向。
應用也能向蘋果的服務器請求步行或駕駛方向,並與他們定制的方向的路徑信息混合來為用戶提供完整的點到點體驗。
2.6 Message UI Framework
消息 UI 框架。
該框架用來在應用中提供編輯郵件和 sms 消息的支持。
編輯支持包括一個呈現到你的應用的視圖控制器接口,並能設置這個視圖控制器的一些區域,如接收人、主題、郵件主體和郵件想包括的任意附件。
在呈現視圖控制器后,也能為用戶提供一個在發送郵件之前可以編輯郵件的選項。
2.7 UIKit Framework
該框架提供實現圖形和事件驅動的應用的至關重要的基礎。包括:
- 基本的應用管理和基礎設施,包括應用的主循環;
- 用戶接口管理,包括對 storyboards 和 nib 文件的支持;
- 一個用來封裝用戶 UI 內容的視圖控制器模式;
- 標准系統視圖和控制對象;
- 提供處理觸摸和運動事件的支持;
- 支持包括與 iCloud 集成功能的文檔模式;
- 圖形和窗口支持,包括支持外部顯示器;
- 多任務支持;
- 打印支持;
- 定制標准 UIKit 控制的外觀;
- 支持文本和 web 內容;
- 剪切、復制、粘貼的支持;
- 支持動畫 UI;
- 通過 url 語義和框架接口與系統提供的其它應用集成的能力;
- 對有障礙用戶的可存取性的支持;
- 支持 ApplePush Notification 服務;
- 本地通知調度和提交;
- pdf 創建;
- 支持定制像系統鍵盤行為一樣的用戶輸入視圖;
- 支持創建與系統鍵盤交互的定制的文本視圖;
- 支持通過 email,Twitter,Facebook和其它服務共享內容。
也支持一些設備特定功能的集成:
- 內建的攝像機;
- 用戶的圖片庫;
- 設備名和模式信息;
- 電池狀態信息;
- 接近傳感器信息;
- 來自附件耳機的遠程控制信息
三、MediaLayer
媒體層包含在應用中實現多媒體體驗的圖形、聲音、視頻技術和框架。使用這層的技術可以使你容易的建立更加好看和好聽的應用。
3.1 圖形技術
高質量的圖形是所有應用的重要的組成部分。iOS 提供了許多幫助你定制藝術和圖形屏幕的技術。iOS 圖形技術為其提供了廣泛的支持,並可以與 UIKit 視圖架構無縫工作。
你能使用標准的視圖來快速提交高質量的接口,或者使用本層的圖形技術創建你自己的定制視圖來提交一個更加豐富的圖形體驗。
UIKit graphics
- UIKit 定義的繪制圖像和 Bézier 路徑,以及動畫視圖內容的高級別技術。
- UIKit 視圖提供快速和有效的方式來呈現圖像和文本內容。
- UIKIT 視圖也能通過顯示和使用 UIKitdynamics 技術進行動畫,並為用戶提供反饋,促進用戶交互。
CoreGraphics 框架
CoreGraphics 也稱作 Quartz,是對定制的 2D 向量和圖像呈現提供支持的本地繪制引擎。
該框架提供的引擎雖然沒有 OpenGLES 引擎速度快,但該框架能夠很好地適合於呈現定制的 2D 圖形和動態圖像。
CoreAnimation 框架
CoreAnimation 也是 Quartz 核心框架的一部分,是優化應用動畫體驗的基礎技術。
UIKit 視圖基於 Core Animation 提供視圖級別的動畫支持。當你想對動畫行為有更多控制時也能直接使用 CoreAnimation。
Core Image
CoreImage 提供非破壞的方式操作視頻和靜態圖像。
OpenGL ES 及 GLKit
- OpenGLES 使用硬件加速接口來處理先進的 2D 和 3D 呈現。OpenGLES 通常由游戲開發者或想實現沉浸式圖像體驗的開發者使用。
- OpenGLES 框架提供對呈現過程的全部控制,以及提供創建平滑動畫所需要的幀速。
- GLKit 是一組 Objective-C 類,以便能夠使用面向對象接口來提供 OpenGL ES 的強大能力。
Text Kit 和 CoreText
- Text Kit 是 UIKit 框架的家族,用來執行最好的排面和文本管理。如果你的應用實現先進的文本操作,Text Kit 提供與應用視圖的無縫集成。
- CoreText 是處理先進排面和布局的低級別的 C 語言框架。
Image I/O
ImageI/O 提供讀寫大多數圖像格式的接口。
Assets Library
AssetsLibrary 框架讓你存取用戶的圖片、視頻和媒體。你想在應用中集成用戶自己的內容時可以使用該框架。
3.2 聲音技術
聲音技術工作於底層硬件之上,為用戶提供更加豐富的聲音體驗。這些體驗包括播放和記錄高質量的聲音、處理MIDI內容以及使用設備內建的聲音 等能力
Media Player framework
該框架是一個高級別的框架, 用來為用戶提供對 iTunes 庫存取的容易方式,也提供對播放軌跡和播放列表的支持。
當你想快速在應用中集成聲音以及不需要控制播放行為時可以使用該框架。
AV Foundation
AVFoundation 是管理聲音以及視頻播放和記錄的面向對象接口。在記錄聲音和想對聲音播放過程有更好的控制時可以使用該框架。
OpenAL
OpenAL 是一個提供位置音效的跨平台的工業標准技術和接口。游戲開發者經常使用該技術來提供高質量的聲音。
Core Audio
Core Audio 是一組簡單和智能的接口來記錄和播放聲音以及 MIDI 內容。在需要對聲音有更好控制時使用該框架。
3.3 視頻技術
視頻技術提供管理應用中的靜態視頻內容或者播放來自 Internet 的視頻流的支持。對於帶有適當的記錄硬件的設備,該框架還能夠記錄視頻以及與應用進行集成。
UIImagePickerController
UIImagePickerController 是一個選擇用戶媒體文件的 UIKit 視圖控制器。
Media Player
MediaPlayer 框架提供一組呈現視頻內容的簡單易用的接口,該框架支持全屏和小窗口視頻播放,也為用戶提供可選的播放控制。
AVFoundation
AVFoundation 提供先進的視頻播放和記錄能力。
在需要對視頻呈現和記錄有更多的控制時使用該框架,例如在實時應用中分層顯示實時視頻和應用提供的其它內容。
CoreMedia
CoreMedia 框架為操作媒體定義低級別的數據類型和接口。當你需要對視頻內容有無比的控制時可以使用該框架。
3.4 AirPlay 技術
AirPlay 讓應用串流聲音和視頻內容到 Apple TV 或者串流聲音內容到第三方揚聲器和接收器。
AirPlay 內建於許多框架,包括 UIKit、Media Player、AVFoundation、Core Audio。因此在大多數情況你不需要為了支持它做任何事。
在使用那些框架時,當播放內容時自動獲得 AirPlay 支持。當用戶選擇使用 AirPlay 播放內容時系統自動進行路由。
框架 | 服務內容 |
---|---|
Assets Library | AssetsLibrary.framework 提供對用戶設備上圖片應用管理的圖片和視頻的存取。 使用該框架來存取用戶保存的圖片相冊或導入到設備的任意相冊中的圖片,你也能保存新的圖片和視頻到用戶的圖片相冊。 |
AV Foundation | AVFoundation.framework 提供一組播放、記錄和管理聲音和視頻內容的Objective-C 類。 當你想在應用的 UI 接口無縫集成媒體能力時使用該框架。你也能使用它來進行更先進的媒體處理,例如同時播放多個聲音或者控制播放和記錄過程的多個方面。 該框架提供的服務包括: 1. 聲音會話管理,包括對系統聲明你的應用聲音能力; 2. 對應用媒體資源的管理; 3. 對編輯媒體內容的支持; 4. 捕捉聲音和視頻的能力; 5. 播放聲音和視頻的能力; 6. 軌跡管理; 7. 媒體元數據的管理; 8. 立體拍攝; 9. 聲音之間的精確同步; 10. 提供一個確定聲音文件細節內容的 Objective-C 接口,例如數據格式,采樣率,通道數; 11. 通過 AirPlay 串流內容。 |
Core Audio | Core Audio 是一個對聲音處理提供本地支持的框架家族。這些框架支持聲音的產生、記錄、混合和回放。 你也能使用這些接口處理 MIDI 內容以及串流聲音和 MIDI 內容到其它應用。 Core Audio 框架包括如下框架: 1. CoreAudio.framework:定義 Core Audio 框架使用的所有數據類型。 2. AudioToolbox.framework:提供聲音文件和聲音流的播放和記錄服務。也提供管理聲音文件,播放系統警告聲音,在某些設備上觸發震動的支持。 3. AudioUnit.framework:提供使用內建聲音單元。也提供使你的應用的聲音內容作為對其它應用可視的聲音組件的支持。 4. CoreMIDI.framework:提供與 MIDI 設備通訊的標准方式,包括硬件鍵盤和合成器。你使用這個框架來發送和接收 MIDI 消息以及與通過 dock 連接器或網絡連接到 iOS 設備的 MIDI 外設交互。 5. MediaToolbox.framework:提供對聲音 tap 接口的存取。 |
Core Graphics | CoreGraphics.framework 包含Quartz 2D 繪制 api。 Quartz 是一個原先用在 OS X 的先進的、向量繪制引擎。Quartz 支持路徑繪制,抗鋸齒呈現,剃度、圖像、顏色、坐標空間轉換以及 pdf 內容創建、顯示和分析等功能。 雖然這個 api 是 C-based 接口,但它使用了面向對象抽象來表現基本的繪制對象,因此使它容易存儲和重用圖形內容。 |
Core Image | CoreImage.framework 提供一組強大的內建過濾器來操作視頻和靜態圖像。 你能在觸摸彈起、糾正圖片以及面部和特征檢測等許多方面使用這些內建的過濾器。這些過濾器的先進特點是它們操作在非破壞方式,即原先的圖像不被改變。 這些過濾器針對底層硬件進行了優化,因此它們是快速和有效的。 |
Core Text | CoreText.framework 提供一個對文本進行布局和字體處理的簡單的、高性能的 C-based 接口。 該框架用在不使用 TextKit 但仍想獲得在字處理應用中發現的先進文本處理能力。 該框架提供了一個智能的文本布局引擎,包括在其它內容周圍環繞文本的能力,它也支持使用多種字體和呈現屬性的先進的文本風格。 |
Core Video | CoreVideo.framework 為 Core Media 框架提供緩沖和緩沖池支持。多數應用從不直接使用該框架。 |
Game Controller | GameController.framework 讓你在應用中發現和配置針對 iPhone/iPod/iPad 設備的游戲控制器。 游戲控制器可以是物理連接到 iOS 設備或者是通過藍牙無線連接。GameController 框架當控制器可獲得時通知你的應用讓應用可以規定哪個控制器輸入與你的應用相關。 |
GLKit | GLKit.framework 包含一組簡化創建 OpenGLES 應用的 Objective-C based 單元類。 GLKit 支持應用開發的四個關鍵領域: 1. GLKView 和 GLKViewController 類提供一個 OpenGLES 視圖和其呈現循環的標准實現。OpenGLES 視圖代表應用管理底層的 framebuffer 對象。應用只需在視圖上繪制。 2. GLKTextureLoader 類提供在你的應用中使用圖像轉換和加載線程,允許應用自動加載紋理圖像到應用的上下文。能夠異步或同步加載紋理。當異步加載紋理時,應用應提供一個完成處理塊,該處理塊在紋理加載進應用上下文時被調用。 3. GLKit 框架提供向量、矩陣和 3D 旋轉以及提供 OpenGLES 1.1 上的矩陣。 4. GLKBaseEffect、GLKSkyboxEffect 和 GLKReflectionMapEffect 類實現給通用圖形操作提供可配置的圖形着色。尤其 GLKBaseEffect 類實現了 OpenGL ES 1.1 規范上的光亮和材質模式,簡化了移植一個應用從 OpenGL ES 1.1 到 OpenGL ES 最后版本的努力。 |
Image I/O | ImageIO.framework 提供輸入和輸出圖像數據和圖像元數據的接口。 該框架利用 CoreGraphics 數據類型和功能,並支持在 iOS 上所有的可獲得的標准的圖像類型。你能使用這個框架存取 Exif 和 IPTC 元數據屬性。 |
Media Accessibility | MediaAccessibility.framework 管理媒體文件中 closed-caption 內容的呈現。 該框架與新的設置配合工作可以讓用戶決定是否允許 closed-caption 顯示。 |
Media Player | MediaPlayer.framework 提供應用中播放聲音和視頻的高級別支持。 能夠使用該框架做如下工作: 1. 播放視頻到用戶屏幕或通過 AirPlay 到另外的設備屏幕。能夠全屏幕播放視頻或以可改變視圖大小的方式播放。 2. 存取用戶的 iTunes 音樂庫。能夠播放音樂軌跡和播放列表、搜索音樂、給用戶提供一個媒體 picker 呈現接口。 3. 配置和管理電影的回放。 4. 在鎖定屏幕和 app 切換窗口上顯示 NowPlaying 信息。當內容通過 AirPlay 提交時還能顯示到 AppleTV 上。 5. 檢測視頻通過 AirPlay 被串流的時間。 |
OpenAL | OpenAudio Library(OpenAL)接口是用來在應用中提供位置音效的跨平台的標准。 能夠使用該接口在游戲和其它需要位置音效輸出的程序中實現高性能、高質量的聲音。 因為 OpenAL 是跨平台的標准,在 iOS 使用 OpenAL 編寫的代碼能夠容易地移植到許多其它平台。 |
OpenGL ES | OpenGLES.framework 提供繪制 2D 和 3D 內容的工具,它是一個 C-based 的框架。 該框架以最接近設備硬件的方式為全屏沉浸式應用例如游戲提供細粒度的圖形控制和高的幀率。 你能夠與 EAGL 配合使用這個框架,為 OpenGL ES 繪制調用和 UIKit 的本地窗口對象之間提供接口。 該框架支持 OpenGLES 1.1,2.0,3.0 規范。2.0 規范增加了片段和頂點着色的支持,3.0 規范增加了更多的功能,包括多個呈現目標和變換反饋。 |
Quartz Core | QuartzCore.framework 包含 Core Animation 接口。 Core Animation 是一個先進的復合技術,使用它能容易創建快和有效的 view-based 的動畫。 復合引擎利用底層硬件來有效的實時操作視圖內容。 只需規定動畫的起始點,CoreAnimation 做剩下的工作。因為 Core Animation 內嵌在UIView架構的底層,因此它總是可用的。 |
Sprite Kit | SpriteKit.framework 框架為 2D 和 2.5D 游戲提供硬件加速的動畫系統。 SpriteKit 提供大多數游戲需要的基礎,包括一個圖形引擎和動畫系統,聲音播放支持,一個物理仿真引擎。 使用 SpriteKit 不需你自己創建這些事情,使你聚焦在內容設計和內容的高級別的交互上。 在 Sprite Kit 應用中內容組織為場景。一個場景包括紋理對象,視頻,路徑圖形,核心圖像過濾器和其它的特效。 SpriteKit 利用這些對象,確定這些對象到屏幕上的最有效的方式。 當在場景中到了動畫內容的時刻,你能使用 SpriteKit 來顯式規定你想執行的行動或使用物理仿真引擎來為那些對象定義物理行為(例如重力、引力或排拆力)。 除了 SpriteKit 框架,也有其它 Xcode 工具來創建顆粒發射效果和紋理圖。你能使用 Xcode 工具來管理應用資源和快速地更新 Sprite Kit 場景。 |
四、CoreServices Layer
CoreServices Layer 包含應用需要的基礎的系統服務。這些服務中的核心是 CoreFoundation 和 Foundation 框架,定義了所有應用使用的基本類型。
該層也包含獨立的技術來支持一些其它功能,例如位置、iCloud、社交媒體和網絡。
4.1 包含的高級功能
Peer-to-Peer Services
點到點服務。
Multipeer Connectivity 框架提供通過藍牙進行 p2p 連接的能力。
你能使用 p2p 連接來啟動與附近設備的通訊會話。雖然 p2p 連接主要用在游戲中,你也能在其它類型的應用中使用這個功能。
iCloud Storage
雲存儲。
iCloud 存儲讓應用把用戶文檔和數據寫到一個中心位置,用戶然后能從他們的計算機和 iOS 設備存取這些數據。
使用 iCloud 可以使用戶文檔無所不在,意味着用戶能從任何設備閱讀或編輯那些文檔,而不需要顯式的同步或文件傳輸。存儲文檔到用戶的 iCloud 賬戶也為用戶提供了一層安全。即使用戶的設備丟失,那些設備上的文檔如果已經保存到 iCloud 就不會丟失。
應用能以兩種方式使用 iCloud 存儲,每一種有不同的使用意圖:
iCloud 文檔存儲。
可以使用這個功能在用戶的 iCloud 賬戶存儲用戶文檔和數據。
iCloud 鍵值存儲。
使用這個功能在應用之間共享數據。
大多數應用使用 iCloud 文檔存儲來共享來自用戶賬戶的文檔。使用 iCloud 文檔存儲用戶關心的是文檔能否能夠在設備之間共享以及他們是否能夠從一個給定設備查看和管理那些文檔。
相對的,iCloud 鍵值存儲是應用與應用的其它實例共享小量數據(幾十k字節)的方式,應用應當用它存儲非緊急的應用數據,例如設置。
Automatic Reference Counting
自動引用計數。
AutomaticReference Counting(ARC)是一個編譯級別的功能,用它來簡化 Objective-C 對象生命周期過程的管理,以此代替用戶必須記住什么時候應該保持和釋放對象。
ARC 評估對象的生命周期需求和自動在編譯時間插入適當的方法調用。
ARC 用來代替 ios 的早期版本中存在的傳統的管理內存的編程模式。
新創建的工程自動使用 ARC。Xcode 也提供了移植工具幫助你轉換遺留的工程來使用 ARC.
Block Objects
塊對象。
BlockObjects 是一個能夠與你的 C 或 Objective-C 代碼集成的 C 語言的構造塊。一個blockobject 本質上是一個異步功能和相關的數據。
在其它語言中有時也被稱做 closure 或 lambda。
Blocks 尤其用作回調或放在你需要一種容易的組合執行代碼和相關數據方式的地方。
在 iOS,通常在下面的場景使用 Blocks:
- 作為代理或代理方法的代替;
- 作為回調功能的代替;
- 為某個一次性操作實現其完成處理函數;
- 在一個集合中的所有項上執行一個任務;
- 與提交隊列一起執行異步任務。
Data Protection
數據保護。
DataProtection 允許應用利用設備上已有的內建的加密方法來使用用戶的敏感數據。
- 當應用指定一個特定的文件被保護時,系統在磁盤上以加密格式存儲該文件。
- 當設備鎖定時,該文件的內容不能被應用和任何潛在的侵入者存取。
- 可是當設備由用戶解鎖時,一個解密key被創建允許你的應用存取那個文件。
- 用戶也可以使用其它級別的數據保護機制。
實現數據保護需要你考慮如何創建和管理你想保護的數據。應用必須設計在數據的創建時間加密數據,以及當用戶鎖定或解鎖設備時為存取條件改變做好准備。
File-Sharing Support
文件共享支持。
File-SharingSupport 使用戶數據文件在 iTunes 9.1 和以后上可被其它應用獲得。
一個應用聲明支持文件共享使它的
/Documents
目錄下的內容對其它用戶可獲得。用戶然后當需要時能夠把文件從 iTunes 移進或移出應用的 Documents 目錄。這個特征不允許應用與相同設備上的其它應用共享應用,這需要粘貼板或一個文檔交互控制器對象。
應用為了允許文件共享支持,需要做如下工作:
- 在應用的 Info.plist 文件中增加 UIFileSharingEnabled 鍵,並設置其值為 YES。
- 在你的應用的 Documents 中放你想共享的文件;
- 當設備插進用戶的計算機時,iTunes 在選中設備的 Apps 標簽下顯式一個文件共享節;
- 用戶然后能夠增加文件到設備的文檔目錄或移動文件到桌面。
支持文件共享的應用應該能夠識別文件什么時候增加到其Documents目錄和做出適當的應答。例如應用可以使任意新文件的內容可以從它的接口獲得。也應該從不把 Documents 目錄的文件列表呈現給用戶來請求用戶決定對那些文件做什么。
Grand Central Dispatch
GrandCentral Dispatch(GCD)是一個 BSD 技術,應用可以用來管理其任務的執行。
GCD 與高優化的核組合成一個異步編程模式,來提供方便和更有效的對線程的替代。GCD 也為許多低級別的任務提供一個方便的選擇,例如讀和寫文件描述符,實現定時器和監視信號和處理事件。
In-App Purchase
應用內購買。
In-App Purchase 提供在應用中銷售應用特定的內容和服務以及來自 iTunes 的內容的能力。
這個功能使用 StoreKit 框架實現,並提供使用用戶的 iTunes 賬號來處理金融方面的事務需要的基礎。
應用處理全部用戶體驗和供購買的內容及可獲得服務的呈現。作為可下載的內容,你能把可下載的內容放到你自己的服務器或使用蘋果的服務器。
SQLite
SQLite 庫讓你在你的應用中嵌入一個輕量級的 sql 數據庫,而不需要運行一個分離的遠程數據庫服務進程。
從你的應用,你能創建本地數據庫文件,管理數據庫表和表中的數據記錄。
SQLite 庫為通用功能使用設計,但已經被優化來提供對數據記錄更快速的存取。
XML Support
Foundation 框架提供一個 NSXMLParser 類用來從一個 xml 文檔中引出元素。
操作 xml 內容的額外的支持由 libxml2 庫提供支持。libxml2 開源庫讓你快速地分析或寫任意的 xml 數據和轉換 xml 內容到 html.
框架 | 服務內容 |
---|---|
Accounts Framework | Accounts.framework 為確定的用戶賬號提供單點登錄模式。 單點登錄通過消除用戶分離的多個賬號需要的多次登錄提示,來增強用戶體驗。它也通過為應用管理賬號認證過程來簡化開發模式。 該框架需要與 Social 框架配合使用。 |
Address Book Framework | AddressBook.framework 提供可編程存取用戶的聯系人數據庫的方式。 如果應用使用聯系人信息,你能使用該框架來存取和修改聯系人信息。例如一個聊天應用可以使用該框架來引出可能的聯系人列表,通過聯系人列表來啟動一個會話以及在特定視圖顯示那些聯系人。 重要提示:存取用戶的聯系人數據需要用戶的明確的許可。應用因此必須准備好用戶拒絕存取的情形。應用也鼓勵提供Info.plist鍵來描述需要存取的原因。 |
Ad Support Framework | AdSupport.framework 提供存取應用用於廣告功能的一個標識。 該框架也提供一個指示用戶是否選擇廣告跟蹤的標志。應用在試圖存取廣告標識前需要度和判斷這個標志。 |
CFNetwork | CFNetwork.framework 是高性能的使用面向對象對網絡協議進行抽象的一組 C-based 接口。這些抽象提供對協議棧細節的控制,使它容易使用低級別的構造例如 BSDsockets。 你能使用該框架簡化與 ftp 或 http 服務器通訊或決定 dnshosts 的任務。 使用 CFNetwork 框架,你能: 1. 使用 BSD sockets。 2. 使用 SSL 或 TLS 創建安全連接。 3. 決定dnshosts。 4. 與 HTTP 服務器、認證 HTTP 服務器、HTTPS 服務器交互。 5. 與 FTP 服務器交互。 6. 發布、解決和瀏覽 Bonjour 服務。 CFNetwork 物理和理論上基於 BSD sockets。 |
Core Data | CoreData.framework 框架是管理 MVC 應用中的數據模式的一種技術。 CoreData 框架打算在數據模式是高結構化的應用中使用。 代替編程定義數據結構,在 Xcode 中能夠使用圖形工具來建立一個表現你的數據模式的綱要。在運行時,你的數據模式實體的實例通過 CoreData 框架被創建、管理和獲得。 通過為你的應用管理其數據模式,CoreData 大大減少了必須書寫的代碼量。 CoreData 也提供如下功能: 1. 為優化性能在 SQLite 數據庫中存儲對象數據; 2. 一個管理數據表視圖結果的 NSFetchedResultsController 類; 3. 對基本的文本編輯之外的 undo/redo 的管理; 4. 支持屬性值的校驗; 5. 支持傳播改變確保對象之間的關系保持一致性; 6. 支持分組、過濾和在內存中優化數據。 如果你開始開發一個新應用或計划對已有應用進行大的更新,應該考慮使用 CoreData。 |
Core Foundation | CoreFoundation.framework 是一組 C-based 接口,為 iOS 應用提供基本的數據管理和服務功能。 該框架包括如下支持: 1. 集合數據類型(數組、集合等等); 2. 應用打包 Bundles; 3. 字符串管理; 4. 日期和時間管理 5. 原始數據塊管理 6. Preferences管理; 7. URL 和流操作; 8. 線程 9. 端口和 socket 通訊。 CoreFoundation 框架與 Foundation 框架緊密相關,為相同的基本功能提供 Objective-C 接口。 當你需要混合使用 Foundation 對象和 Core Foundation 類型時,你能利用兩個框架之間存在的“toll-freebridging”。 toll-free bridging”意味着你能可交換地在兩個框架的方法和功能中使用一些 CoreFoundation 和 Foundation 類型。這個支持對許多數據類型可用,包括集合和字符串數據類型。 每個框架的類和類型描述聲明一個對象是否是 toll-freebridged以及在是的情況下來標識它連接到什么對象。 |
Core Location | CoreLocation.framework 為應用提供位置信息。該框架使用板上的 GPS、蜂窩、或者Wi-Fi來定位用戶的當前經度和緯度。 你可在你的應用中集成該技術為用戶提供位置信息。例如,你可實現一個基於用戶的當前位置搜索附近餐館、商店或者銀行的應用。 CoreLocation 框架也提供如下能力: 1. 在包括磁力計的 iOS 設備上存取羅盤信息; 2. 基於地理位置或藍牙 beacon 進行區域監視; 3. 支持使用蜂窩基站的低耗電的位置監視; 4. 與 MapKit 配合來增強在特定情景下的位置數據的質量,例如開車時。 |
Core Media Framework | CoreMedia.framework 提供由 AV Foundation 框架使用的低級別的媒體類型。 大多數應用從不需要使用該框架,但少數需要更精確控制音視頻內容創建和呈現的開發者可以使用它。 |
Core Motion Framework | CoreMotion.framework 提供一組接口來存取設備上可獲得的運動數據。 該框架支持使用一組新的 block-based 接口來存取原始和加工過的加速度計數據。對於帶有陀螺儀的設備,你也能獲得原始的陀螺儀數據和加工過的反應設備方向和旋轉速度的數據。 你能在游戲或其它使用運動作為輸入或作為增強用戶體驗的方式的應用中使用加速度計和陀螺儀兩種數據。對於帶有計步硬件的設備,你能存取它的數據來跟蹤健康相關的運動。 |
Core Telephony Framework | CoreTelephony.framework 提供與蜂窩電話的通話相關的信息交互的接口。 可以使用該框架來獲得用戶的蜂窩服務提供者的信息。對於對蜂窩 call 事件感興趣的應用例如 VoIP 應用也能在那些事件出現時被通知。 |
Event Kit | EventKit.framework 提供存取用戶設備上的月歷事件的接口。 能夠使用該框架來做如下事情: 1. 獲得用戶月歷上存在的事件和提示; 2. 增加事件到用戶月歷; 3. 為用戶創建提示和使它們出現在提示應用中; 4. 為月歷事件配置提示信號,包括設置提示信號應該什么時候觸發的規則。 重要提示:存取用戶的月歷和提示數據需要用戶的明確許可。應用因此必須准備好用戶拒絕的情形,也鼓勵應用在其 Info.plist 文件中提供一個描述需要存取原因的鍵。 |
Foundation | Foundation.framework 提供 Core Foundation 框架提供的許多功能的 Objective-C 封裝。 該框架提供如下功能的支持: 1. 集合數據類型(數組、集合等等); 2. 應用打包 Bundles; 3. 字符串管理; 4. 日期和時間管理 5. 原始數據塊管理 6. Preferences 管理; 7. URL 和流操作; 8. 線程和運行環; 9. Bonjour; 10. 通訊端口管理; 11. 國際化; 12. 規則表達式匹配; 13. Cache 支持。 |
JavaScriptCore | JavaScriptCore.framework 為許多標准的 JavaScript 對象提供 Objective-C 語言的封裝。使用該框架來執行 JavaScript 代碼和分析 JSON 數據。 |
Mobile Core Services | MobileCoreServices.framework 定義在通用類型標識符(UTIs)中使用的低級別類型。 |
Multipeer Connectivity Framework | MultipeerConnectivity.framework 支持附近設備的發現,並與那些設備直接通訊(不需要Internet連接)。 使用該框架能夠與附近設備通訊、容易的創建多人會話、支持可靠地傳輸順序和實時數據。 該框架為發現和管理網絡服務提供可編程和 UI-based 的選項。應用能在 UI 中集成 MCBrowserViewController 類來顯示一個發現設備列表讓用戶選擇。 另外也能使用 MCNearbyServiceBrowser 類來可編程的查找和管理對方設備。 |
Newsstand Kit | Newsstand 應用為用戶提供了一個閱讀雜志和報紙的中心位置。想通過 Newsstand 提供雜志和報紙內容的出版商能夠使用 NewsstandKit 框架(NewsstandKit.framework)創建它們自己的 iOS 應用,讓用戶啟動新雜志和報紙新聞的后台下載。在啟動下載后,系統處理下載操作和當內容可獲得時通知應用。 |
Pass Kit | Passbook 應用為用戶提供了一個存儲訂貨單、登機卡、入場券和商業折扣卡的位置。代替物理攜帶這些東西,用戶現在能在 iOS 設備上存儲它們,並和過去一樣的方式使用。 Pass Kit 框架 (PassKit.framework)提供把這些功能集成到你的應用的 Objective-C 接口。 你能與web 接口和文件格式信息組合使用該框架來創建和管理你們公司提供的電子入場券。 電子入場券由你們公司的 web service創建並通過 email、Safari 或定制的應用提交到用戶的設備。 電子入場券本身使用特殊的文件格式,在提交之前被加密簽名。文件格式標識關於提供服務的相關信息以及用戶知道是什么服務的信息。 電子入場券也可以包含一個對卡進行校驗的條碼或其它信息,以便它能被兌換或使用。 |
Quick Look | QuickLook.framework 提供了一個預覽應用不直接支持的文件內容的接口。 該框架主要打算用於應用從網絡下載文件或處理來自不知道來源的文件的工作。 在得到文件后,你能使用該框架提供的視圖控制器來直接顯示文件的內容。 |
Safari Services | SafariServices.framework 提供以可編程的方式增加 URLs 到用戶的 Safari 的書簽的支持。 |
Social Framework | Social.framework 提供一個簡單的接口來存取用戶的社交媒體賬號。 該框架取代 Twitter 框架並增加了其它社交賬號,包括 Facebook、Sina 微博以及其它。 應用能使用該框架提交狀態更新和圖像到用戶賬號。該框架與 Accounts 框架一起為用戶提供單點登錄並確保存取的用戶賬號是經過准許的。 |
Store Kit | StoreKit.framework 提供在 iOS 應用中購買內容和服務的支持,也被稱作應用內購買。 例如,你能使用該功能來允許用戶去鎖另外的應用功能。或者如果你是一名游戲開發者,你能使用它來提供另外的游戲級別。 在這兩種情況,StoreKit 框架處理事務的收入方面事務,包括通過用戶的 iTunes 賬號處理付費請求,給應用提供關於購買的信息。 Store Kit聚集在事務的金融方面,確保事務正確和安全。你的應用處理事務的其它方面,包括購買接口的呈現和適當內容的下載(去鎖)。 工作的分工讓你能夠控制購買內容的用戶體驗。由你決定你想呈現給用戶什么樣的購買接口和什么時候那樣做,你也決定你的應用最好的提交機制。 |
System Configuration Framework | SystemConfiguration.framework 提供可達性接口,你能用它來確定設備的網絡配置,也能使用該框架確定一個 Wi-Fi 或蜂窩連接是否在用以及一個特定的主機服務器是否能夠存取。 |
五、Core OS Layer
Core OS 是用 FreeBSD 和 Mach 所改寫的 Darwin,是開源、符合 POSIX 標准的一個 Unix 核心。
CoreOS 層包含其它大多數技術建在其之上的低級別的功能。雖然應用不直接使用這些技術,它們被其它框架使用。在需要顯而易見的處理安全或與外設通訊的情形,你也能使用該層提供的框架。
Accelerate 加速框架
Accelerate框架 (Accelerate.framework)包含執行數字信號處理、線性代數、圖像處理計算的接口。
使用該框架的優點是它們針對所有的ios設備上存在的硬件配置做了優化,因此你能寫一次代碼確保在所有設備上有效運行。Core Bluetooth Framework(核心藍牙框架)
CoreBluetooth 框架 (CoreBluetooth.framework)允許開發者與藍牙低耗電外設(LE)交互。
使用該框架的Objective-C接口能夠完成如下工作:
- 掃描藍牙外設,連接和斷開發現的藍牙外設;
- 聲明應用的服務,轉換 iOS 設備成其它藍牙設備的外設;
- 從 iOS 設備廣播 iBeacon 信息;
- 保存你的藍牙連接的狀態,當應用重新啟動時恢復那些連接;
- 藍牙外設可獲得性變化時獲得通知。
External Accessory Framework(外部附件框架)
ExternalAccessory 框架(ExternalAccessory.framework)提供與連接到IOS設備的硬件附件通訊的支持。
附件能通過 30-pin 連接器或使用藍牙無線與 iOS 設備進行連接。該框架給你提供了獲得關於每一個可獲得的附件信息和啟動通訊會話的方式。然后,你可自由的使用附件支持的命令直接操作附件。
Generic Security Services Framework(通用安全服務框架)
GenericSecurity Services 框架 (GSS.framework)給ios應用提供一組標准安全相關的服務。該框架的基本接口規定在IETFRFC2743 andRFC4401。除了提供標准的接口,IOS還包括一些沒有在標准中規定但被許多應用需要的一些管理證書需要的額外東西。
Security Framework(安全框架)
除了內建的安全功能,IOS也提供了一個明確的安全框架(Security.framework),你能用它來保證應用管理的數據的安全。
該框架提供管理證書、公有和私有key和信任策略的接口。支持產生加密安全偽隨機碼。它也支持在keychain(保存敏感用戶數據的安全倉庫)中保存證書和加密 key。公共加密庫提供對稱加密、hash認證編碼(HMACs)、數字簽名等額外支持,數字簽名功能本質上與iOS上沒有的OpenSSL庫兼容。
在你創建的多個應用之間共享keychain是可能的。共享使它容易在相同的一套應用之間更平滑的協作。例如,你能使用該功能來共享用戶口令或其它元素,否則可能使每個應用都需要提示用戶。
為了在應用之間共享數據,必須為每個應用的 Xcode 工程配置適當的權限。
System
System 級包含 kernel 環境、驅動以及操作系統級別的 unix 接口。kernel 本身負責操作系統的每一個方面:如虛擬內存管理、線程、文件系統、網絡和互聯通信。
在該層的驅動也提供在可獲得的硬件與系統框架之間的接口。為了安全,對 kernel 和驅動的存取被限制到一組有限的系統框架和應用。
iOS 提供一組存取許多操作系統低級別功能的接口。應用通過 LibSystem 庫存取這些功能。
該 C-based 的接口提供如下功能的支持:
- 多任務(POSIX 線程和 GCD)
- 網絡(BSDsockets)
- 文件系統存取
- 標准 I/O
- Bonjour 和 DNS 服務
- 位置信息
- 內存分配
- 數學計算
64-Bit Support
iOS原先是為32-bit架構的設備設計的。自iOS 7,開始支持在64-bit進行編譯、鏈接和調試。所有的系統庫和框架是支持64位的,意味着它們能在32-bit和64-bit應用中使用。
當以 64-bit 運行時編譯時,應用可能運行的更快,因為在64-bit模式可以獲得額外的處理器資源。
iOS使用OS X和其它64-bitUNIX系統使用的LP64模式,意味着在這些系統移植時不會碰到太頭疼的事。