iPhone SDK 包含哪些東西?
蘋果公司將大部分系統介面發布在架構這種特殊的資料包。一個架構就是一個目錄,它包含一個動態共用程式庫以及使用這個庫所需的資源(例如標頭檔、映像以及輔助應用程式等)。如果要使用某個架構,則需要將其連結到應用程式工程,這一點和使用其他共用庫相似。另外,您還需要告知開發工具何處可以找到架構標頭檔以及其他資源
除了使用架構,蘋果公司還通過標準共用庫的形式來發布某些技術。 由於iOS以UNIX為基礎,作業系統底層的許多技術都源自開源技術,這些技術的許多介面可以從標準庫和介面目錄訪問。
Cocoa Touch 層
Cocoa Touch層包含建立 iOS應用程式所需的關鍵架構。上至實現應用程式視覺化介面,下至與進階系統服務互動,都需要該層技術提供底層基礎。在開發應用程式的時候,請儘可能不要使用更底層的架構,儘可能使用該層的架構。
多任務
儘管應用程式進入後台就會被掛起,但可以通過下述的技術讓其在後台繼續運行:
不管應用程式是被掛起還是在後台運行,支援多任務不需要付出額外的工作。但是在某些情況(例如記憶體不足)下,應用程式可能會被結束運行。因此,應用程式應該可以在任何時候退出。這就意味著許多在退出應用程式時需要執行的任務必須改為在應用程式切換到背景時候執行。這就要求您在應用程式委託中實現一些新的方法以響應程式的狀態切換。
資料保護
和敏感使用者資料打交道的應用程式可以使用裝置內建加密功能(有些裝置可能不提供內建加密功能)對資料進行保護。如果應用程式指定某個檔案受保護,系統會以加密格式將該檔案儲存在磁碟。當裝置鎖住的時候,您的應用程式以及其他潛在的闖入者都不能訪問該檔案,而當使用者解鎖裝置後,系統會產生一份密鑰以便您的應用程式就訪問該檔案。
如需實現資料保護,應用程式應在待保護資料的建立和管理方式下一些功夫。它必須能夠在資料建立之時保證其安全,而且需要適配裝置上鎖或未上鎖造成的檔案可訪問性的變化。
蘋果推播通知服務
從設計角度看,讓應用程式支援推播通知包含兩個部分。首先,iOS應用程式需要請求系統向其發送通知,然後要合理配置應用程式委託使其可以對通知進行恰當處理。這些工作可以通過應用程式委託以及UIApplication
對象合作完成。第二,您需要提供一個伺服器端進程用於產生最初的通知。該進程運行在您自己的本機伺服器,它和蘋果推播通知服務協同工作以產生最初的通知。
本地通知
iOS 4.0引入了本地通知。本地通知是對已有推播通知的補充,通用程式可以通過它在本地組建通知,不再需要依賴外部伺服器。當有重要的事件發生時,後台應用程式可以利用本地通知獲得使用者關注。舉個例子,運行於背景導航應用程式可以使用本地通知提醒使用者要轉彎。應用程式也可以安排在未來的某個時刻向使用者發送本地通知,而且發送這些通知並不要求應用程式處於運行狀態。
本地通知的優點是它獨立於您的應用程式。一旦某個通知被安排好後,系統會負責通知發送。而且在發送通知的時候,您的應用程式無需處於運行狀態
手勢辨識器
iOS 3.2引入了手勢辨識器。手勢辨識器是一個綁定到視圖的對象,用於檢測常見的手勢類型。將手勢辨識器綁定到視圖後,您可以告訴它某個手勢發生的時候執行何種動作。之後,手勢辨識器就可以對原始事件進行跟蹤,根據系統定義的試探方式識別手勢。在引入手勢辨識器前,如果要識別一個手勢,您需要跟蹤視圖的原始觸摸事件流,然後再使用複雜的試探方法來判斷這些事件是否表示某種手勢。
現在,UIKit架構中包含一個UIGestureRecognizer
類,它定義了所有手勢辨識器的基本行為。您可以使用自訂的手勢辨識器子類或者系統定義的某個子類處理下面這些標準手勢:
拍擊 (任意次數的拍擊)
向裡或向外捏 (用於縮放)
搖動或者拖拽
擦碰 (以任意方向)
旋轉 (手指朝相反方向移動)
長按
如需進一步瞭解您可以使用的手勢辨識器
檔案分享權限設定支援
應用程式可以使用檔案分享權限設定讓使用者訪問程式的使用者資料檔案。檔案分享權限設定允許應用程式通過iTunes向使用者顯露應用程式/Documents
目錄的內容。這樣,使用者就可以在iPad和案頭電腦來回移動檔案。但是,該功能不允許應用程式和同一裝置上的其他應用程式共用檔案。如果希望在程式間共用檔案,請使用剪貼簿或者文檔互動控制器對象。
您可以通過如下步驟來讓應用程式支援檔案分享權限設定:
在應用程式的Info.plist
檔案中添加UIFileSharingEnabled
鍵,並將索引值設定為YES
。
將您希望共用的檔案放在應用程式的Documents
目錄。
一旦裝置插入到使用者電腦,iTunes 9.1就會在選中裝置的Apps標籤中顯示一個File Sharing地區。
此後,使用者就可以向該目錄添加檔案或者將檔案移動到案頭電腦中。
如果應用程式支援檔案分享權限設定,當檔案添加到Documents
目錄後,應用程式應該能夠識別並做出適當響應。例如說,應用程式可以將新檔案的內容顯示介面上。請不要向使用者展現目錄的檔案清單並詢問他們希望對檔案執行什麼操作。
點對點服務
在iOS 3.0 及後續版本,Game Kit架構支援經由藍芽進行點對點連接。您可以使用點對點連接啟動與某個鄰近裝置的通訊會話,也可用它實現多種多玩家遊戲的常見特性。雖然點對點連接主要應用於遊戲,但您也可將之應用於其他類型應用程式。
標準系統檢視表控制器
Cocoa Touch層許多架構含有展現標準系統介面的視圖控制器。我們提倡您在應用程式中使用這些視圖控制器,這樣可以讓您的程式和系統具有一致的使用者體驗。如果您需要執行下述任務,請從相應的架構中選擇一個視圖控制器使用:
顯示或者編輯連絡人資訊 - 請使用Address Book UI架構中的視圖控制器。
建立或者編輯日曆事件 - 請使用Event Kit UI架構的視圖控制器。
建立email或者SMS訊息 - 請使用Message UI架構中的視圖控制器。
開啟或者預覽一份檔案的內容 - 請使用UIKit架構中的UIDocumentInteractionController
類。
從使用者的照片庫選取一張照片 - 請使用UIKit架構中的 UIImagePickerController
類。
拍攝視頻片段 - 請使用UIKit架構中的UIImagePickerController
類。
如需瞭解如何選擇使用視圖控制器,請查看iOS視圖控制器編程指南。如需瞭解特定視圖控制器所展現的介面,請查看相應的架構參考。
外部裝置支援
安裝iOS 3.2的裝置可通過一組裝置支援的線纜串連一個外部顯示裝置。當外部裝置連上後,應用程式就可以使用其顯示屏顯示內容。螢幕的資訊,包括螢幕能夠支援的解析度都可通過UIKit架構的介面擷取。您也可以通過該架構將應用程式視窗關聯到某個螢幕。
UIScreen
類用於擷取當前所有螢幕(包括裝置主畫面)的螢幕對象。螢幕對象包含螢幕的屬性資訊(包括將螢幕的尺寸和像素比例也考慮在內的螢幕特徵)。
您可以從UIScreenMode
類獲得某個具有特定尺寸像素比例的螢幕的資訊。
您可以將視窗(使用UIWindow
類來表示)指定到某個特定的螢幕。如果您需要對內容作鏡像顯示,則需要提供兩個獨立的視窗,然後再在其中顯示相同內容。
如需進一步瞭解上述類可提供的支援,請查看UIKit架構參考中相應的類描述。
Cocoa Touch 層包含的架構Address Book 使用者介面架構Event Kit 使用者介面架構Game Kit 架構iAd 架構Map Kit 架構
iOS 3.0匯入了 Map Kit架構 (MapKit.framework
) ,該架構供一個可被嵌入到應用程式的地圖介面,該介面包含一個可以滾動的地圖視圖。您可以在視圖中添加定製資訊,並可將其嵌入到應用程式視圖,通過編程的方式設定地圖的各種屬性(包括當前地圖顯示的地區以及使用者的方位)。您也可以使用定製標註或標準標註(例如使用測針標記)反白地圖中的某些地區或額外的資訊。
在iOS 4.0系統中,該架構開始支援可拖動標註以及定製覆蓋層。可拖動標註允許您通過編程方式或通過使用者互動方式重定位某個標註的位置。覆蓋層可用於建立多個點組成的複雜地表徵圖注。地圖表面諸如大眾運輸路線、選舉地圖、公園邊界或者氣象資訊(例如雷達資料)等可以使用覆蓋層進行顯示。
如需進一步瞭解Map Kit架構中的類,請查看Map Kit 架構參考。
Message 使用者介面架構UIKit 架構媒體層圖形技術
建立應用程式最簡單最有效方法是使用事先渲染過的圖片,搭配上標準視圖以及UIKit架構的控制項,然後把繪製任務交給系統來執行。但是在某些情況下,您可能需要一些UIKit所不具有的功能,而且需要定製某些行為。在這種情況下,您可以使用下述技術管理應用程式的圖形內容:
Core Graphics (也被稱為Quartz),用於處理本地2D向量渲染和圖片渲染。
Core Animation ( Quartz Core架構的一部分),為動畫視圖和其他內容提供更進階別支援。
OpenGL ES,為使用硬體加速介面的2D和3D渲染提供支援。
Core Text,提供一個精密的文本布局和渲染引擎。
Image I/O,提供讀取及編寫大多數圖形格式的介面。
資產庫架構(Assets Library framework),可用於訪問使用者照片庫中的照片和視頻。
大多數應用程式應該無需改動,或者只需做很少修改,便可運行在具備高解析度螢幕的裝置。因為在繪圖或者操作視圖的時候,您所指定的座標值會被映射到邏輯座標系統,它和底層螢幕解析度沒有關聯。而且繪製的內容會自動根據需要按比例縮放,以此來支援高解析度螢幕。對基於向量進行繪製的代碼來說,系統架構會自動使用額外的像素來改善圖畫的內容,使其變得更清晰。如果應用程式中使用了圖片,則可以利用UIKit自動載入現有圖片的高解析度版本。
音頻技術
請記住,要儘可能地選取進階架構,因為它們可以簡化播放音頻所需的工作。下面列出的架構從進階到低級排列,,媒體播放器架構(Media Player framwork)提供的是最進階的介面:
媒體播放器架構。該架構可以讓訪問使用者的iTume庫變得很容易,並且支援播放曲目和播放清單。
AV Foundation架構。它提供一組簡單易用的Objective-C介面,可用於管理音訊播放或錄製。.
OpenAL架構。它提供一組跨平台,用於發布方位音訊介面。
Core Audio架構。它提供的介面簡單而精密,可用於播放或錄製音頻內容。您可以使用這些介面播放系統的警報聲音、觸發備的震動功能、管理多聲道的緩衝和播放、對音頻內容進行流化處理。
視頻技術
選擇視頻技術的時候,請儘可能選擇進階架構,因為進階架構可以簡化為提供對某種功能的支援所需的工作。下面列出的架構由進階到低級排列。其中,媒體播放器架構提供最進階的介面:
媒體播放器架構,它提供一組便於使用的介面,可用於播放應用程式中全屏或部分屏的電影。
AV Foundation架構,它提供一組Objective-C介面,可以對電影的捕捉和播放進行管理。
Core Media架構,它對較進階架構使用的底層類型進行描述,同時也提供一些底層介面,它們用於對媒體進行處理。
Core Services 層
Core Services層為所有的應用程式提供基礎系統服務。可能應用程式並不直接使用這些服務,但它們是系統很多部分賴以建構的基礎。
下面的部分描述一些比較常見特性,也許您正打算讓您的應用程式支援這些特性。
塊對象Grand Central Dispatch應用程式內購買(In App Purchase)定位服務SQLiteXML 支援
Core Foundation 架構
Core Foundation架構 (CoreFoundation.framework
) 是一組C語言介面,它們為iOS應用程式提供基本資料管理和服務功能。下面列舉該架構支援進行管理的資料以及可提供的服務:
群體資料類型 (數組、集合等)
程式包
字串管理
日期和時間管理
未經處理資料塊管理
偏好管理
URL及資料流操作
線程和RunLoop
連接埠和soket通訊
Core Foundation架構和Foundation架構緊密相關,它們為相同功能提供介面,但Foundation架構提供Objective-C介面。如果您將Foundation對象和Core Foundation類型摻雜使用,則可利用兩個架構之間的 “toll-free bridging”。所謂的Toll-free bridging是說您可以在某個架構的方法或函數同時使用Core Foundatio和Foundation 架構中的某些類型。很多資料類型支援這一特性,其中包括群體和字串資料型別。每個架構的類和類型描述都會對某個對象是否為 toll-free bridged,應和什麼對象橋接進行說明。
Foundation 架構
Foundation架構 (Foundation.framework
)為 Core Foundation架構的許多功能提供Objective-C封裝。您可以參考Core Foundation架構瞭解前面對Core Foundation架構的描述。 Foundation架構為下述功能提供支援:
群體資料類型 (數組、集合等)
程式包
字串管理
日期和時間管理
未經處理資料塊管理
偏好管理
URL及資料流操作
線程和RunLoop
Bonjour
通訊連接埠管理
國際化
Regex匹配
緩衝支援
Core OS 層Accelerate 架構External Accessory 架構Security 架構System
iOS 的架構裝置中的架構
表B-1描述iOS裝置提供的架構,它們位於<Xcode>/Platforms/iPhoneOS.platform/Developer/SDKs/
<iOS_SDK>/System/Library/Frameworks
目錄。路徑中的<Xcode>表示Xcode的安裝目錄, <iOS_SDK>則表示目標SDK版本。
模擬器的架構
裝置和模擬器的架構稍有區別。模擬器將幾個Mac OS X架構作為其自身實現的一部分。另外,由於系統的限制,裝置架構的確切介面有可能和模擬器架構稍有不同。
系統庫
請注意,iOS系統可能沒有將Core OS和Core Services層某些特殊的庫打包成架構,而是將其作為動態庫放在系統的/usr/lib
目錄。動態共用程式庫通過.dylib
副檔名標識,其相應的標頭檔位於/usr/include
目錄。
所有版本的iPhone SDK都包含一份安裝在系統的動態共用程式庫本機複本。這些副本被安裝在您的開發系統,您可以從XCode工程進行連結。如果您需要查看某個版本的動態庫列表,請查看<Xcode>/Platforms/iPhoneOS.platform/Developer/SDKs/
<iOS_SDK>/usr/lib
。在這個路徑中,<Xcode>表示Xcode的安裝目錄,<iOS_SDK>表示您當時正在使用某個版本的SDK。
iOS使用符號連結來指向程式庫的最近版本。在連結某個動態共用程式庫的時候,請使用符號連結而不要使用動態庫特定版本連結。因為在將來的iOS版本中,庫的版本可能會發生改變。如果您的軟體串連到某個特定的版本,而那個版本可能已經不存在於使用者的系統當中,那就會出問題。