這篇文章會介紹iOS8開發相關的主要特性。
App 插件
通過支持插件,iOS8讓我們可以系統指定的區域進行擴展,也就是為用戶的特定需求提供自定義的方法。例如:可以通過App插件幫助用戶分享他們的內容到社交網站。在用戶安裝了這個插件后,當他在App中點擊分享按鈕時就可以選擇這個插件了。自定義的插件提供接受,認證,發布用戶內容的功能。系統會在分享菜單中列出他們並且在用戶點擊后實例化他們。
在Xcode中,可以通過添加預先配置好的帶插件的app來創建它。當用戶安裝有插件的app后,用戶可以在設置中啟用它。當用戶在使用其他app時,系統會在適當的系統界面中顯示插件,比如分享菜單。
iOS在下面這些區域支持插件:
分享:分享內容到社交網絡
動作:用選定的內容執行簡單任務
今天:在今天的通知中心中提供快速更新或執行簡單任務
照片編輯:在照片類型的app中執行圖片或視頻的編輯。
提供存儲:為其他app提供文件存儲。App使用文件選擇控制器可以打開或移動文件到文件存儲提供者。
自定義鍵盤:提供一個用戶在所有app中都可以使用的鍵盤。
每種插件都定義了他們可以使用的API。當使用插件模版開始開發時,會自動創建一個帶有默認值的模版。
Touch ID 認證
現在app可以使用Touch ID來認證用戶。有些app可以需要安全登錄才能查看內容,有些app可能部分內容需要安全登錄,不管哪一種,都可以要求用戶認證后再進行其他操作。可以使用本地認證框架(LocalAuthentication.framework)來彈出一個彈出框(指定為什么需要認證)來讓用戶進行認證。當app獲得回復后,它可以根據用戶是否認證成功來執行接下來的操作。
PassKit
PassKit框架支持支付憑證和支付請求。支付請求讓用戶可以安全的提供他們的支付信息來為實體貨物或服務付款。支付憑證用在網絡支付上。
照片
在app中拍更好的照片,為照片類app提供了新的編輯能力,並且為訪問用戶照片提供了更高效的方式。
照片框架
照片框架(Photos.framework)為照片和視頻提供了新的API,包括訪問由照片APP管理的iCloud照片。這是一個更強大的框架,主要功能包括線程安全的,獲取和緩存縮略圖和大圖,修改圖片。
可以使用這個框架來創建編輯圖片和視頻的插件
手動控制攝像頭
AV基礎框架(AVFoundation.framework)讓我們可以容易拍出好照片。app可以直接控制攝像頭的焦點,白平衡,曝光度等設置。另外app可以使用曝光截圖來自動在不同曝光度下截圖。
改進了攝像頭方法
使用下來的API來發現iPhone6 和iPhone6 Plus中的攝像頭新屬性
新的屬性(videoHDRSupported)可以檢測設備是否支持高速運動捕獲
新的視頻穩定模式(AVCaptureVideoStabilizationModeCinematic)提供了更好的拍攝電影的模式
新的屬性(HighResolutionStillImageOutputEnable)可以設置AVCaptureStillImageOutput對象來拍攝高清靜態圖片。
新的屬性(autoFocusSystem)可以用來判斷攝像頭是如何聚焦的。
游戲
iOS8技術的改進讓使用游戲的圖形和視頻更簡單。使用上層框架的優勢可以更容易的開發,也可以使用底層的技術來改進GPU的能力。
Metal
Metal提供了A7和A8底層GPU的訪問,可以進行復雜的圖形渲染和計算任務。Metal消除了很多技術瓶頸,比如傳統圖形API中很耗資源的狀態驗證。Metal把所有的狀態轉移和比較操作從關鍵的性能敏感的代碼中移除。Metal預處理了着色器,狀態對象,以及明確的計划任務來保證程序達到盡可能高的GPU性能和計算效率。這個設計思想也擴展到的創建app的工具中。在創建app時,xcode會預先編譯Metal的着色器,這樣可以消除運行時准備着色器的成本。
圖形,計算以及位塊傳輸指令被無縫高效的一起使用。Metal就是為高效處理這些事務設計的,比如多線程運算和共享內存,更好的使用GPU命令
使用Metal,可以使用一個精簡的API,統一的圖形和計算語言,基於Xcode的工具,這樣就不用學習更重框架,語言,工具來使用GPU了。
SceneKit
SceneKit是一個Objective C框架用來創建簡單游戲以及豐富用戶交互的高性能的3D游戲。SceneKit在OS X 10.8就已經支持了,現在首次在iOS上支持。底層的API(比如OpenGL ES)需要實現詳細的渲染場景的邏輯。相反,SceneKit只需要描述場景的內容(形狀,材質,燈光,攝像頭)然后加上如何做動畫就行了。
SpriteKit
SpriteKit框架(SpriteKit.framework)添加了一些新屬性來支持更好的游戲效果。包括自定義OpenGL ES着色器,和SceneKit交互,以及新的物理效果和動畫。比如,可以使用SKFieldNode類創建物理區域來模擬重力,拖動,加速效果。可以很容易的實現物理的碰撞。
AV音頻引擎
AVFoundation框架(AVFoundation.framework)增加了很多上層的音頻方法。這些方法在OS X和iOS上都可以使用,包括訪問音頻輸入輸出,音頻錄制和播放,以及音頻分析和轉換。同時也可以添加特殊的效果和過濾器,控制播放速度,立體聲和3D音頻效果,以及MIDI樂器。
OpenGL ES
iOS8對APPLE_clip_distance, APPLE_texture_packed_float, APPLE_color_buffer_packed_float進行了擴展
HealthKit Framework
HealthKit(HealthKit.framework)是一個新的管理用戶健康相關信息的框架。由於有各種不同的app和設備來追蹤健康數據,用戶很難明確的知道他們意味着什么。HealthKit讓app更容易的分享數據,不管是從設備來的信息還是用戶自己輸入的。用戶的信息數據被統一的安全存儲起來。用戶可以在Health app中看到所有的數據。
如果app准備支持HealthKit,它可以訪問用戶健康相關的數據並且也可以提供數據,而且不需要特定的健康相關的硬件。用戶可以決定哪些數據可以分享給app。一旦用戶允許app訪問,app可以注冊數據改變的通知。app會獲得很詳細的通知。例如,可以請求用戶測量血壓的通知,或者用戶血壓過高時接受通知。
HomeKit Framework
HomeKit(HomeKit.framework)是一個為交流和控制設備連接到家庭的新框架。家庭中的設備可以有更好的用戶體驗。HomeKit提供了一個設備間通訊的標准方式。
app可以使用HomeKit來在他們家庭中的設備間通訊。使用你的app,用戶可以發現和配置家庭中的設備。他們也可以創建控制設備的動作,用戶也可以通過Siri控制他們。配置好之后,用戶也可以邀請其他人加入。比如,用戶也可以臨時加入一個家庭網絡。
可以使用HomeKit模擬器來測試設備上的HomeKit app。
iCloud
iCloud有一個更新可能會對現有用戶有影響
文件數據遷移
iClound在用戶設備和服務器之間的文件和數據傳輸更可靠。當用戶安裝了iOS8並且登錄iCloud賬號,iCloud服務器會為當前用戶執行一次文件和數據的遷移。這個遷移包括復制用戶的文件和數據到一個新的文件夾下。這個文件夾只能在iOS8和OS X10.10中訪問。之前的操作系統仍然訪問以前的文件夾,但是對數據的改變不會出現的新文件夾下,新文件夾下的改變也不會出現在以前的文件夾下。
CloudKit
CloudKit(CloudKit.framework)是一個app和icloud傳輸數據的通道。和其他封閉的iClound技術不同,CloudKit讓你可以控制什么時候傳輸。並且可以使用CloudKit控制所有類型的數據。
使用CloudKit存儲數據到一個庫中可以被所有的用戶共享。這個公共的庫綁定在一個app上但是可以被設備上任何地方訪問(就算沒有登錄iClound賬號)。作為開發者,可以直接管理這個數據並且可以管理所有的修改。
Document Picker
文件選擇控制器(UIDocumentPickerViewController)可以讓用戶在程序外訪問程序的沙盒。是app間共享文件的一種簡單方式。它也支持一些復雜方式,比如用戶可能在多個app中編輯同一個文件。
文件選擇器可以訪問多個文件提供者的文件。比如,iClound可以讓你訪問其他app存儲在iClound的文件,第三方開發者也可以提供文件。
Handoff
Handoff是一個在OS X和iOS上跨設備增強用戶體驗的功能。Handoff可以讓用戶在一個設備上開始一個活動,然后切換到另一個設備上並且可以在另一個設備上保持同一個活動。例如,用戶在Safari中瀏覽一個很長的文章然后切換到登錄統一apple id的iOS設備上,同樣的網頁在iOS的Safari中會自動打開,並且會滑動到以前設備的地方。Handoff讓中體驗無縫連接。
要使用Handoff的話,app只需要實現Foundation中的幾個API。每個用戶正在運行的活動由一個對象表示,並且它包含其他設備上需要還原的信息。當用戶選擇要恢復活動時,這個對象會發給另一個設備。每個活動對象有一個委托,它會在合適的時候被調用來刷新活動。
如果繼續活動不僅僅需要一個活動對象的數據,恢復的app可以與原始app建立一個數據流。基於文本的app會為基於iClound的文檔自動支持這個功能。
支持新的屏幕大小和縮放
iOS8上的app需要准備支持iPhone6和iPhone6 Plus屏幕大小。在iPhone6 Plus上,app需要同時支持新屏幕的縮放。特別是,使用OpenGL ES和Metal的app需要選擇CAEAGLLayer或CAMetalLayer來在iPhone6 Plus上有更好的展現。
要讓系統知道app支持iPhone6的屏幕大小的話,需要在app中包含一個storyboard啟動屏幕文件。在運行時,系統會尋找storyboard啟動屏幕文件。如果這個文件存在,系統會認為app支持iPhone6和iPhone6 Plus並且會以全屏模式運行。如果不存在,系統會使用小的屏幕尺寸(320*480 或 320 * 568)這樣app的屏幕計算仍然是正確的。然后內容會被拉伸來適應屏幕。
iOS8也添加了新特性讓處理屏幕大小和方向更容易。創建一個界面同時支持iPad和iPhone,適應不同的方向和屏幕大小變的更容易。使用size類,可以獲得設備在當前方向的整體大小信息。可以使用這個信息來實現最初設想的,哪些內容需要顯示,以及這些元素和其他元素的相對位置。然后使用auto layout來重新計算大小和位置。Xcode6使用size類和autolayout來創建storyboards自動適應不同的尺寸。
描述Size類以及界面的縮放
Size類可以為界面元素指定屬性,比如屏幕或界面。iOS8中有兩種size類:regular和compact。regular用戶定義大片的屏幕區域,比如在iPad上,或者屏幕上的一大張插圖,或者iPhone的滾動。每個設備都有一個size類,包括橫屏和豎屏。
下面的圖展示了iPad的size類。因為有足夠的空間,iPad的橫屏和豎屏都有一個regular size類。


iPhone的size類根據設備的方向不同而不同。在豎屏下,屏幕水平的有一個compact size類,豎直的有一個regular size類。這是豎直滾動獲取更新信息的常用方法。當iPhone在橫屏下,他們的size 類就不同了。大部分iPhone在水平和豎直都有一個compact size類。但是iPhone6 Plus在橫屏模式下有一個足夠大的空間支持regular寬度。



可以把size類和view關聯起來。當小界面包含在大界面中時這種方法很靈活。使用默認的size類來在大界面中布局用戶界面,然后根據不同的size類調整到你任何合適的位置。
要支持size類的話,可以使用下面的類:
- UITraitCollection類用來描述對象的屬性。Traits指定size類,顯示的縮放,以及特定對象的屬性。支持UITraitEnvironment協議的類(比如UIScreen, UIViewController,UIView等)都有一個trait集合。可以獲得對象的trait集合以及在traits改變時執行他們。
- UIImageAsset類用來根據traits把圖片之類對象的分組。把不同traits下細微不同的相似圖片分組然后在對應的trait下自動的獲取正確的圖片。UIImage類為它做了一些修改。
- 支持UIAppearance協議的類可以根據不同的trait自定義對象的界面。
- UIViewController類可以為子界面獲取trait集合。可以在viewWilltransitionToSize:withTransitionCoordinator:方法中改變子界面的布局。
Xcode6支持統一的storyboard。sotryboard可以添加刪除界面以及根據當前顯示的界面來限制布局。比起維護兩個不同的storyboard,可以為多個尺寸設計一個storyboard。首先設計一個公用的界面,然后為不同的界面做微調,充分利用每個尺寸的優勢。可以使用Xcode6在各種尺寸下測試來保證他們正確的顯示
支持新屏幕縮放
iPhone6 Plus使用新的高清屏。為了支持這個分辨率,iPhone 6 Plus創建了一個屏幕大小是414 * 736以及縮放比例是3.0(1242 * 2208像素)的屏幕。屏幕的內容渲染后,UIkit會自動適應1080 * 1920分辨率。要支持這種渲染行為,需要設計新的3x屏幕圖。在Xcode6中asset catelogs可以包含1x,2x以及3x大小。只要把新的圖片加進去,iOS就會自動選載正確的大小在iPhone6 Plus上運行。iOS的圖片加載同樣支持@3x后綴。
在使用Metal或OpenGL ES的圖形app中,內容可以直接按照當前的顯示尺寸進行渲染。對於高性能的3Dapp來說每次渲染都需要很多計算。可以利用緩存為要顯示的內容先渲染。
UIScreen對象提供了一個新屬性(nativeScale)來查看當前屏幕的縮放比例。當nativeSale的值和屏幕的scale值相同時,渲染的像素分辨率和屏幕的實際像素分辨率是一樣的。當兩個值不同時,可以在顯示之前對要顯示的內容進行采樣。
如果是一個OpenGL ES app,GLKView對象會分局界面大小以及contentScaleFactor屬性自動的創建渲染的緩存。在界面加到窗口之后,把view的contentScaleFactor值設置為屏幕的nativeScale屬性。
GLKView對象支持縮放
- (void) didMoveToWindow
{
self.contentScaleFactor = self.window.screen.nativeScale;
}
在Metal app中,app也需要有上面相似的代碼。另外,當界面的大小改變后,也需要更新drawableSize屬性
CGSize drawableSize = self.bounds.size; drawableSize.width *= self.contentScaleFactor; drawableSize.height *= self.contentScaleFactor; metalLayer.drawableSize = drawableSize;
其他框架更新
除了上面的主要更新以外,iOS8也包含了其他的改進
API Modernization
一些iOS框架有一些接口上的改變來適應modern objective-c 語法
- 大部分類中,Getter和setter方法被properties替代。已經使用getter和setter方法的可以繼續正常工作。
- 初始化方法更新為返回id類型返回值。
- 聲明的內容會被指定的初始化。
大部分情況下, 這些改變不需要app做什么額外工作。然而,可能需要在你自己的objective-c代碼中更新這些改變。也就是說,需要優化代碼來更好的與Swift代碼交互
AV Foundation Framework
AV Foundation框架(AVFoundation.framework)可以在拍視頻時記錄其他數據。各種數據可以隨着時間嵌套在視頻中。比如,可以記錄拍攝視頻的位置信息。
AVKit Framework
之前OS X中的AVKit框架(AVKit.framework)現在iOS也支持了。可以是使用它來播放視頻。
CoreAudioKit Framework
這個框架讓跨應用的音頻變的容易。
Core Image Framework
- 可以在iOS中創建自己的圖形內核
- Core image可以發現圖形中的矩形以及QR碼
Core Location Framework
- 可以判斷設備在哪一層,如果設備在一個多層建築上的話
- 訪問服務提供一些用戶感興趣的地點信息
Core Motion Framework
Core Motion 提供了兩個新類(CMAltimeter和CMAltitudeData)可以訪問iPhone6和iPhone6 Plus的氣壓表。這兩種設備上,也可以使用CMMotionActivity對象判斷用戶是否在自行車上。
Foundation Framework
- NSFileVersion類提供iCloud文檔的歷史版本。這些版本被存在iCloud,但是可以下載。
- NSURL類可以存儲文件縮略圖。
- NSMetadataQuery可以搜索app打開的iCloud文件
Game Controller Framework
- 如果控制器接到設備上,可以通過Game Controller Framework接收設備的動作數據
- 如果只在乎按鈕點擊而不在乎按的壓力,按鈕點擊后可以傳給游戲處理
GameKit Framework
- iOS7中添加的屬性現在OS10.10也支持了,可以更好的制作跨平台游戲。
- 新的GKSaveGame類以及GKLocalPlayer讓保存和加載用戶的游戲進度更容易。數據被保存到iCloud。GameKit會處理設備和iCloud間的文件同步工作。
- 使用字符串標識用戶的方法被棄用了。使用GKPlayer對象來標識用戶。
UIKit Framework
- 使用本地或遠程推送服務的app需要使用UIUserNofiticationSettings對象來明確的指明提示的類型。注冊流程從注冊遠程推送服務的流程中分離祝來。而且需要用戶同意。
- 推送可以執行app定義的操作。自定義的操作在提示中以按鈕的形式顯示。點擊后,app會被通知然后執行相應的操作。本地通知也可以由位置信息驅動。
- Collection界面支持動態改變cell的大小。
- UISearchController類替代UISearchDisplayController來管理搜索相關的顯示。
- UIViewController實現了traits以及新的計算大小的技術來調整內容。
- UISplitViewCOntroller可以在iPhone上支持了。
- UINavigationController有一些新的選項來改變navigation bar以及如何隱藏它。
- UIVisualEffect可以為界面增加模糊效果。
- UIPopoverPresentationController類處理popover中的內容。
- UIAlertController類替代UIActionSheet和UIAlertView類來顯示提示信息。
- UIPrinterPickerController類提供一個顯示打印機以及選擇打印機的界面。打印機由UIPrinter類實例表示。
- 用戶可以直接進入app相關的設置界面。
更多內容,參考官方文檔
