[What's New in iOS 9.x](https://developer.apple.com/library/content/releasenotes/General/WhatsNewIniOS/Articles/iOS9.html#//apple_ref/doc/uid/TP400161 ...
[What's New in iOS 9.x](https://developer.apple.com/library/content/releasenotes/General/WhatsNewIniOS/Articles/iOS9.html#//apple_ref/doc/uid/TP40016198-SW11 "What's New in iOS 9")
####iOS 9.0
#Multitasking Enhancements for iPad
iOS 9 在 Slide Over, Split View, and Picture in Picture 這幾個方面對 iPad 進行了多任務處理的加強。Slide Over (分割)屬性可以讓你選到次要 app ,並且快速的與它交互。 Split View (分屏)屬性讓你可以在 iPad Air 2 的一個屏幕上同時操作兩個 app。Picture in Picture (畫中畫)屬性可以讓你在一個全局的懸浮框中看視頻,懸浮於別的 app 頁面上層。
用戶自己決定什麼時候使用分屏工作,而你一無所知。儘管如此,你還是要做很多事情來給用戶更好的體驗:
1. 你的 app 需要有效的運行,更好的和其他運行的 app 分享系統資源。記憶體有壓力時,系統會優先殺掉消耗記憶體較多的。至於如何開發出高效的 iOS Apps 你可以看 [*Energy Efficiency Guide for iOS Apps*](https://developer.apple.com/library/content/documentation/Performance/Conceptual/EnergyGuide-iOS/index.html#//apple_ref/doc/uid/TP40015243)
2. 如果你的 app 還沒做好準備,那你最少要適配一下 Size Classes ,讓你的 app 在分屏時好看一些
更多關於如何應對 Slide Over 和 Split View 的內容請看 [*Adopting Multitasking Enhancements on iPad*](https://developer.apple.com/library/content/documentation/WindowsViews/Conceptual/AdoptingMultitaskingOniPad/index.html#//apple_ref/doc/uid/TP40015145)
和 Slide Over 和 Split View 一樣,用戶隨時都能根據自己的喜好去操作 PiP 中的視頻。這時,如果你有播放視頻功能,你啥都不用改,但是如果你有的話,你需要適配 PiP。你可以用 AVKit 或者 AV Foundation APIs,因為 Media Player framework 裡面回放的 API 在 iOS 9 中不支持 PiP,而且還被廢棄了。 更多請參考 [* Picture in Picture Quick Start *](https://developer.apple.com/library/content/documentation/WindowsViews/Conceptual/AdoptingMultitaskingOniPad/QuickStartForPictureInPicture.html#//apple_ref/doc/uid/TP40015145-CH14)
#3D Touch
3D Touch 給了 iOS 9 用戶提供了一個新維度的交互方式。在支持該功能的設備上,你可以在手機主頁面的 app icon 上按壓觸髮指定的功能。用戶可以用不同的壓力來預覽一個條目的內容、打開一個單獨的頁面併進行相關操作。
iOS 9 提供了以下的 3D Touch 的 API:
1. 主屏上的快速操作 API 用來給你的 app 添加用戶可能或確定使用的快捷方式。(UIApplicationShortcut 的 API)
2. UIKit 的 Peek 和 Pop API 讓你可以輕鬆的給用戶提供更多額外的內容(參考 UIViewControllerPreviewing, UIViewControllerPreviewingDelegate, 和 UIViewController 中新的 APIs)。使用 peek API 你可以提供一個壓力操作替換原有的點擊方式
3. WebView 也支持 peek & pop API,你可以用它預覽 HTML 內容(WKWebView)
4. UITouch 裡面的 force 屬性讓你可以自定義基於 force touch 的交互
不管你是否用了 3D Touch 的 API,你都要在運行時判斷是否支持 3D Touch。API:[*Adopting 3D Touch on iPhone*](https://developer.apple.com/library/content/documentation/UserExperience/Conceptual/Adopting3DTouchOniPhone/index.html#//apple_ref/doc/uid/TP40016543)demo:[*ApplicationShortcuts: Using UIApplicationShortcutItem*](https://developer.apple.com/library/content/samplecode/ApplicationShortcuts/Introduction/Intro.html#//apple_ref/doc/uid/TP40016545),[*ViewControllerPreviews: Using the UIViewController previewing APIs*](https://developer.apple.com/library/content/samplecode/ViewControllerPreviews/Introduction/Intro.html#//apple_ref/doc/uid/TP40016546)。
#Serach
iOS 9 的搜索給用戶提供了全新的獲取 app 內部信息的途徑,即使他還沒安裝 app。當你將你的內容設置為可以搜索,用戶可以直通過 SpotLight、Safari 的搜索結果、Handoff 以及 Siri 建議應用這些渠道,直接訪問你 app 深處的內容。使用搜索相關的 API ,你可以決定在哪些內容上加索引、哪些信息可以放在搜索結果里以及用戶點擊搜索結果(from app or website)後可以重定向到哪裡。
集成 iOS 9 的搜索是比較簡單的:你不需要任何搜索相關的經驗;很多開發者發現只要幾個小時就能配置好。想知道如何配置搜索的話,參考[*App Search Programming Guide*](https://developer.apple.com/library/content/documentation/General/Conceptual/AppSearch/index.html#//apple_ref/doc/uid/TP40016308)。
隱私是搜索功能一個重要的屬性。為了給用戶很好的搜索體驗時,保護他們的隱私,iOS 9 給出瞭如下的索引方式:
1. 一個私有的基於設備的索引:每個設備都有一個私有的索引庫,這些信息不會給 Apple ,也不會同步給其他設備。當你標記一個用戶的私有設備索引時,只有這個用戶才能在搜索結果中見到他
2. Apple 服務端的索引:服務端的索引僅僅存儲你在網站上標記的公開數據
iOS 9 提供了一下的 APIs 幫助你設置搜索:
1. 當用戶操作 app 查看或創建內容時,NSUserActivity 包含了很多新的方法和屬性來幫助你設置索引。每個 app 都可以使用 NSUserActivity APIs 來給用戶提供可用的信息
2. CoreSpotlight.framework 提供了用於添加基於設備的 app 特定內容索引以及設置深度 app 內容鏈接的 API。[*Core Spotlight Framework Reference*](https://developer.apple.com/documentation/corespotlight)
3. Web 的標記讓你可以關聯網站的內容到搜索中,以豐富搜索結果。[*Mark Up Web Content*](https://developer.apple.com/library/content/documentation/General/Conceptual/AppSearch/WebContent.html#//apple_ref/doc/uid/TP40016308-CH8)
除此之外,添加一個 Smart App Banner,可以讓用戶更容易的鏈接到你的 app [*Promoting Apps with Smart App Banners*](https://developer.apple.com/library/content/documentation/AppleApplications/Reference/SafariWebContent/PromotingAppswithAppBanners/PromotingAppswithAppBanners.html#//apple_ref/doc/uid/TP40002051-CH6)
4. 通用鏈接使用標準的 https/http 鏈接代替 URLs schmes。這個鏈接在用戶安裝 app 時會直接進入 app;沒有安裝時會用 Safari 打開你的網頁。參考[*Support Universal Links*](https://developer.apple.com/library/content/documentation/General/Conceptual/AppSearch/UniversalLinks.html#//apple_ref/doc/uid/TP40016308-CH12)
#Gaming
iOS 9 包含了很多新的技術,幫你提升游戲的畫質和音效。不管是 frameworks 裡面的 APIs 還是 底層的 APIs,都可以用來釋放 GPU 的力量。
###GameplayKit
GameplayKit.framework 提供了很多構建游戲的基礎技術。使用 GameplayKit 開發一些游戲機制,然後用任意一個上層引擎去合併它,構成一個完整的游戲。這個 framework 提供了構建游戲的模塊化基礎組建,包括:
1. 隨機工具,用於增加游戲的不可預知性且不影響測試
2. 實體系統,使游戲代碼復用性更好
3. 狀態機,用於拆解複雜的代碼
GameplayKit 也包含了一些基本的演算法。所以你會省讀書學習的時間,使用這些時間去做好你獨有的游戲。下麵列出一些標準的演算法介面:
1. 一種小型的人工智慧,用於敵對的回合制游戲
2. 一個代理模型,描述高級目標的自動移動行為(尋路功能咯)
3. 規則系統用於,建立數據驅動的游戲邏輯、模糊推理和緊急行為
參考[*GameplayKit Programming Guide*](https://developer.apple.com/library/content/documentation/General/Conceptual/GameplayKit_Guide/index.html#//apple_ref/doc/uid/TP40015172),[*GameplayKit Framework Reference*](https://developer.apple.com/documentation/gameplaykit)。
###Model I/O
ModelIO.framework 提供了一個系統級別的 3D 模型的素材和依賴資源庫。你可以用用它來完成以下的任務:
1. 導入網格數據、材質描述、光影、相機效果,以及來源於主流軟體和引擎其他場景相關信息
2. 處理生成這些數據:烘焙一個網格或創建一個天空紋理
3. 與 MetalKit, GLKit, 或者 SceneKit APIs 一起,有效的將資源文件載入到 GPU 緩衝區進行渲染
4. 導出處理的或者生成的資源數據為任意一種文件格式
參考[*ModelIO Framework Reference*](https://developer.apple.com/documentation/modelio)。
###MetalKit
MetalKit.framework 提供了一系列實用的方法和類,用來減少開發一個 Metal app 的工作量。MetalKit 在這兩個方面給了開發支持:
1. 紋理載入方面:幫助你的 app 輕鬆做到非同步載入紋理。不僅支持普通的 PNG、JPEG,特殊的紋理格式也支持,例如 KTX 和 PVR
2. 模型處理方面:提供了 Metal 特有的方法,讓你可以更好的使用 Model I/O 的介面。使用高度優化的方法和對象在 Model I/O 網格 和 Metal 緩衝區之間傳輸數據
3. 頁面管理方面:頁面管理器給了一個標準的 Metal view 的實現。這大大減少了圖形渲染 app 的開發時間
參考[*MetalKit Framework Reference*](https://developer.apple.com/documentation/metalkit),[*Metal Programming Guide*](https://developer.apple.com/library/content/documentation/Miscellaneous/Conceptual/MetalProgrammingGuide/Introduction/Introduction.html#//apple_ref/doc/uid/TP40014221)。
###Metal Performance Shaders
MetalPerformanceShaders.framework 提供了高度優化的計算和圖形著色器,這些都為高效集成到你的 app 中而設計。這些同步數據著色器都根據支持 Metal 的 iOS 設備進行了調整。
使用 MetalPerformanceShaders.framework 中的了類,構建支持所有設備的性能最優的著色器,而不需要針對特定 iOS 設備改動你的代碼。MetalPerformanceShader 對象可以無縫的適配你的 app,包括可以被任何使用 Metal 資源的對象(比如緩衝區和紋理)。
通用的 MetalPerformanceShaders.framework 提供的著色器如下:
1. Gaussian blur(高斯模糊) - MPSImageGaussianBlur
2. Image histogram(圖像直方圖) - MPSImageHistogram
3. Sobel edge detection(索貝爾邊緣檢測) - MPSImageSobel
###New Features in Metal
Metal.framework 加入了一些新的特性,是你的圖形渲染 app 看上去更好,運行也更有效。如下:
1. 改進了 Metal Shading Language 和 Metal Standard Library
2. 計算著色器現在可以寫入到更大的像素格式
3. 新增了一些私有的、深度的模版材質與 OS X 保持一致
4. 為改善陰影質量,增加了深度夾緊和前、後向的模板參考值
###New Features in SceneKit
SceneKit.framework 為 iOS 9 增加了以下特性:
1. Metal 渲染的支持:[SCNView](https://developer.apple.com/documentation/scenekit/scnview),[SCNSceneRenderer](https://developer.apple.com/documentation/scenekit/scnscenerenderer)支持對應機型高性能的 Metal 渲染
2. Xcode 新增了一種場景編輯器:使用 Xcode 可以使用很少的代碼和時間來創建游戲和支持 3D 交互 app。demo [*Fox: Building a SceneKit Game with the Xcode Scene Editor*](https://developer.apple.com/library/content/samplecode/Fox/Introduction/Intro.html#//apple_ref/doc/uid/TP40016154)
3. 位置音效:使用[SCNAudioPlayer](https://developer.apple.com/documentation/scenekit/scnaudioplayer),[SCNNode](https://developer.apple.com/documentation/scenekit/scnnode)可以添加空間音效,並跟蹤聽者的位置自動調整
###New Features in SpriteKit
SpriteKit.framework 在 iOS 9 增加了以下功能:
1. Metal 渲染的支持:在有 Metal 設備上,支持對應機型高性能的 Metal 渲染,即使你用的是自定義的 OpenGL ES 的著色器
2. Xcode 的場景編輯器進行了提升,順帶家了一個新的動作編輯器。可以用更少的代碼和時間來構建游戲和 2D App [*DemoBots: Building a Cross Platform Game with SpriteKit and GameplayKit*](https://developer.apple.com/library/content/samplecode/DemoBots/Introduction/Intro.html#//apple_ref/doc/uid/TP40015179)
3. 相機節點:使用這個可以輕易的做出滾動類的游戲。僅需將一個相機節點加入到場景的屬性中就好了[*SKCameraNode*](https://developer.apple.com/documentation/spritekit/skcameranode)
4. 位置音效:可以給場景添加空間音效,並跟蹤聽者的位置自動調整 [*SKAudioNode Class Reference*](https://developer.apple.com/documentation/spritekit/skaudionode)
#App Thinning
app 瘦身讓你可以開發目標平臺的 app 並且在安裝的時候自動給用戶一個最合適的包。這個優化包括以下方面:
1. 碎片化:app 內的插圖與資源文件都可以按照對應的平臺進行提供,前提是 App Store app
2. 按需載入:app 可以不一次性下載全部的內容。iTunes App Store 會部署主機,用來放置你按需載入的內容。這個載入安裝支持非同步(ps:如果是企業版的可以放在自己的 https 的伺服器下)
3. bitcode:使用 bitcode 編譯後 ,App Store 會對你上傳的包再次編譯,使之生成 32 位和 64 位的兩套,以供對應的設備下載
參考[*App Thinning*](https://developer.apple.com/library/content/documentation/IDEs/Conceptual/AppDistributionGuide/AppThinning/AppThinning.html#//apple_ref/doc/uid/TP40012582-CH35)
#Support for Right-to-Left Languages
iOS 9 全面支持從右到左佈局。這讓你更容易的提供一個反向的界面:
1. UIKit 標準庫的控制項自動支持反向內容佈局
2. UIView 定義了對應的特殊化的語義,你可以自行控制哪些 view 的內容支持反轉
3. UIImage 新增了 imageFlippedForRightToLeftLayoutDirection 方法,用於在代碼中適配反向的內容
##App Transport Security
ATS 這個是用於保證 app 與後端交互的安全的。ATS 防止意外的信息暴露,提供基礎的安全服務,適配也很簡單(iOS 9 and OS X v10.11 +)
如果你正在開發 app 你需要使用HTTPS,如果你的 app 已經發佈了。你需要儘快制定一個計劃來支持HTTPS。此外,你與上層 API 交互時,需要使用 TLS 1.2 進行加密。如果你還沒打算處理 ATS,你需要在你的 info.plist 給你的請求加入白名單。
##Extension Points
iOS 9 新增了一系列擴展點(擴展點是用來給 app 的擴展應用提供使用協議和相關 APIs 的)
1. Network extension points
1.1 包隧道工具擴展點:可以用它定義 VPN 客戶端的隧道協議
1.2 app 代理工具擴展點:可以用它自定義透明的客戶端網路代理協議
1.3 數據過濾和數據控制工具擴展點:可以用它動態的在設備上過濾內容
2. Safari extension points
2.1 Safari 分享鏈接擴展點:允許用戶在 Safari 分享鏈接中看到你的內容
2.2 Safari 內容屏蔽擴展點:你可以給 Safari 一個屏蔽掉列表,當用戶訪問列表內的內容時,將會被屏蔽
3. Index Maintenance extension point 支持在不打開 app 的情況下維護 app 的數據索引
4. Audio Unit extension point 允許你的 app 提供樂器、音效、聲場以及更多的供其他 app(Audio Unit app)使用功能。這個擴展點也提供了一個完整的插件模型,讓你的 Audio Units 可以在 App Store 上售賣
[*App Extension Programming Guide*](https://developer.apple.com/library/content/documentation/General/Conceptual/ExtensibilityPG/index.html#//apple_ref/doc/uid/TP40014214)
#Contacts and Contacts UI
iOS 9 加入了 Contacts.framework 和 ContactsUI.framework,這兩個用於替換現有的 Address Book 和 Address Book UI frameworks。[*Contacts Framework Reference*](https://developer.apple.com/documentation/contacts)
#Watch Connectivity
WatchConnectivity.framework 提供了兩種方式用於 iPhone 與其配套的 Watch 上的對應 app 進行通訊。這個 framework 支持兩種方式,前臺即時通訊和後臺非同步通訊。[*Watch Connectivity Framework Reference*](https://developer.apple.com/documentation/watchconnectivity)
#Keychain
鑰匙串提供了更多保護選項和一種新的獨立持有的加密密鑰。以下:
1. 新的訪問許可權名單,讓你可以創建僅僅基於 Touch ID 或密碼的訪問限制
2. 新的 Touch ID 訪問許可權可以通過在鑰匙串中加入或刪除指紋來控制
3. 支持 app 使用訪問許可權中的 Application Password 的選項,自主提供加密熵
4. 支持上下文認證,也就是說你可以單獨從保密條目中調起一個認證
5. 支持使用 kSecAttrTokenIDSecureEnclave 屬性進行密鑰生成和獨立加密熵生成。註意,這些密鑰可以被訪問許可權名單所支持的限制進行控制
##Swift Enhancements
學習新的 Swift,參考[*Swift Language*](https://developer.apple.com/library/content/documentation/Xcode/Conceptual/WhatsNewXcode-Archive/Articles/xcode_7_0.html#//apple_ref/doc/uid/TP40015242-SW2)
#Additional Framework Changes
iOS 9 在以下 frameworks 中有了很多提升:
###AV Foundation Framework
AVFoundation.framework 新增了 AVSpeechSynthesisVoice 的 API,可以讓你通過 id 判斷音頻,而不是語言。你也可以使用 name 和 quality 兩個屬性來獲得音頻的信息。
###AVKit Framework
AVKit.framework 加入了 AVPictureInPictureController 和 AVPlayerViewController,用於幫助你實現畫中畫功能。
###CloudKit Framework
如果你有 CloudKit 的 app,你可以使用 CloudKit 的 web 服務或者 CloudKit JS(一個 js 的庫)提供一個網頁版的界面,使用戶在你的 app 中訪問 Cloud 中同樣的數據。你必須為你的資料庫設置 schema,給已經創建的網頁界面提供獲取數據、創建數據、更新數據和刪除記錄、空間和訂閱功能。[*CloudKit JS Reference*](https://developer.apple.com/documentation/cloudkitjs),[*CloudKit Web Services Reference*](https://developer.apple.com/library/content/documentation/DataManagement/Conceptual/CloudKitWebServicesReference/index.html#//apple_ref/doc/uid/TP40015240),[*CloudKit Catalog: An Introduction to CloudKit (Cocoa and JavaScript)*](https://developer.apple.com/library/content/samplecode/CloudAtlas/Introduction/Intro.html#//apple_ref/doc/uid/TP40014599)
###Foundation Framework
Foundation.framework 有了以下的加強:
1. 按需下載的 APIs
2. 字元文件對上下文可變寬字元串的支持
3. NSProcessInfo 用於電源和熱量管理的 APIs
###HealthKit Framework
HealthKit.framework 有以下的增強:
1. 新增對生殖健康和紫外線繫數的追蹤選項
2. 支持刪除條目和已刪除條目的跟蹤,參考 HKDeletedObject, HKAnchoredObjectQuery, and the deleteObjects:withCompletion: and deleteObjectsOfType:predicate:withCompletion: methods in [HKHealthStore Class Reference](https://developer.apple.com/documentation/healthkit/hkhealthstore)
###Local Authentication Framework
LocalAuthentication.framework 新增了一下內容:
1. 可以獲得當前登記的指紋;因此,指紋的增刪對 app 的動作會有一些影響
2. 支持在代碼層取消用戶提示
3. 支持對鑰匙串許可權名單以及上下文許可權的接入
4. 支持 Touch ID 匹配的復用;用於手機解鎖的指紋可以在 evaluateAccessControl: 和 evaluatePolicy:localizedReason:reply: 中使用
###MapKit Framework
MapKit.framework 新增了以下功能以提供更好的用戶體驗:
1. 支持查詢ETA信息(預計到達、離開時間)以及在地圖加入相應的標註
2. 支持 3D 城市觀光模式
3. 動畫可以完全自定義
4. MapKit 和 CLGeocoder 的搜索結果可以根據時區篩選
###PassKit Framework
PassKit.framework 加入了很多用戶增強 Apple Pay 的支持。特別是
1. 在 iOS 9 中 Apple Pay 支持發現卡、商店借記卡和其他信用卡[*PKPaymentRequest Class Reference*](https://developer.apple.com/documentation/passkit/pkpaymentrequest)
2. 卡的發行機構和支付公司可以在它們自己的 app 中將卡直接添加到 Apple Pay[*PKAddPaymentPassViewController Class Reference*](https://developer.apple.com/documentation/passkit/pkaddpaymentpassviewcontroller)
###Safari Services Framework
SafariServices.framework 有了以下的更新:
SFSafariViewController 可以在你 app 中用於展示 web 內容。它和 Safari 共用 cookie 和站點數據,也有 Safari 的其他優秀屬性(Safari AutoFill and Safari Reader)。和 Safari 不一樣,SFSafariViewController 的 UI 就是為了展示單頁的,上面有個完成按鈕,用於點擊返回你的 app。
如果你的 app 需要展示 web 內容,並且不需要自定義。你可以用 SFSafariViewController 替換 WKWebView 或者 UIWebView 的頁面。
###UIKit Framework
UIKit.framework 包括了以下的更新內容:
1. UIStackView 用於維護當前頁面的子頁面,控制它們的垂直或水平佈局
2. 新的約束方式支持錨點佈局,UIView 的 (leadingAnchor & widthAnchor)以及 NSLayoutAnchor & NSLayoutDimension,都讓你更容易的佈局
3. 你的佈局指導,讓你更容易的適配好頁面內容。參考[*UILayoutGuide*](https://developer.apple.com/documentation/uikit/uilayoutguide)
4. AppDelegate 裡面新增了文件打開和修改(針對的是其他 app 共用的文件)直接操作方法,而不是操作備份。這個可以在 plist 裡面設置 LSSupportsOpeningDocumentsInPlace 屬性來開關
5. UITextInputAssistantItem 讓你可以直接拖一個 barbutton 組在快捷欄上
6. 對 touch 事件的強化: 例如可以預估上次刷新頁面到這次之間點擊事件的能力
7. 對 UIKit 動力學增強,例如支持非矩形邊界的碰撞;新增 UIFieldBehavior,支持多種欄位類型(包括自定義的),以及 UIAttachmentBehavior 中的其他附件類型
8. UIUserNotificationAction 中新加了動作屬性 behavior,讓用戶可以在通知處理時輸入文本
9. NSDataAsset 讓你可以更容易的根據設備的硬體去獲取資源
10. UIKit 的控制項全面支持從左到右佈局
#Deprecated APIs
以下 APIs 被廢棄:
1. Address Book 和 Address Book UI 被新的 Contacts 和 Contacts UI 替換
2. NSURLConnection APIs 被 NSURLSession APIs所替換
####iOS 9.1
iOS 9.1 只加了2個東西,Live Photos 和 Apple Pencil 的支持
#Live Photos
Live Photos 讓用戶可以捕捉和重現一些快樂的時刻,它提供了比傳統照片更豐富的內容。當用戶按下快門的時候,這個特性會讓你的鏡頭捕捉到更多的內容:更多的圖片幀數,音頻信息等。當你回放這些動態的照片時,可以看到更多的信息。
iOS 9.1 提供了相關的 APIs,允許 app 播放、導出和分享 Live Photos。Photos framework 新增的 PHLivePhoto 對象,它可以從 PHImageManager 中提取給你 Live Photos 的數據。當然你需要使用 PhotosUI framework 中的 PHLivePhotoView 來展示對應的內容。PHLivePhotoView 提供了完整的展示、交互以及視覺處理。
你可以使用 PHAssetResource 從 PHLivePhoto 裡面獲取數據用於分享。你可以通過 PHImageManager or UIImagePickerController 在相冊中請求 LivePhotos 的資源。如果你的 app 有分享的擴展點,你還可以通過 NSItemProvider 來獲取 LivePhotos。在接受端你可以使用 PHLivePhoto 來存放分享者提供的數據。
Live Photos 導出的數據是 PHAssetResource 類型的對象。上傳這一堆數據時,你必須當成一個整體去對待。當你在服務端重新打包這段數據時,需要進行來源驗證,不同來源的不能進行載入。
#Support for Apple Pencil
iOS 9.1 引入了一些 APIs,在 Apple Pencil 支持的設備上,允許用戶進行對應的操作。為此,UITouch 做了以下改動:
1. preciseLocationInView: 和 precisePreviousLocationInView: 這兩個方法,會在可用的情況下給你提供 touch 的坐標
2. altitudeAngle 屬性和 azimuthAngleInView: 和 azimuthUnitVectorInView: 方法會為你確定筆尖的高度和方向
3. estimatedProperties 和 estimatedPropertiesExpectingUpdates 對象會幫你做好刷新 touches 前的預估準備
4. UITouchTypeStylus 會表徵從筆尖收到的 touch
####iOS 9.2
iOS 9.2 對 CloudKit Framework 和 WatchKit Framework 進行了優化。
#CloudKit Framework
CKFetchWebAuthTokenOperation 提供了一個對象讓你提供給 web 對象 API token 時,可以獲得它的 token。
#WatchKit Framework
WKInterfaceDevice 支持從右到左佈局,它會提供 layout 的方向參數(WKInterfaceLayoutDirection)以及內容展示用的控制項信息(WKInterfaceSemanticContentAttribute)
####iOS 9.3
#Accessing the Music Library
Media Player 和 StoreKit frameworks 提供了新的 API,讓你可以將 Apple Music 的音軌加入到 Music Library 並播放它。首先,使用 SKCloudServiceController API 去看一下當前的設備是否允許你這麼做。然後,使用 MPMediaLibrary 的 addItemWithProductID:completionHandler: 方法去添加一個音軌到音樂庫中,並且使用 MPMusicPlayerController 的 setQueueWithStoreIDs: 方法去播放它。
#CloudKit Framework
CloudKit.framework 支持長操作,即使你退出了也可以在操作。例如大型文件的後臺下載,或者用戶操作的持久化同步。
如果你將一個 CKModifyRecordsOperation 標記為長操作,記住你的操作因為不會立刻結束,所以這會增加操作衝突的風險。為了防患於未然,你需要:
1. 創建一個 journal 記錄,單次寫入的記錄(沒有衝突的話),然後在讀取的使用協調一下這個記錄
2. 當你解決了衝突後,下次啟動 app 時從新操作一次
#HealthKit Framework
在 HealthKit.framework 中的 HKActivitySummary 對象給了用戶當天數據的集合。包括當天的運動量、能量消耗以及站了多久。 Apple Watch 會將數據存在 HealthKit store 中。你可以創建自己的數據集合(例如在你的 iPhone app 中展示 HKActivityRingView),但是這些數據不會被放在 HealthKit store 中。你可以用 HKActivitySummaryQuery 去讀取 HealthKit store 中的 HKActivitySummary 數據。
#HealthKitUI Framework
iOS 9.3 新增了 HealthKitUI.framework,其中的 HKActivityRingView 可以用來展示 HKActivitySummary 的數據。(移動距離-紅色;鍛煉-藍色;站立-綠色)
##Watch Connectivity Framework
WatchConnectivity.framework 有了 iPhone 連接多個 Watch 的功能。所以,如果你的 app 是要與 Watch 版通訊的,你需要適配一下。使用新的界面管理 Watch 會話。新的界面提供了更多的信息,如配對的狀態和發起配對的提示。所以你如果不適配的話,出現多個 Watch 的時候,你的 app 就可能跪了。
####iOS 9.x end